Index: issm/oecreview/Archive/16133-16554/Date.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/Date.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/Date.tex	(revision 16556)
@@ -0,0 +1,1 @@
+Oct-28-2013
Index: issm/oecreview/Archive/16133-16554/ISSM-16138-16139.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16138-16139.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16138-16139.diff	(revision 16556)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/dox/issm.dox
+===================================================================
+--- ../trunk-jpl/src/dox/issm.dox	(revision 16138)
++++ ../trunk-jpl/src/dox/issm.dox	(revision 16139)
+@@ -46,22 +46,22 @@
+ <th  bgcolor=#7AA9DD style="text-align:left;">Language</th><th  bgcolor=#7AA9DD style="text-align:right;">files</th><th  bgcolor=#7AA9DD style="text-align:right;">blank</th><th  bgcolor=#7AA9DD style="text-align:right;">comment</th><th  bgcolor=#7AA9DD style="text-align:right;">code</th><th  bgcolor=#7AA9DD style="text-align:right;">Total</th>
+ </th>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">478</td><td  bgcolor=#FFFFFF style="text-align:right;">14993</td><td  bgcolor=#FFFFFF style="text-align:right;">17509</td><td  bgcolor=#FFFFFF style="text-align:right;">60128</td><td  bgcolor=#FFFFFF style="text-align:right;">92630</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">492</td><td  bgcolor=#FFFFFF style="text-align:right;">15134</td><td  bgcolor=#FFFFFF style="text-align:right;">17851</td><td  bgcolor=#FFFFFF style="text-align:right;">63296</td><td  bgcolor=#FFFFFF style="text-align:right;">96281</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">1037</td><td  bgcolor=#C6E2FF style="text-align:right;">7053</td><td  bgcolor=#C6E2FF style="text-align:right;">14331</td><td  bgcolor=#C6E2FF style="text-align:right;">33157</td><td  bgcolor=#C6E2FF style="text-align:right;">54541</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">1057</td><td  bgcolor=#C6E2FF style="text-align:right;">7147</td><td  bgcolor=#C6E2FF style="text-align:right;">14649</td><td  bgcolor=#C6E2FF style="text-align:right;">33842</td><td  bgcolor=#C6E2FF style="text-align:right;">55638</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">381</td><td  bgcolor=#FFFFFF style="text-align:right;">3146</td><td  bgcolor=#FFFFFF style="text-align:right;">3358</td><td  bgcolor=#FFFFFF style="text-align:right;">13275</td><td  bgcolor=#FFFFFF style="text-align:right;">19779</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">383</td><td  bgcolor=#FFFFFF style="text-align:right;">3169</td><td  bgcolor=#FFFFFF style="text-align:right;">3340</td><td  bgcolor=#FFFFFF style="text-align:right;">13334</td><td  bgcolor=#FFFFFF style="text-align:right;">19843</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> Python </th><td  bgcolor=#C6E2FF style="text-align:right;">115</td><td  bgcolor=#C6E2FF style="text-align:right;">4054</td><td  bgcolor=#C6E2FF style="text-align:right;">6697</td><td  bgcolor=#C6E2FF style="text-align:right;">7601</td><td  bgcolor=#C6E2FF style="text-align:right;">18352</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> Python </th><td  bgcolor=#C6E2FF style="text-align:right;">119</td><td  bgcolor=#C6E2FF style="text-align:right;">1911</td><td  bgcolor=#C6E2FF style="text-align:right;">2296</td><td  bgcolor=#C6E2FF style="text-align:right;">7443</td><td  bgcolor=#C6E2FF style="text-align:right;">11650</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> m4 </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">213</td><td  bgcolor=#FFFFFF style="text-align:right;">6</td><td  bgcolor=#FFFFFF style="text-align:right;">1512</td><td  bgcolor=#FFFFFF style="text-align:right;">1731</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> m4 </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">184</td><td  bgcolor=#FFFFFF style="text-align:right;">6</td><td  bgcolor=#FFFFFF style="text-align:right;">1845</td><td  bgcolor=#FFFFFF style="text-align:right;">2035</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> CMake </th><td  bgcolor=#C6E2FF style="text-align:right;">158</td><td  bgcolor=#C6E2FF style="text-align:right;">0</td><td  bgcolor=#C6E2FF style="text-align:right;">835</td><td  bgcolor=#C6E2FF style="text-align:right;">598</td><td  bgcolor=#C6E2FF style="text-align:right;">1433</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> CMake </th><td  bgcolor=#C6E2FF style="text-align:right;">2</td><td  bgcolor=#C6E2FF style="text-align:right;">31</td><td  bgcolor=#C6E2FF style="text-align:right;">84</td><td  bgcolor=#C6E2FF style="text-align:right;">637</td><td  bgcolor=#C6E2FF style="text-align:right;">752</td>
+ </tr>
+ <tr>
+ <th  bgcolor=#FFFFFF style="text-align:left;"> Objective  C </th><td  bgcolor=#FFFFFF style="text-align:right;">9</td><td  bgcolor=#FFFFFF style="text-align:right;">96</td><td  bgcolor=#FFFFFF style="text-align:right;">0</td><td  bgcolor=#FFFFFF style="text-align:right;">370</td><td  bgcolor=#FFFFFF style="text-align:right;">466</td>
+@@ -70,13 +70,13 @@
+ <th  bgcolor=#C6E2FF style="text-align:left;"> Fortran </th><td  bgcolor=#C6E2FF style="text-align:right;">77</td><td  bgcolor=#C6E2FF style="text-align:right;">7</td><td  bgcolor=#C6E2FF style="text-align:right;">4</td><td  bgcolor=#C6E2FF style="text-align:right;">302</td><td  bgcolor=#C6E2FF style="text-align:right;">365</td><td  bgcolor=#C6E2FF style="text-align:right;">678</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">58</td><td  bgcolor=#FFFFFF style="text-align:right;">71</td><td  bgcolor=#FFFFFF style="text-align:right;">252</td><td  bgcolor=#FFFFFF style="text-align:right;">381</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#FFFFFF style="text-align:right;">2</td><td  bgcolor=#FFFFFF style="text-align:right;">48</td><td  bgcolor=#FFFFFF style="text-align:right;">66</td><td  bgcolor=#FFFFFF style="text-align:right;">213</td><td  bgcolor=#FFFFFF style="text-align:right;">327</td>
+ </tr>
+ <tr>
+ <th  bgcolor=#C6E2FF style="text-align:left;"> Perl </th><td  bgcolor=#C6E2FF style="text-align:right;">1</td><td  bgcolor=#C6E2FF style="text-align:right;">6</td><td  bgcolor=#C6E2FF style="text-align:right;">9</td><td  bgcolor=#C6E2FF style="text-align:right;">196</td><td  bgcolor=#C6E2FF style="text-align:right;">211</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">2190</td><td  bgcolor=#FFFFFF style="text-align:right;">29623</td><td  bgcolor=#FFFFFF style="text-align:right;">43118</td><td  bgcolor=#FFFFFF style="text-align:right;">117454</td><td  bgcolor=#FFFFFF style="text-align:right;">190195</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">2074</td><td  bgcolor=#FFFFFF style="text-align:right;">27730</td><td  bgcolor=#FFFFFF style="text-align:right;">38603</td><td  bgcolor=#FFFFFF style="text-align:right;">121541</td><td  bgcolor=#FFFFFF style="text-align:right;">187874</td>
+ </tr>
+ </table>
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16139-16140.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16139-16140.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16139-16140.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16139)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16140)
+@@ -30,7 +30,7 @@
+ 		GaussTria(int order);
+ 		GaussTria(int index1,int index2,int order);
+ 		GaussTria(int index,IssmDouble r1, IssmDouble r2,bool maintlyfloating,int order);
+-		GaussTria(IssmDouble area_coordinates[3][3],int order);
++		GaussTria(IssmDouble area_coordinates[2][3],int order);
+ 		~GaussTria();
+ 
+ 		/*Methods*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16140-16141.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16140-16141.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16140-16141.diff	(revision 16556)
@@ -0,0 +1,143 @@
+Index: ../trunk-jpl/test/NightlyRun/testad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/testad.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/testad.m	(revision 16141)
+@@ -0,0 +1,27 @@
++%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',1);
++%md.debug.valgrind=true;
++%md.verbose=verbose('11111111')
++md.toolkits.DefaultAnalysis=issmsolver();
++
++md.autodiff.isautodiff=true;
++md.verbose.autodiff=true;
++
++%first run scalar reverse mode: 
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar','fos_reverse_index',1)};
++md.autodiff.driver='fos_reverse';
++
++md=solve(md,TransientSolutionEnum());
++
++%recover jacobian: 
++jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
++
++%Fields and tolerances to track changes
++field_names     ={'Jac Reverse'};
++field_tolerances={1e-8};
++field_values={jac_reverse};
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16140)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16141)
+@@ -313,6 +313,7 @@
+ 			/*Free resources: */
+ 			xDelete(xp);
+ 			xDelete(axp); 
++			xDelete(driver);
+ 		#else
+ 			_error_("Should not be requesting AD drivers when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/c/shared/MemOps
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps	(revision 16140)
++++ ../trunk-jpl/src/c/shared/MemOps	(revision 16141)
+
+Property changes on: ../trunk-jpl/src/c/shared/MemOps
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx	(revision 16140)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx	(revision 16141)
+
+Property changes on: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16140)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16141)
+@@ -55,6 +55,7 @@
+ 			parameters->AddObject(new IntMatParam(AutodiffFovForwardIndicesEnum,indices,num_indices,1));
+ 			xDelete<int>(indices);
+ 		}
++		xDelete<char>(autodiff_driver);
+ 		/*}}}*/
+ 		/*Deal with dependents first: {{{*/
+ 		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
+@@ -75,6 +76,7 @@
+ 			/*Free ressources:*/
+ 			xDelete<int>(names);
+ 			xDelete<int>(types);
++			xDelete<int>(indices);
+ 		}
+ 		parameters->AddObject(new DataSetParam(AutodiffDependentObjectsEnum,dependent_objects));
+ 		parameters->AddObject(new IntParam(AutodiffNumDependentsEnum,num_dep));
+@@ -99,6 +101,7 @@
+ 				local_num_ind=ind->NumIndependents(); xp=xp+local_num_ind;
+ 			}
+ 			xp=xp_backup; parameters->AddObject(new DoubleVecParam(AutodiffXpEnum,xp,num_ind));
++			xDelete<IssmDouble>(xp);
+ 		}
+ 		parameters->AddObject(new IntParam(AutodiffNumIndependentsEnum,num_ind));
+ 
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx	(revision 16140)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx	(revision 16141)
+
+Property changes on: ../trunk-jpl/src/c/modules/SystemMatricesx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx	(revision 16140)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx	(revision 16141)
+
+Property changes on: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16140)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16141)
+@@ -542,6 +542,7 @@
+ 			}
+ 		}
+ 		delete dependent_objects;
++		xDelete<IssmPDouble>(dependents);
+ 		#else
+ 		_error_("Should not be requesting dependents when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16140)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16141)
+@@ -95,7 +95,9 @@
+ 	if(this->data){
+ 		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
+ 			if(this->data[i]){
+-				_printf0_("Info: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
++				/*Release data pertaining to Autodiff runs: */
++				IssmDouble* array=this->data[i];
++				xDelete<IssmDouble>(array);
+ 			}
+ 		}
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16141-16142.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16141-16142.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16141-16142.diff	(revision 16556)
@@ -0,0 +1,443 @@
+Index: ../trunk-jpl/test/NightlyRun/testad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/testad.m	(revision 16141)
++++ ../trunk-jpl/test/NightlyRun/testad.m	(revision 16142)
+@@ -1,12 +1,13 @@
+ %test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+-md=triangle(model(),'../Exp/Square.exp',100000.);
++md=triangle(model(),'../Exp/Square.exp',500000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',1);
++md.cluster=generic('name',oshostname(),'np',2);
+ %md.debug.valgrind=true;
+ %md.verbose=verbose('11111111')
+ md.toolkits.DefaultAnalysis=issmsolver();
++%md.toolkits.DefaultAnalysis.solver_type='gsl';
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16141)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16142)
+@@ -607,6 +607,8 @@
+ 	MpiDenseEnum,
+ 	SeqEnum,
+ 	MpiEnum,
++	MumpsEnum,
++	GslEnum,
+ 	/*}}}*/
+ 	/*Options{{{*/
+ 	OptionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16142)
+@@ -581,6 +581,8 @@
+ 		case MpiDenseEnum : return "MpiDense";
+ 		case SeqEnum : return "Seq";
+ 		case MpiEnum : return "Mpi";
++		case MumpsEnum : return "Mumps";
++		case GslEnum : return "Gsl";
+ 		case OptionEnum : return "Option";
+ 		case GenericOptionEnum : return "GenericOption";
+ 		case OptionCellEnum : return "OptionCell";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16142)
+@@ -593,6 +593,8 @@
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+ 	      else if (strcmp(name,"Seq")==0) return SeqEnum;
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
++	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
++	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16142)
+@@ -20,6 +20,7 @@
+ 	char*       autodiff_driver=NULL;
+ 	int*        indices=NULL;
+ 	int         num_indices;
++	char* options=NULL;
+ 
+ 	IssmDouble* xp=NULL;
+ 	IssmDouble* xp_backup=NULL;
+@@ -115,12 +116,30 @@
+ 	#ifdef _HAVE_ADOLC_
+ 		/*initialize a placeholder to store solver pointers: {{{*/
+ 		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+-		#ifdef _HAVE_GSL_
+-		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
+-		#endif
+-		#ifdef _HAVE_MUMPS_
+-		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF);
+-		#endif
++
++		/*Solver pointers depend on what type of solver we are implementing: */
++		options=OptionsFromAnalysis(parameters,DefaultAnalysisEnum); //options database is not filled in yet, use default.
++		ToolkitOptions::Init(options);
++
++		switch(IssmSolverTypeFromToolkitOptions()){
++			case MumpsEnum:{
++				#ifdef _HAVE_MUMPS_
++				theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(mumpsSolveEDF);
++				#else
++				_error_("requesting mumps solver without MUMPS being compiled in!");
++				#endif
++				break;
++							}
++			case GslEnum: {
++				#ifdef _HAVE_GSL_
++				theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
++				#endif
++			    break;
++						  }
++			default:
++				_error_("solver type not supported yet!");
++		}
++
+ 		// to save some space:
+ 		// we know we won't use adolc inside of  the solver:
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16141)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16142)
+@@ -9,12 +9,12 @@
+ 
+ #include "../../classes/classes.h"
+ 
+-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
++void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+ /*Creation of fem datasets: general drivers*/
+-void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
++void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+ void CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
+-void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter);
++void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type,int analysis_type,int analysis_counter);
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16142)
+@@ -12,9 +12,10 @@
+ #include "../../classes/classes.h"
+ #include "../../shared/shared.h"
+ #include "../MeshPartitionx/MeshPartitionx.h"
++#include "../ParseToolkitsOptionsx/ParseToolkitsOptionsx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter){
++void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type,int analysis_type,int analysis_counter){
+ 
+ 	int         i,j,m,k;
+ 	int         numoutputs;
+@@ -243,6 +244,9 @@
+ 	#ifdef _HAVE_DAKOTA_
+ 	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
+ 	#endif
++	
++	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
++	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+  	#ifdef _HAVE_ADOLC_
+ 	CreateParametersAutodiff(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16142)
+@@ -12,7 +12,7 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
++void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
+ 
+ 	int   i,analysis_type,verbose;
+ 	bool  isthermal,ismasstransport,isstressbalance,isgroundingline,isenthalpy;
+@@ -64,7 +64,7 @@
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+ 
+ 		if(VerboseMProcessor()) _printf0_("   creating datasets for analysis " << EnumToStringx(analysis_type) << "\n");
+-		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,rootpath,solution_type,analysis_type,nummodels,i);
++		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,toolkitfile,rootpath,solution_type,analysis_type,nummodels,i);
+ 	}
+ 	if(VerboseMProcessor()) _printf0_("   done with model processor \n");
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16142)
+@@ -13,7 +13,7 @@
+ #include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
++void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+ 
+ 	Elements   *elements   = NULL;
+ 	Materials  *materials  = NULL;
+@@ -177,7 +177,7 @@
+ 	#endif
+ 
+ 	/*Generate objects that are not dependent on any analysis_type: */
+-	CreateParameters(pparameters,iomodel,rootpath,solution_type,analysis_type,analysis_counter);
++	CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter);
+ 
+ 	/*Update Elements in case we are running a transient solution: */
+ 	#ifdef _HAVE_TRANSIENT_
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16142)
+@@ -35,8 +35,11 @@
+ 	 *we try and stick with the Petsc matrix types: */
+ 	mat_type=ToolkitOptions::GetToolkitOptionValue("mat_type");
+ 
+-	if ((strcmp(mat_type,"mpidense")==0) || (strcmp(mat_type,"dense")==0)){
+-		if (isparallel) mat_type_enum=MpiDenseEnum;
++	if (strcmp(mat_type,"mpidense")==0){
++		mat_type_enum=MpiDenseEnum;
++	}
++	else if (strcmp(mat_type,"dense")==0){
++		if (isparallel) _error_("Dense matrix type not supported for parallel runs with num_procs>1");
+ 		else mat_type_enum=DenseEnum;
+ 	}
+ 	else _error_("matrix type not supported yet!");
+@@ -61,9 +64,12 @@
+ 	/*retrieve vector type as a string, from the Toolkits Options database, similar to what Petsc does. Actually, 
+ 	 *we try and stick with the Petsc vector types: */
+ 	vec_type=ToolkitOptions::GetToolkitOptionValue("vec_type");
+-
+-	if ((strcmp(vec_type,"mpi")==0) || (strcmp(vec_type,"seq")==0)){
+-		if (isparallel) vec_type_enum=MpiEnum;
++	
++	if (strcmp(vec_type,"mpi")==0){
++		vec_type_enum=MpiEnum;
++	}
++	else if (strcmp(vec_type,"seq")==0){
++		if (isparallel) _error_("Dense vector type not supported for parallel runs with num_procs>1");
+ 		else vec_type_enum=SeqEnum;
+ 	}
+ 	else _error_("vector type not supported yet!");
+@@ -74,3 +80,33 @@
+ 	/*return: */
+ 	return vec_type_enum;
+ } /*}}}*/  
++int IssmSolverTypeFromToolkitOptions(void){ /*{{{*/
++
++	char* solver_type=NULL;
++	int   solver_type_enum;
++	int   num_procs=0;
++	bool  isparallel=false;
++
++	/*first, figure out if we are running in parallel: */
++	num_procs=IssmComm::GetSize();
++	if(num_procs>1)isparallel=true;
++
++	/*retrieve solver type as a string, from the Toolkits Options database, similar to what Petsc does. Actually, 
++	 *we try and stick with the Petsc vector types: */
++	solver_type=ToolkitOptions::GetToolkitOptionValue("solver_type");
++
++	if (strcmp(solver_type,"mumps")==0){
++		solver_type_enum=MumpsEnum;
++	}
++	else if (strcmp(solver_type,"gsl")==0){
++		if (isparallel) _error_("Gsl solver type not supported for parallel runs with num_procs>1");
++		else solver_type_enum=GslEnum;
++	}
++	else _error_("solver type not supported yet!");
++
++	/*free ressources: */
++	xDelete<char>(solver_type);
++
++	/*return: */
++	return solver_type_enum;
++} /*}}}*/  
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16141)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16142)
+@@ -512,17 +512,38 @@
+ 			/*Assume we are getting an IssmMpiVec in input, downcast: */
+ 			pf=(IssmMpiVec<IssmDouble>*)pfin;
+ 
+-			/*Initialize output: */
+-			uf=pf->Duplicate();
++						
++			switch(IssmSolverTypeFromToolkitOptions()){
++				case MumpsEnum: {
++					/*Initialize output: */
++					uf=pf->Duplicate();
++					#ifdef _HAVE_MUMPS_
++					MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters);
++					#else
++					_error_("IssmMpiDenseMat solver requires MUMPS solver");
++					#endif
++					return (IssmAbsVec<IssmDouble>*)uf;
++					break;
++								}
++				case GslEnum: {
+ 
+-			/*Let's try and use the MUMPS solver here: */
+-			#ifdef _HAVE_MUMPS_
+-			MpiDenseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters);
+-			#else
+-			_error_("IssmMpiDenseMat solver requires MUMPS solver");
+-			#endif
+-			return (IssmAbsVec<IssmDouble>*)uf;
++					IssmDouble* x=NULL;
++					#ifdef _HAVE_GSL_
+ 
++					DenseGslSolve(/*output*/ &x,/*stiffness matrix:*/ this->matrix,this->M,this->N, /*right hand side load vector: */ pf->vector,pf->M,parameters);
++
++					uf=new IssmMpiVec<IssmDouble>(x,this->N); xDelete(x);
++
++					return (IssmAbsVec<IssmDouble>*)uf;
++					break;
++					#else
++					_error_("GSL support not compiled in!");
++					#endif
++							  }
++				default:
++					_error_("solver type not supported yet!");
++			}
++
+ 		}/*}}}*/
+ 		#endif
+ };
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.h	(revision 16141)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.h	(revision 16142)
+@@ -17,5 +17,6 @@
+ 
+ int IssmMatTypeFromToolkitOptions(void);
+ int IssmVecTypeFromToolkitOptions(void);
++int IssmSolverTypeFromToolkitOptions(void);
+ 
+ #endif //#ifndef _ISSMMAT_H_
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16141)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16142)
+@@ -188,6 +188,9 @@
+ 
+ 	/*Open input file on cpu 0: */
+ 	if(my_rank==0) IOMODEL = pfopen0(inputfilename ,"rb");
++	
++	/*Open toolkits file: */
++	toolkitsoptionsfid=pfopen(toolkitsfilename,"r");
+ 
+ 	/*Initialize internal data: */
+ 	this->nummodels        = nummodels;
+@@ -202,7 +205,7 @@
+ 	for(i=0;i<nummodels;i++)analysis_type_list[i]=analyses[i];
+ 
+ 	/*create datasets for all analyses*/
+-	ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL,rootpath,this->solution_type,nummodels,analyses);
++	ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,IOMODEL,toolkitsoptionsfid,rootpath,this->solution_type,nummodels,analyses);
+ 
+ 	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
+ 	for(i=0;i<nummodels;i++){
+@@ -226,8 +229,9 @@
+ 		ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
+ 	}
+ 
+-	/*Close input file descriptors: */
++	/*Close input file and toolkits file descriptors: */
+ 	if(my_rank==0) pfclose(IOMODEL,inputfilename);
++	pfclose(toolkitsoptionsfid,toolkitsfilename);
+ 
+ 	/*Open output file once for all and add output file name and file descriptor to parameters*/
+ 	output_fid=pfopen(outputfilename,"wb");
+@@ -237,11 +241,7 @@
+ 	/*Save lock file name for later: */
+ 	this->parameters->AddObject(new StringParam(LockFileNameEnum,lockfilename));
+ 
+-	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+-	toolkitsoptionsfid=pfopen(toolkitsfilename,"r");
+-	ParseToolkitsOptionsx(this->parameters,toolkitsoptionsfid);
+-	pfclose(toolkitsoptionsfid,toolkitsfilename);
+-}
++	}
+ /*}}}*/
+ /*FUNCTION FemModel::OutputResults {{{*/
+ void FemModel::OutputResults(void){
+Index: ../trunk-jpl/src/m/solvers/issmsolver.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 16141)
++++ ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 16142)
+@@ -8,7 +8,7 @@
+ 	#retrieve options provided in varargin
+ 	arguments=pairoptions(*args) 
+ 	
+-	options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi']];
++	options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi'],['solver_type','mumps']];
+ 
+ 	#now, go through our arguments, and write over default options.
+ 	for i in range(len(arguments.list)):
+Index: ../trunk-jpl/src/m/solvers/issmsolver.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmsolver.m	(revision 16141)
++++ ../trunk-jpl/src/m/solvers/issmsolver.m	(revision 16142)
+@@ -12,3 +12,4 @@
+ issmoptions.toolkit='issm';
+ issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense');
+ issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi');
++issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps');
+Index: ../trunk-jpl/src/m/enum/MumpsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MumpsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MumpsEnum.m	(revision 16142)
+@@ -0,0 +1,11 @@
++function macro=MumpsEnum()
++%MUMPSENUM - Enum of Mumps
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MumpsEnum()
++
++macro=StringToEnum('Mumps');
+Index: ../trunk-jpl/src/m/enum/GslEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/GslEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/GslEnum.m	(revision 16142)
+@@ -0,0 +1,11 @@
++function macro=GslEnum()
++%GSLENUM - Enum of Gsl
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=GslEnum()
++
++macro=StringToEnum('Gsl');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16141)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16142)
+@@ -573,6 +573,8 @@
+ def MpiDenseEnum(): return StringToEnum("MpiDense")[0]
+ def SeqEnum(): return StringToEnum("Seq")[0]
+ def MpiEnum(): return StringToEnum("Mpi")[0]
++def MumpsEnum(): return StringToEnum("Mumps")[0]
++def GslEnum(): return StringToEnum("Gsl")[0]
+ def OptionEnum(): return StringToEnum("Option")[0]
+ def GenericOptionEnum(): return StringToEnum("GenericOption")[0]
+ def OptionCellEnum(): return StringToEnum("OptionCell")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16142-16143.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16142-16143.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16142-16143.diff	(revision 16556)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16142)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16143)
+@@ -1152,14 +1152,9 @@
+ #ifdef _HAVE_GIA_
+ void FemModel::Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y){ /*{{{*/
+ 
+-  int      i;
+-
+-	/*intermediary: */
+-	Element *element     = NULL;
+-
+ 	/*Go through elements, and add contribution from each element to the deflection vector wg:*/
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->GiaDeflection(wg,dwgdt, x,y);
+ 	}
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16143-16144.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16143-16144.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16143-16144.diff	(revision 16556)
@@ -0,0 +1,424 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16144)
+@@ -34,7 +34,6 @@
+ 	double     *xp  = NULL;
+ 	int my_rank=IssmComm::GetRank();
+ 
+-
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+ 
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16144)
+@@ -14,7 +14,6 @@
+ 	/*parameters: */
+ 	bool save_results;
+ 
+-
+ 	/*recover parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+Index: ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 16144)
+@@ -5,7 +5,6 @@
+  *      Author: utke
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+    #include <config.h>
+ #else
+Index: ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 16144)
+@@ -6,7 +6,6 @@
+ #include "../Numerics/types.h"
+ #include "../Exceptions/exceptions.h"
+ 
+-
+ /* get ice stiffness B from enthalpy, pressure and flow law exponent*/
+ IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n){
+   /*Use parameterization for the rheology: Aschwanden 2012
+@@ -34,7 +33,7 @@
+    *     = 8.314
+    *  
+    *  Convert A to B :  B = A^(-1/n) */
+-  
++
+   /*Some physical constants (Aschwanden 2012)*/
+   /*TODO: get those constants from model*/
+   IssmDouble beta=7.9*pow(10.,-8.);
+@@ -45,7 +44,7 @@
+ 
+   /*Intermediaries*/
+   IssmDouble A,B,Tstar,Tpmp,H_sp,waterfraction;
+-	
++
+   _assert_(pressure>0);
+   _assert_(enthalpy>0);
+   Tpmp=273.15-beta*pressure; 
+@@ -80,7 +79,7 @@
+ 	/*Use parameterization for the rheology: Greve and Blatter 2009
+ 	 * get enthalpy from temperature and water fraction,
+ 	 * and use LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n) */
+-  
++
+   IssmDouble rho_ice=910; // kg/m^3
+   IssmDouble g=9.81; //kg*m/s^2
+   IssmDouble heatcapacity=2009; // J/kg/K
+@@ -102,9 +101,8 @@
+   else{
+     enthalpy=heatcapacity*(273.15 - Tref) + waterfraction*latentheat;
+   }
+-	
++
+   B=LliboutryDuval(enthalpy, pressure, n);
+ 
+   return B;
+ }
+-
+Index: ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16144)
+@@ -26,7 +26,7 @@
+         Dret=(D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
+     else 
+         Dret=D2;
+-    
++
+     /*check if dt*Dret>waterfraction. If so, drain whole waterfraction*/
+     if(dt==0.){
+       if(Dret>waterfraction)
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h	(revision 16143)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h	(revision 16144)
+@@ -10,5 +10,4 @@
+ void AllocateSystemMatricesx(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf,FemModel* femmodel);
+ void MatrixNonzeros(int** pd_nnz,int** po_nnz,FemModel* femmodel,int set1enum,int set2enum);
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16144)
+@@ -15,7 +15,6 @@
+ 
+ void ResetConstraintsx(FemModel* femmodel){
+ 
+-
+ 	/*Display message*/
+ 	if(VerboseModule()) _printf0_("   Resetting penalties\n");
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16144)
+@@ -38,7 +38,6 @@
+ 	iomodel->FetchData(1,FlowequationElementEquationEnum);
+ 	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
+ 
+-
+ 	/*Do we have coupling*/
+ 	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+ 	 iscoupling = true;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16144)
+@@ -244,7 +244,7 @@
+ 	#ifdef _HAVE_DAKOTA_
+ 	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
+ 	#endif
+-	
++
+ 	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp	(revision 16144)
+@@ -109,7 +109,7 @@
+   return rc;
+ }/*}}}*/
+ int ISSM_MPI_Allreduce(void *sendbuf, void *recvbuf, int count, ISSM_MPI_Datatype datatype, ISSM_MPI_Op op, ISSM_MPI_Comm comm){/*{{{*/
+- 
++
+   int rc=0;
+ #ifdef _HAVE_MPI_
+ # ifdef _HAVE_AMPI_
+@@ -177,7 +177,7 @@
+   return rc;
+ }/*}}}*/
+ int ISSM_MPI_Comm_free(ISSM_MPI_Comm *comm){ /*{{{*/
+- 
++
+   int rc=0;
+ #ifdef _HAVE_MPI_
+ # ifdef _HAVE_AMPI_
+@@ -202,7 +202,7 @@
+   return rc;
+ }/*}}}*/
+ int ISSM_MPI_Comm_size( ISSM_MPI_Comm comm, int *size){ /*{{{*/
+- 
++
+   int rc=0;
+ #ifdef _HAVE_MPI_
+   rc=MPI_Comm_size(comm,
+@@ -262,7 +262,7 @@
+   return rc;
+ }/*}}}*/
+ int ISSM_MPI_Gatherv(void *sendbuf, int sendcnt, ISSM_MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm){/*{{{*/
+- 
++
+   int rc=0;
+   assert(sendtype==recvtype); // we handle only identical representations
+ #ifdef _HAVE_MPI_
+Index: ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 16143)
++++ ../trunk-jpl/src/c/toolkits/mpi/issmmpi.h	(revision 16144)
+@@ -50,7 +50,7 @@
+ 	#define ISSM_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
+ 	#define ISSM_MPI_ANY_TAG       MPI_ANY_TAG
+ 	#define ISSM_MPI_ANY_SOURCE    MPI_ANY_SOURCE
+-	
++
+     /*other include files: */
+ 	#include "./commops/commops.h"
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16144)
+@@ -64,7 +64,7 @@
+ 	/*retrieve vector type as a string, from the Toolkits Options database, similar to what Petsc does. Actually, 
+ 	 *we try and stick with the Petsc vector types: */
+ 	vec_type=ToolkitOptions::GetToolkitOptionValue("vec_type");
+-	
++
+ 	if (strcmp(vec_type,"mpi")==0){
+ 		vec_type_enum=MpiEnum;
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16143)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16144)
+@@ -512,7 +512,6 @@
+ 			/*Assume we are getting an IssmMpiVec in input, downcast: */
+ 			pf=(IssmMpiVec<IssmDouble>*)pfin;
+ 
+-						
+ 			switch(IssmSolverTypeFromToolkitOptions()){
+ 				case MumpsEnum: {
+ 					/*Initialize output: */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16144)
+@@ -188,7 +188,7 @@
+ 
+ 	/*Open input file on cpu 0: */
+ 	if(my_rank==0) IOMODEL = pfopen0(inputfilename ,"rb");
+-	
++
+ 	/*Open toolkits file: */
+ 	toolkitsoptionsfid=pfopen(toolkitsfilename,"r");
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16144)
+@@ -1766,7 +1766,6 @@
+ /*FUNCTION Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
+-
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16144)
+@@ -5416,7 +5416,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::DrainWaterfraction{{{*/
+ void Penta::DrainWaterfraction(void){
+-    
++
+     /*Intermediaries*/
+ 	bool isenthalpy;
+ 	IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
+@@ -5754,7 +5754,6 @@
+ /*FUNCTION Penta::CreatePVectorAdjointHO{{{*/
+ ElementVector* Penta::CreatePVectorAdjointHO(void){
+ 
+-
+ 	/*Nothing to be done if not on surface*/
+ 	if (!IsOnSurface()) return NULL;
+ 
+@@ -7591,7 +7590,7 @@
+ 	ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum);
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+ 	delete Ke1; delete Ke2;
+-	
++
+ 	/*Compute HO Matrix with P1 element type\n");*/
+ 	this->element_type=P1Enum;
+ 	Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+@@ -8281,7 +8280,6 @@
+ 
+ 		D_scalar=gauss->weight*Jdet;
+ 
+-
+ 		/*Add stabilization*/
+ 		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+ 		dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
+Index: ../trunk-jpl/src/c/classes/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 16143)
++++ ../trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 16144)
+@@ -105,12 +105,11 @@
+ 		/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+ 		if(my_rank==0){
+ 			if(fread(&pscalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+-			
++
+ 			/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
+ 			scalar<<=pscalar;
+ 		}
+ 
+-		
+ 		ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		/*Ok, we are almost done. scalar is now an independent variable. We don't want this variable to be fetched again in the 
+Index: ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 16143)
++++ ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 16144)
+@@ -42,13 +42,11 @@
+ #if _PYTHON_MAJOR_ >=3
+ /* WRAPPER 3.2 {{{*/
+ #define WRAPPER(modulename,...)  \
+-\
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-\
+ static struct PyModuleDef modulename##module= {\
+ 	PyModuleDef_HEAD_INIT,\
+ 	#modulename,   /* name of module */\
+@@ -57,31 +55,24 @@
+ 				 or -1 if the module keeps state in global variables. */\
+ 	modulename##_funcs\
+ };\
+-\
+ PyMODINIT_FUNC PyInit_##modulename(void){\
+-\
+ 	import_array();\
+ 	return PyModule_Create(&modulename##module);\
+ }\
+-\
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #else
+ /* WRAPPER 2.7 {{{*/
+ #define WRAPPER(modulename,...)  \
+-\
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-\
+ PyMODINIT_FUNC init##modulename(void){\
+-\
+ 	import_array();\
+ 	(void) Py_InitModule(#modulename, modulename##_funcs);\
+ }\
+-\
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/m/exp/Shp2Exp.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 16143)
++++ ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 16144)
+@@ -9,7 +9,6 @@
+ %
+ %   See also EXPMASTER, EXPDOC
+ 
+-
+ 	if ~exist(shapefilename,'file'),
+ 		error(['Shapefile ' shapefilename ' does not exist']);
+ 	end
+@@ -21,7 +20,7 @@
+ 			x=shp(i).X; y=shp(i).Y;
+ 			ids=find(isnan(x));
+ 			x(ids)=[]; y(ids)=[];
+-			
++
+ 			exp(end+1).x=x;
+ 			exp(end).y=y;
+ 			exp(end).nods=length(x);
+@@ -32,4 +31,3 @@
+ 	end
+ 
+ 	expwrite(exp,expfilename);
+-
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16143)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16144)
+@@ -39,7 +39,7 @@
+ 
+ 			%Should we use cold ice (default) or enthalpy formulation
+ 			obj.isenthalpy=0;
+-            
++
+             		%will basal boundary conditions be set dynamically
+             		obj.isdynamicbasalspc=0;
+ 		end % }}}
+@@ -68,7 +68,7 @@
+ 			fielddisplay(obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');
+ 			fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+             		fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
+-            
++
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','spctemperature','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 16143)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 16144)
+@@ -123,7 +123,7 @@
+ 			end
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-	
++
+ 		%snowpack:  %{{{
+ 		obj.snowpack_meas_tss = 1;
+ 		obj.snowpack_enforce_measured_snow_heights = 0;
+@@ -279,7 +279,6 @@
+ 			%filters {{{
+ 			filter_values={'MIN_MAX','RATE_FILTER1','RATE_FILTER2','UNHEATED_RAIN_GAUGE_FILTER','WMO_UNDERCATCH_FILTER','WMO_UNDERCATCH_FILTER-SIMPLIFIED','UNVENTILLATED_TEMPERATURE_SENSOR','ADD_AN_OFFSET'};
+ 
+-
+ 			md=checkfield(md,'snowpack.filters_ta_filter1','values',{filter_values});
+ 			if strcmpi(md.snowpack.filters_ta_filter1,'MIN_MAX'), md=checkfield(md,'snowpack.filters_ta_filter1','size',[1 NaN]); end
+ 			md=checkfield(md,'snowpack.filters_ta_arg1','values',{filter_values});
Index: issm/oecreview/Archive/16133-16554/ISSM-16144-16145.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16144-16145.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16144-16145.diff	(revision 16556)
@@ -0,0 +1,168 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16144)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16145)
+@@ -1005,19 +1005,19 @@
+ void Tria::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	int         normal_orientation;
++	int         normal_orientation=0;
+ 	IssmDouble  s1,s2;
+ 	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+ 
+-	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++	if(levelset[0]*levelset[1]>0.){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[2]/(levelset[2]-levelset[1]);
+ 		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-		if(levelset[2]>0) normal_orientation=1;
++		if(levelset[2]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+@@ -1028,12 +1028,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
+ 	}
+-	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++	else if(levelset[1]*levelset[2]>0.){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[0]/(levelset[0]-levelset[2]);
+ 		s2=levelset[0]/(levelset[0]-levelset[1]);
+ 
+-		if(levelset[0]>0) normal_orientation=1;
++		if(levelset[0]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+@@ -1044,12 +1044,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
+ 	}
+-	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++	else if(levelset[0]*levelset[2]>0.){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[1]/(levelset[1]-levelset[0]);
+ 		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(levelset[1]>0) normal_orientation=1;
++		if(levelset[1]>0.) normal_orientation=1;
+ 		/*New point 0*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+@@ -1060,7 +1060,7 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+ 	}
+-	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[1]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[0][0];
+ 		xyz_zero[3*0+1]=xyz_list[0][1];
+ 		xyz_zero[3*0+2]=xyz_list[0][2];
+@@ -1070,7 +1070,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[1][1];
+ 		xyz_zero[3*1+2]=xyz_list[1][2];
+ 	}
+-	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[2][0];
+ 		xyz_zero[3*0+1]=xyz_list[2][1];
+ 		xyz_zero[3*0+2]=xyz_list[2][2];
+@@ -1080,7 +1080,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[0][1];
+ 		xyz_zero[3*1+2]=xyz_list[0][2];
+ 	}
+-	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[1]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[1][0];
+ 		xyz_zero[3*0+1]=xyz_list[1][1];
+ 		xyz_zero[3*0+2]=xyz_list[1][2];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16144)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16145)
+@@ -1698,19 +1698,19 @@
+ void Penta::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[6][3],int levelsetenum){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	int         normal_orientation;
++	int         normal_orientation=0;
+ 	IssmDouble  s1,s2;
+ 	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+ 
+-	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++	if(levelset[0]*levelset[1]>0.){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[2]/(levelset[2]-levelset[1]);
+ 		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-		if(levelset[2]>0) normal_orientation=1;
++		if(levelset[2]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+@@ -1731,12 +1731,12 @@
+ 		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[5][1]+s2*(xyz_list[3][1]-xyz_list[5][1]);
+ 		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[5][2]+s2*(xyz_list[3][2]-xyz_list[5][2]);
+ 	}
+-	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++	else if(levelset[1]*levelset[2]>0.){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[0]/(levelset[0]-levelset[2]);
+ 		s2=levelset[0]/(levelset[0]-levelset[1]);
+ 
+-		if(levelset[0]>0) normal_orientation=1;
++		if(levelset[0]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+@@ -1757,12 +1757,12 @@
+ 		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[3][1]+s2*(xyz_list[4][1]-xyz_list[3][1]);
+ 		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[3][2]+s2*(xyz_list[4][2]-xyz_list[3][2]);
+ 	}
+-	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++	else if(levelset[0]*levelset[2]>0.){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[1]/(levelset[1]-levelset[0]);
+ 		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(levelset[1]>0) normal_orientation=1;
++		if(levelset[1]>0.) normal_orientation=1;
+ 		/*New point 0*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+@@ -1783,7 +1783,7 @@
+ 		xyz_zero[3*(2+normal_orientation)+1]=xyz_list[4][1]+s2*(xyz_list[5][1]-xyz_list[4][1]);
+ 		xyz_zero[3*(2+normal_orientation)+2]=xyz_list[4][2]+s2*(xyz_list[5][2]-xyz_list[4][2]);
+ 	}
+-	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[1]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[0][0];
+ 		xyz_zero[3*0+1]=xyz_list[0][1];
+ 		xyz_zero[3*0+2]=xyz_list[0][2];
+@@ -1803,7 +1803,7 @@
+ 		xyz_zero[3*3+1]=xyz_list[3][1];
+ 		xyz_zero[3*3+2]=xyz_list[3][2];
+ 	}
+-	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[2][0];
+ 		xyz_zero[3*0+1]=xyz_list[2][1];
+ 		xyz_zero[3*0+2]=xyz_list[2][2];
+@@ -1823,7 +1823,7 @@
+ 		xyz_zero[3*3+1]=xyz_list[5][1];
+ 		xyz_zero[3*3+2]=xyz_list[5][2];
+ 	}
+-	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[1]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[1][0];
+ 		xyz_zero[3*0+1]=xyz_list[1][1];
+ 		xyz_zero[3*0+2]=xyz_list[1][2];
Index: issm/oecreview/Archive/16133-16554/ISSM-16145-16146.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16145-16146.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16145-16146.diff	(revision 16556)
@@ -0,0 +1,1089 @@
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 16146)
+@@ -18,7 +18,7 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16146)
+@@ -5,7 +5,7 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 16146)
+@@ -16,7 +16,7 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 16146)
+@@ -4,7 +4,7 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 16146)
+@@ -16,12 +16,12 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyZbar']
++md.inversion.control_parameters=['MaterialsRheologyDbar']
+ md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+@@ -37,12 +37,12 @@
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy']
++field_names     =['Gradient','Misfits','MaterialsRheologyDbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+    md.results.StressbalanceSolution.Gradient1,\
+    md.results.StressbalanceSolution.J,\
+-   md.results.StressbalanceSolution.MaterialsRheologyZbar,\
++   md.results.StressbalanceSolution.MaterialsRheologyDbar,\
+    md.results.StressbalanceSolution.Pressure,\
+    md.results.StressbalanceSolution.Vel,\
+    md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 16145)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 16146)
+@@ -4,14 +4,15 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
++md.verbose=verbose('control',true);
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+-md.inversion.control_parameters={'MaterialsRheologyZbar'};
+-md.inversion.min_parameters=10^-13*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=ones(md.mesh.numberofvertices,1);
++md.inversion.control_parameters={'MaterialsRheologyDbar'};
++md.inversion.min_parameters=zeros(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=(1-10^-13)*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=101.*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+@@ -25,12 +26,12 @@
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyDbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+    (md.results.StressbalanceSolution.Gradient1),...
+    (md.results.StressbalanceSolution.J),...
+-   (md.results.StressbalanceSolution.MaterialsRheologyZbar),...
++   (md.results.StressbalanceSolution.MaterialsRheologyDbar),...
+    (md.results.StressbalanceSolution.Pressure),...
+    (md.results.StressbalanceSolution.Vel),...
+    (md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/test/Archives/Archive272.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16145)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16146)
+@@ -153,6 +153,8 @@
+ 	MaterialsRheologyNEnum,
+ 	MaterialsRheologyZEnum,
+ 	MaterialsRheologyZbarEnum,
++	MaterialsRheologyDEnum,
++	MaterialsRheologyDbarEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16146)
+@@ -161,6 +161,8 @@
+ 		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+ 		case MaterialsRheologyZEnum : return "MaterialsRheologyZ";
+ 		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
++		case MaterialsRheologyDEnum : return "MaterialsRheologyD";
++		case MaterialsRheologyDbarEnum : return "MaterialsRheologyDbar";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16146)
+@@ -164,6 +164,8 @@
+ 	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZ")==0) return MaterialsRheologyZEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum;
++	      else if (strcmp(name,"MaterialsRheologyD")==0) return MaterialsRheologyDEnum;
++	      else if (strcmp(name,"MaterialsRheologyDbar")==0) return MaterialsRheologyDbarEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+@@ -257,12 +259,12 @@
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
++	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
++	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+ 	      else if (strcmp(name,"TransientIsstressbalance")==0) return TransientIsstressbalanceEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+-	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
++	      if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
++	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+-	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+-	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
++	      if (strcmp(name,"P1DG")==0) return P1DGEnum;
++	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
++	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+ 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16146)
+@@ -63,7 +63,7 @@
+ 			}
+ 			break;
+ 		case MatdamageiceEnum:
+-			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum);
++			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
+ 			break;
+ 		default:
+@@ -72,7 +72,7 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
+-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum,
++				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+ 				InversionMaxParametersEnum);
+ 
+ 	/*Add new constant material property to materials, at the end: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16146)
+@@ -39,7 +39,7 @@
+ 			case ThicknessEnum:             iomodel->FetchData(1,ThicknessEnum); break;
+ 			case FrictionCoefficientEnum:   iomodel->FetchData(1,FrictionCoefficientEnum); break;
+ 			case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
+-			case MaterialsRheologyZbarEnum: iomodel->FetchData(1,MaterialsRheologyZEnum); break;
++			case MaterialsRheologyDbarEnum: iomodel->FetchData(1,MaterialsRheologyDEnum); break;
+ 			default: _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+ 		}
+ 	}
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
++	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyDEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16146)
+@@ -101,7 +101,7 @@
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	if(materials_type==MatdamageiceEnum){
+-		iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum);
++		iomodel->FetchDataToInput(elements,MaterialsRheologyDEnum);
+ 	}
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16146)
+@@ -160,24 +160,42 @@
+ 	return n;
+ }
+ /*}}}*/
++/*FUNCTION Matdamageice::GetD {{{*/
++IssmDouble Matdamageice::GetD(){
++
++	/*Output*/
++	IssmDouble D;
++
++	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
++	return D;
++}
++/*}}}*/
+ /*FUNCTION Matdamageice::GetZ {{{*/
+ IssmDouble Matdamageice::GetZ(){
+ 
+ 	/*Output*/
+-	IssmDouble Z;
++	IssmDouble D;
+ 
+-	inputs->GetInputAverage(&Z,MaterialsRheologyZEnum);
+-	return Z;
++	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
++	return 1/(1-D);
+ }
+ /*}}}*/
+ /*FUNCTION Matdamageice::GetZbar {{{*/
+ IssmDouble Matdamageice::GetZbar(){
+ 
+ 	/*Output*/
+-	IssmDouble Zbar;
++	IssmDouble Dbar;
++	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
++	return 1/(1-Dbar);
++}
++/*}}}*/
++/*FUNCTION Matdamageice::GetDbar {{{*/
++IssmDouble Matdamageice::GetDbar(){
+ 
+-	inputs->GetInputAverage(&Zbar,MaterialsRheologyZbarEnum);
+-	return Zbar;
++	/*Output*/
++	IssmDouble Dbar;
++	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
++	return Dbar;
+ }
+ /*}}}*/
+ /*FUNCTION Matdamageice::GetVectorFromInputs{{{*/
+@@ -215,7 +233,7 @@
+ /*FUNCTION Matdamageice::GetViscosity2d {{{*/
+ void  Matdamageice::GetViscosity2d(IssmDouble* pviscosity, IssmDouble* epsilon){
+ 	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
+-												   Z * B
++												   (1-D) * B
+ 	  viscosity= -------------------------------------------------------------------
+ 						  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 
+@@ -234,13 +252,13 @@
+ 
+ 	/*Intermediary: */
+ 	IssmDouble A,e;
+-	IssmDouble Btmp,B,n,Z;
++	IssmDouble Btmp,B,n,D;
+ 
+ 	/*Get B and n*/
+ 	Btmp=GetBbar();
+-	Z=GetZbar();
++	D=GetDbar();
+ 	n=GetN();
+-	B=Z*Btmp;
++	B=(1-D)*Btmp;
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity=B: */
+@@ -283,7 +301,7 @@
+ 
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+-	 *                                               B
++	 *                                             (1-D)* B
+ 	 * viscosity3d= -------------------------------------------------------------------
+ 	 *                      2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+@@ -302,12 +320,12 @@
+ 
+ 	/*Intermediaries: */
+ 	IssmDouble A,e;
+-	IssmDouble B,n,Z;
++	IssmDouble B,n,D;
+ 
+ 	/*Get B, Z and n*/
+ 	n=GetN();
+-	Z=GetZ();
+-	B=Z*GetB();
++	D=GetD();
++	B=(1-D)*GetB();
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+@@ -354,7 +372,7 @@
+ void  Matdamageice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+-	 *                                          B
++	 *                                             (1-D)* B
+ 	 * viscosity3d= -------------------------------------------------------------------
+ 	 *                   2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+@@ -373,14 +391,14 @@
+ 
+ 	/*Intermediaries: */
+ 	IssmDouble A,e;
+-	IssmDouble B,n,Z;
++	IssmDouble B,n,D;
+ 	IssmDouble eps0;
+ 
+ 	/*Get B and n*/
+ 	eps0=pow(10.,(IssmDouble)-27);
+ 	n=GetN();
+-	Z=GetZ();
+-	B=Z*GetB();
++	D=GetD();
++	B=(1-D)*GetB();
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+@@ -479,12 +497,12 @@
+ 	*pviscosity_complement=viscosity_complement;
+ }
+ /*}}}*/
+-/*FUNCTION Matdamageice::GetViscosityZComplement {{{*/
+-void  Matdamageice::GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+-	/*Return viscosity derivative for control method d(mu)/dZ: 
++/*FUNCTION Matdamageice::GetViscosityDComplement {{{*/
++void  Matdamageice::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
++	/*Return viscosity derivative for control method d(mu)/dD: 
+ 	 *
+ 	 *  										               B 
+-	 * dviscosity= -------------------------------------------------------------------
++	 * dviscosity= - -------------------------------------------------------------------
+ 	 *  				  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+ 	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+@@ -514,22 +532,22 @@
+ 		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 		if(A==0){
+ 			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow(10.,17);
++			viscosity_complement=- 2.25*pow(10.,17);
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+ 
+-			viscosity_complement=B/(2*pow(A,e));
++			viscosity_complement=- B/(2*pow(A,e));
+ 		}
+ 	}
+ 	else{
+-		viscosity_complement=4.5*pow(10.,17);
++		viscosity_complement=- 4.5*pow(10.,17);
+ 	}
+ 
+ 	/*Checks in debugging mode*/
+ 	_assert_(B>0);
+ 	_assert_(n>0);
+-	_assert_(viscosity_complement>0);
++	_assert_(viscosity_complement<0);
+ 
+ 	/*Return: */
+ 	*pviscosity_complement=viscosity_complement;
+@@ -778,10 +796,10 @@
+ 			this->inputs->AddInput(new TriaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+ 
+-		/*Get Z*/
+-		if (iomodel->Data(MaterialsRheologyZEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(MaterialsRheologyZbarEnum,nodeinputs,P1Enum));
++		/*Get D*/
++		if (iomodel->Data(MaterialsRheologyDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(MaterialsRheologyDbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -798,13 +816,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsRheologyZbarEnum:
+-						if (iomodel->Data(MaterialsRheologyZEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case MaterialsRheologyDbarEnum:
++						if (iomodel->Data(MaterialsRheologyDEnum)){
++							_assert_(iomodel->Data(MaterialsRheologyDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyZbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsRheologyDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 
+@@ -836,10 +854,10 @@
+ 			this->inputs->AddInput(new PentaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+ 
+-		/*Get Z*/
+-		if (iomodel->Data(MaterialsRheologyZEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new PentaInput(MaterialsRheologyZEnum,nodeinputs,P1Enum));
++		/*Get D*/
++		if (iomodel->Data(MaterialsRheologyDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new PentaInput(MaterialsRheologyDEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -856,13 +874,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsRheologyZbarEnum:
+-						if (iomodel->Data(MaterialsRheologyZEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyZEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyZEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case MaterialsRheologyDbarEnum:
++						if (iomodel->Data(MaterialsRheologyDEnum)){
++							_assert_(iomodel->Data(MaterialsRheologyDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyZEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsRheologyDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 				}
+@@ -884,8 +902,8 @@
+ 				name==MaterialsRheologyBEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+ 				name==MaterialsRheologyNEnum ||
+-				name==MaterialsRheologyZEnum ||
+-				name==MaterialsRheologyZbarEnum
++				name==MaterialsRheologyDEnum ||
++				name==MaterialsRheologyDbarEnum
+ 		){
+ 		return true;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16146)
+@@ -29,7 +29,7 @@
+ 		virtual void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon)=0;
+ 		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+-		virtual void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
++		virtual void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
+@@ -38,7 +38,9 @@
+ 		virtual IssmDouble GetBbar()=0;
+ 		virtual IssmDouble GetN()=0;
+ 		virtual IssmDouble GetZ()=0;
++		virtual IssmDouble GetD()=0;
+ 		virtual IssmDouble GetZbar()=0;
++		virtual IssmDouble GetDbar()=0;
+ 
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16146)
+@@ -49,7 +49,7 @@
+ 		void   GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+ 		void   GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void   GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void   GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
++		void   GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+ 		void   GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void   GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void   GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+@@ -58,7 +58,9 @@
+ 		IssmDouble GetBbar();
+ 		IssmDouble GetN();
+ 		IssmDouble GetZ();
++		IssmDouble GetD();
+ 		IssmDouble GetZbar();
++		IssmDouble GetDbar();
+ 		bool   IsInput(int name);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16146)
+@@ -56,7 +56,7 @@
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+ 		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void GetViscosityZComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+@@ -64,7 +64,9 @@
+ 		IssmDouble GetB();
+ 		IssmDouble GetBbar();
+ 		IssmDouble GetZ(){_error_("not supported");};
++		IssmDouble GetD(){_error_("not supported");};
+ 		IssmDouble GetZbar(){_error_("not supported");};
++		IssmDouble GetDbar(){_error_("not supported");};
+ 		IssmDouble GetN();
+ 		bool       IsInput(int name);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16146)
+@@ -86,7 +86,7 @@
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){_error_("not supported");};
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+-		void       GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
+@@ -94,8 +94,10 @@
+ 		IssmDouble GetB(){_error_("not supported");};
+ 		IssmDouble GetBbar(){_error_("not supported");};
+ 		IssmDouble GetN(){_error_("not supported");};
++		IssmDouble GetD(){_error_("not supported");};
+ 		IssmDouble GetZ(){_error_("not supported");};
+ 		IssmDouble GetZbar(){_error_("not supported");};
++		IssmDouble GetDbar(){_error_("not supported");};
+ 		/*}}}*/
+ 		/*Numerics: {{{*/
+ 		IssmDouble GetG();
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16146)
+@@ -1005,19 +1005,19 @@
+ void Tria::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	int         normal_orientation=0;
++	int         normal_orientation;
+ 	IssmDouble  s1,s2;
+ 	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+ 
+-	if(levelset[0]*levelset[1]>0.){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[2]/(levelset[2]-levelset[1]);
+ 		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-		if(levelset[2]>0.) normal_orientation=1;
++		if(levelset[2]>0) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+@@ -1028,12 +1028,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
+ 	}
+-	else if(levelset[1]*levelset[2]>0.){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[0]/(levelset[0]-levelset[2]);
+ 		s2=levelset[0]/(levelset[0]-levelset[1]);
+ 
+-		if(levelset[0]>0.) normal_orientation=1;
++		if(levelset[0]>0) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+@@ -1044,12 +1044,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
+ 	}
+-	else if(levelset[0]*levelset[2]>0.){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[1]/(levelset[1]-levelset[0]);
+ 		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(levelset[1]>0.) normal_orientation=1;
++		if(levelset[1]>0) normal_orientation=1;
+ 		/*New point 0*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+@@ -1060,7 +1060,7 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+ 	}
+-	else if(levelset[0]==0. && levelset[1]==0.){ //front is on point 0 and 1
++	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[0][0];
+ 		xyz_zero[3*0+1]=xyz_list[0][1];
+ 		xyz_zero[3*0+2]=xyz_list[0][2];
+@@ -1070,7 +1070,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[1][1];
+ 		xyz_zero[3*1+2]=xyz_list[1][2];
+ 	}
+-	else if(levelset[0]==0. && levelset[2]==0.){ //front is on point 0 and 1
++	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[2][0];
+ 		xyz_zero[3*0+1]=xyz_list[2][1];
+ 		xyz_zero[3*0+2]=xyz_list[2][2];
+@@ -1080,7 +1080,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[0][1];
+ 		xyz_zero[3*1+2]=xyz_list[0][2];
+ 	}
+-	else if(levelset[1]==0. && levelset[2]==0.){ //front is on point 0 and 1
++	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[1][0];
+ 		xyz_zero[3*0+1]=xyz_list[1][1];
+ 		xyz_zero[3*0+2]=xyz_list[1][2];
+@@ -1450,7 +1450,7 @@
+ 	Input *input = NULL;	
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum)
++	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum)
+ 	 input=this->material->inputs->GetInput(enum_type);
+ 	else
+ 	 input=this->inputs->GetInput(enum_type);
+@@ -1566,7 +1566,7 @@
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+-				case MaterialsRheologyZbarEnum:
++				case MaterialsRheologyDbarEnum:
+ 					/*Material will take care of it*/ break;
+ 				default:
+ 					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+@@ -1766,6 +1766,7 @@
+ /*FUNCTION Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
++
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+ 
+@@ -1779,7 +1780,7 @@
+ 			values[i]=vector[this->vertices[i]->Pid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
++		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyDEnum || name==MaterialsRheologyDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1792,7 +1793,7 @@
+ 			values[i]=vector[this->vertices[i]->Sid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
++		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyDEnum || name==MaterialsRheologyDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1960,7 +1961,7 @@
+ 				name==InversionVyObsEnum ||
+ 				name==FrictionCoefficientEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+-				name==MaterialsRheologyZbarEnum ||
++				name==MaterialsRheologyDbarEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum ||
+ 				name==ConvergedEnum ||
+@@ -2792,9 +2793,7 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			*presponse=this->material->GetBbar();
+ 			break;
+-		case MaterialsRheologyZbarEnum:
+-			*presponse=this->material->GetZbar();
+-			break;
++
+ 		case VelEnum:{
+ 
+ 			/*Get input:*/
+@@ -3730,7 +3729,7 @@
+ 
+ 	for(int i=0;i<num_controls;i++){
+ 
+-		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyZbarEnum){
++		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyDbarEnum){
+ 			input=(Input*)material->inputs->GetInput(control_type[i]); _assert_(input);
+ 		}
+ 		else{
+@@ -3757,7 +3756,7 @@
+ 	int vertexpidlist[NUMVERTICES];
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3775,7 +3774,7 @@
+ 
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3794,7 +3793,7 @@
+ 	Input* grad_input=NULL;
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3825,8 +3824,8 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			GradjBSSA(gradient,control_index);
+ 			break;
+-		case MaterialsRheologyZbarEnum:
+-			GradjZSSA(gradient,control_index);
++		case MaterialsRheologyDbarEnum:
++			GradjDSSA(gradient,control_index);
+ 			break;
+ 		case BalancethicknessThickeningRateEnum:
+ 			GradjDhDtBalancedthickness(gradient,control_index);
+@@ -3918,46 +3917,6 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GradjZGradient{{{*/
+-void  Tria::GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
+-
+-	int        i;
+-	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble Jdet,weight;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble dbasis[NDOF2][NUMVERTICES];
+-	IssmDouble dk[NDOF2]; 
+-	IssmDouble grade_g[NUMVERTICES]={0.0};
+-	GaussTria  *gauss=NULL;
+-
+-	/*Retrieve all inputs we will be needing: */
+-	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	GradientIndexing(&vertexpidlist[0],control_index);
+-	Input* rheologyz_input=material->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input);
+-	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                _assert_(weights_input);
+-
+-	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussTria(2);
+-	for(int ig=gauss->begin();ig<gauss->end();ig++){
+-
+-		gauss->GaussPoint(ig);
+-
+-		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
+-
+-		/*Build alpha_complement_list: */
+-		rheologyz_input->GetInputDerivativeValue(&dk[0],&xyz_list[0][0],gauss);
+-
+-		/*Build gradje_g_gaussian vector (actually -dJ/ddrag): */
+-		for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]);
+-	}
+-	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+-
+-	/*Clean up and return*/
+-	delete gauss;
+-}
+-/*}}}*/
+ /*FUNCTION Tria::GradjBSSA{{{*/
+ void  Tria::GradjBSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+@@ -4015,15 +3974,15 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GradjZSSA{{{*/
+-void  Tria::GradjZSSA(Vector<IssmDouble>* gradient,int control_index){
++/*FUNCTION Tria::GradjDSSA{{{*/
++void  Tria::GradjDSSA(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+ 	int        doflist[NUMVERTICES];
+ 	IssmDouble vx,vy,lambda,mu,thickness,Jdet;
+ 	IssmDouble viscosity_complement;
+-	IssmDouble dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dZ[NDOF2]; 
++	IssmDouble dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble basis[3],epsilon[3];
+ 	IssmDouble grad[NUMVERTICES]={0.0};
+@@ -4039,7 +3998,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);                                   _assert_(vy_input);
+ 	Input* adjointx_input=inputs->GetInput(AdjointxEnum);                       _assert_(adjointx_input);
+ 	Input* adjointy_input=inputs->GetInput(AdjointyEnum);                       _assert_(adjointy_input);
+-	Input* rheologyz_input=material->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input);
++	Input* rheologyd_input=material->inputs->GetInput(MaterialsRheologyDbarEnum); _assert_(rheologyd_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+@@ -4048,14 +4007,13 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		thickness_input->GetInputValue(&thickness,gauss);
+-		rheologyz_input->GetInputDerivativeValue(&dZ[0],&xyz_list[0][0],gauss);
+ 		vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+ 		vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+ 		adjointx_input->GetInputDerivativeValue(&dadjx[0],&xyz_list[0][0],gauss);
+ 		adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss);
+ 
+ 		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+-		material->GetViscosityZComplement(&viscosity_complement,&epsilon[0]);
++		material->GetViscosityDComplement(&viscosity_complement,&epsilon[0]);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+@@ -5420,7 +5378,7 @@
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get input (either in element or material)*/
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyZbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+@@ -5455,7 +5413,7 @@
+ 	}
+ 	new_input = new TriaInput(control_enum,values,P1Enum);
+ 
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyZbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16145)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16146)
+@@ -138,9 +138,9 @@
+ 		void       GradientIndexing(int* indexing,int control_index);
+ 		void       Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+ 		void       GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void       GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjDGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+ 		void       GradjBSSA(Vector<IssmDouble>* gradient,int control_index);
+-		void       GradjZSSA(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjDSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16145)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16146)
+@@ -26,7 +26,7 @@
+ 		self.thermal_exchange_velocity  = 0.
+ 		self.rheology_B   = float('NaN')
+ 		self.rheology_n   = float('NaN')
+-		self.rheology_Z   = float('NaN')
++		self.rheology_D   = float('NaN')
+ 		self.rheology_law = ''
+ 
+ 		#gia: 
+@@ -57,7 +57,7 @@
+ 		s+="%s\n" % fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
+-		s+="%s\n" % fielddisplay(self,"rheology_Z","rheology multiplier")
++		s+="%s\n" % fielddisplay(self,"rheology_D","damage tensor (scalar for now)")
+ 		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]")
+@@ -118,7 +118,7 @@
+ 		md = checkfield(md,'materials.mu_water','>',0)
+ 		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
+-		md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'materials.rheology_D','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+@@ -142,7 +142,7 @@
+ 		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_Z','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','materials','fieldname','rheology_D','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+ 
+ 		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16145)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16146)
+@@ -18,7 +18,7 @@
+ 		thermal_exchange_velocity  = 0.;
+ 		rheology_B   = NaN;
+ 		rheology_n   = NaN;
+-		rheology_Z   = NaN;
++		rheology_D   = NaN;
+ 		rheology_law = '';
+ 
+ 		%gia: 
+@@ -100,7 +100,7 @@
+ 			md = checkfield(md,'materials.mu_water','>',0);
+ 			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+-			md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'materials.rheology_D','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+@@ -127,7 +127,7 @@
+ 			fielddisplay(obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+ 			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+ 			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+-			fielddisplay(obj,'rheology_Z','rheology multiplier');
++			fielddisplay(obj,'rheology_D','damage tensor (scalar)');
+ 			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+ 			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+@@ -150,7 +150,7 @@
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_Z','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_D','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
+ 
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16145)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16146)
+@@ -115,7 +115,7 @@
+ 			md = checkfield(md,'inversion.tao','values',[0 1]);
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
++				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyDbar' 'Vx' 'Vy' 'Thickness'});
+ 			md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 16145)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 16146)
+@@ -123,7 +123,7 @@
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+ 		md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
+-		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsRheologyZbar','Vx','Vy'])
++		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsRheologyDbar','Vx','Vy'])
+ 		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',1)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m	(revision 16146)
+@@ -0,0 +1,11 @@
++function macro=MaterialsRheologyDbarEnum()
++%MATERIALSRHEOLOGYDBARENUM - Enum of MaterialsRheologyDbar
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsRheologyDbarEnum()
++
++macro=StringToEnum('MaterialsRheologyDbar');
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m	(revision 16146)
+@@ -0,0 +1,11 @@
++function macro=MaterialsRheologyDEnum()
++%MATERIALSRHEOLOGYDENUM - Enum of MaterialsRheologyD
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsRheologyDEnum()
++
++macro=StringToEnum('MaterialsRheologyD');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16145)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16146)
+@@ -153,6 +153,8 @@
+ def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
+ def MaterialsRheologyZEnum(): return StringToEnum("MaterialsRheologyZ")[0]
+ def MaterialsRheologyZbarEnum(): return StringToEnum("MaterialsRheologyZbar")[0]
++def MaterialsRheologyDEnum(): return StringToEnum("MaterialsRheologyD")[0]
++def MaterialsRheologyDbarEnum(): return StringToEnum("MaterialsRheologyDbar")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16146-16147.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16146-16147.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16146-16147.diff	(revision 16556)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16146)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16147)
+@@ -1005,19 +1005,19 @@
+ void Tria::GetZeroLevelsetCoordinates(IssmDouble* xyz_zero,IssmDouble xyz_list[3][3],int levelsetenum){
+ 	/*Computeportion of the element that is grounded*/ 
+ 
+-	int         normal_orientation;
++	int         normal_orientation=0;
+ 	IssmDouble  s1,s2;
+ 	IssmDouble  levelset[NUMVERTICES];
+ 
+ 	/*Recover parameters and values*/
+ 	GetInputListOnVertices(&levelset[0],levelsetenum);
+ 
+-	if(levelset[0]*levelset[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
++	if(levelset[0]*levelset[1]>0.){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[2]/(levelset[2]-levelset[1]);
+ 		s2=levelset[2]/(levelset[2]-levelset[0]);
+ 
+-		if(levelset[2]>0) normal_orientation=1;
++		if(levelset[2]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[2][0]+s1*(xyz_list[1][0]-xyz_list[2][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[2][1]+s1*(xyz_list[1][1]-xyz_list[2][1]);
+@@ -1028,12 +1028,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2][1]+s2*(xyz_list[0][1]-xyz_list[2][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2][2]+s2*(xyz_list[0][2]-xyz_list[2][2]);
+ 	}
+-	else if(levelset[1]*levelset[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
++	else if(levelset[1]*levelset[2]>0.){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[0]/(levelset[0]-levelset[2]);
+ 		s2=levelset[0]/(levelset[0]-levelset[1]);
+ 
+-		if(levelset[0]>0) normal_orientation=1;
++		if(levelset[0]>0.) normal_orientation=1;
+ 		/*New point 1*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[0][0]+s1*(xyz_list[2][0]-xyz_list[0][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[0][1]+s1*(xyz_list[2][1]-xyz_list[0][1]);
+@@ -1044,12 +1044,12 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0][1]+s2*(xyz_list[1][1]-xyz_list[0][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0][2]+s2*(xyz_list[1][2]-xyz_list[0][2]);
+ 	}
+-	else if(levelset[0]*levelset[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
++	else if(levelset[0]*levelset[2]>0.){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
+ 		/*Portion of the segments*/
+ 		s1=levelset[1]/(levelset[1]-levelset[0]);
+ 		s2=levelset[1]/(levelset[1]-levelset[2]);
+ 
+-		if(levelset[1]>0) normal_orientation=1;
++		if(levelset[1]>0.) normal_orientation=1;
+ 		/*New point 0*/
+ 		xyz_zero[3*normal_orientation+0]=xyz_list[1][0]+s1*(xyz_list[0][0]-xyz_list[1][0]);
+ 		xyz_zero[3*normal_orientation+1]=xyz_list[1][1]+s1*(xyz_list[0][1]-xyz_list[1][1]);
+@@ -1060,7 +1060,7 @@
+ 		xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1][1]+s2*(xyz_list[2][1]-xyz_list[1][1]);
+ 		xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1][2]+s2*(xyz_list[2][2]-xyz_list[1][2]);
+ 	}
+-	else if(levelset[0]==0 && levelset[1]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[1]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[0][0];
+ 		xyz_zero[3*0+1]=xyz_list[0][1];
+ 		xyz_zero[3*0+2]=xyz_list[0][2];
+@@ -1070,7 +1070,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[1][1];
+ 		xyz_zero[3*1+2]=xyz_list[1][2];
+ 	}
+-	else if(levelset[0]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[0]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[2][0];
+ 		xyz_zero[3*0+1]=xyz_list[2][1];
+ 		xyz_zero[3*0+2]=xyz_list[2][2];
+@@ -1080,7 +1080,7 @@
+ 		xyz_zero[3*1+1]=xyz_list[0][1];
+ 		xyz_zero[3*1+2]=xyz_list[0][2];
+ 	}
+-	else if(levelset[1]==0 && levelset[2]==0){ //front is on point 0 and 1
++	else if(levelset[1]==0. && levelset[2]==0.){ //front is on point 0 and 1
+ 		xyz_zero[3*0+0]=xyz_list[1][0];
+ 		xyz_zero[3*0+1]=xyz_list[1][1];
+ 		xyz_zero[3*0+2]=xyz_list[1][2];
Index: issm/oecreview/Archive/16133-16554/ISSM-16147-16148.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16147-16148.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16147-16148.diff	(revision 16556)
@@ -0,0 +1,589 @@
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16147)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16148)
+@@ -5,7 +5,7 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 16147)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 16148)
+@@ -4,7 +4,7 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 16147)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 16148)
+@@ -4,13 +4,13 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.rheology_D=0.5*ones(md.mesh.numberofvertices,1);
++md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.verbose=verbose('control',true);
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+-md.inversion.control_parameters={'MaterialsRheologyDbar'};
++md.inversion.control_parameters={'MaterialsDamageDbar'};
+ md.inversion.min_parameters=zeros(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=(1-10^-13)*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+@@ -26,12 +26,12 @@
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient','Misfits','MaterialsRheologyDbar','Pressure','Vel','Vx','Vy'};
++field_names     ={'Gradient','Misfits','MaterialsDamageDbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+    (md.results.StressbalanceSolution.Gradient1),...
+    (md.results.StressbalanceSolution.J),...
+-   (md.results.StressbalanceSolution.MaterialsRheologyDbar),...
++   (md.results.StressbalanceSolution.MaterialsDamageDbar),...
+    (md.results.StressbalanceSolution.Pressure),...
+    (md.results.StressbalanceSolution.Vel),...
+    (md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16147)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16148)
+@@ -153,8 +153,8 @@
+ 	MaterialsRheologyNEnum,
+ 	MaterialsRheologyZEnum,
+ 	MaterialsRheologyZbarEnum,
+-	MaterialsRheologyDEnum,
+-	MaterialsRheologyDbarEnum,
++	MaterialsDamageDEnum,
++	MaterialsDamageDbarEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16148)
+@@ -161,8 +161,8 @@
+ 		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+ 		case MaterialsRheologyZEnum : return "MaterialsRheologyZ";
+ 		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
+-		case MaterialsRheologyDEnum : return "MaterialsRheologyD";
+-		case MaterialsRheologyDbarEnum : return "MaterialsRheologyDbar";
++		case MaterialsDamageDEnum : return "MaterialsDamageD";
++		case MaterialsDamageDbarEnum : return "MaterialsDamageDbar";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16148)
+@@ -164,8 +164,8 @@
+ 	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZ")==0) return MaterialsRheologyZEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum;
+-	      else if (strcmp(name,"MaterialsRheologyD")==0) return MaterialsRheologyDEnum;
+-	      else if (strcmp(name,"MaterialsRheologyDbar")==0) return MaterialsRheologyDbarEnum;
++	      else if (strcmp(name,"MaterialsDamageD")==0) return MaterialsDamageDEnum;
++	      else if (strcmp(name,"MaterialsDamageDbar")==0) return MaterialsDamageDbarEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16148)
+@@ -63,7 +63,7 @@
+ 			}
+ 			break;
+ 		case MatdamageiceEnum:
+-			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyDEnum);
++			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsDamageDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
+ 			break;
+ 		default:
+@@ -72,7 +72,7 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
+-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
++				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsDamageDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+ 				InversionMaxParametersEnum);
+ 
+ 	/*Add new constant material property to materials, at the end: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16148)
+@@ -39,7 +39,7 @@
+ 			case ThicknessEnum:             iomodel->FetchData(1,ThicknessEnum); break;
+ 			case FrictionCoefficientEnum:   iomodel->FetchData(1,FrictionCoefficientEnum); break;
+ 			case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
+-			case MaterialsRheologyDbarEnum: iomodel->FetchData(1,MaterialsRheologyDEnum); break;
++			case MaterialsDamageDbarEnum: iomodel->FetchData(1,MaterialsDamageDEnum); break;
+ 			default: _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+ 		}
+ 	}
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyDEnum);
++	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsDamageDEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16148)
+@@ -101,7 +101,7 @@
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	if(materials_type==MatdamageiceEnum){
+-		iomodel->FetchDataToInput(elements,MaterialsRheologyDEnum);
++		iomodel->FetchDataToInput(elements,MaterialsDamageDEnum);
+ 	}
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16148)
+@@ -166,7 +166,7 @@
+ 	/*Output*/
+ 	IssmDouble D;
+ 
+-	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
++	inputs->GetInputAverage(&D,MaterialsDamageDEnum);
+ 	return D;
+ }
+ /*}}}*/
+@@ -176,7 +176,7 @@
+ 	/*Output*/
+ 	IssmDouble D;
+ 
+-	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
++	inputs->GetInputAverage(&D,MaterialsDamageDEnum);
+ 	return 1/(1-D);
+ }
+ /*}}}*/
+@@ -185,7 +185,7 @@
+ 
+ 	/*Output*/
+ 	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
++	inputs->GetInputAverage(&Dbar,MaterialsDamageDbarEnum);
+ 	return 1/(1-Dbar);
+ }
+ /*}}}*/
+@@ -194,7 +194,7 @@
+ 
+ 	/*Output*/
+ 	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
++	inputs->GetInputAverage(&Dbar,MaterialsDamageDbarEnum);
+ 	return Dbar;
+ }
+ /*}}}*/
+@@ -797,9 +797,9 @@
+ 		}
+ 
+ 		/*Get D*/
+-		if (iomodel->Data(MaterialsRheologyDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(MaterialsRheologyDbarEnum,nodeinputs,P1Enum));
++		if (iomodel->Data(MaterialsDamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(MaterialsDamageDbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -816,13 +816,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsRheologyDbarEnum:
+-						if (iomodel->Data(MaterialsRheologyDEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case MaterialsDamageDbarEnum:
++						if (iomodel->Data(MaterialsDamageDEnum)){
++							_assert_(iomodel->Data(MaterialsDamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsDamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 
+@@ -855,9 +855,9 @@
+ 		}
+ 
+ 		/*Get D*/
+-		if (iomodel->Data(MaterialsRheologyDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new PentaInput(MaterialsRheologyDEnum,nodeinputs,P1Enum));
++		if (iomodel->Data(MaterialsDamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new PentaInput(MaterialsDamageDEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -874,13 +874,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsRheologyDbarEnum:
+-						if (iomodel->Data(MaterialsRheologyDEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyDEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case MaterialsDamageDbarEnum:
++						if (iomodel->Data(MaterialsDamageDEnum)){
++							_assert_(iomodel->Data(MaterialsDamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(MaterialsDamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 				}
+@@ -902,8 +902,8 @@
+ 				name==MaterialsRheologyBEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+ 				name==MaterialsRheologyNEnum ||
+-				name==MaterialsRheologyDEnum ||
+-				name==MaterialsRheologyDbarEnum
++				name==MaterialsDamageDEnum ||
++				name==MaterialsDamageDbarEnum
+ 		){
+ 		return true;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16147)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16148)
+@@ -1450,7 +1450,7 @@
+ 	Input *input = NULL;	
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum)
++	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum)
+ 	 input=this->material->inputs->GetInput(enum_type);
+ 	else
+ 	 input=this->inputs->GetInput(enum_type);
+@@ -1566,7 +1566,7 @@
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+-				case MaterialsRheologyDbarEnum:
++				case MaterialsDamageDbarEnum:
+ 					/*Material will take care of it*/ break;
+ 				default:
+ 					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+@@ -1780,7 +1780,7 @@
+ 			values[i]=vector[this->vertices[i]->Pid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyDEnum || name==MaterialsRheologyDbarEnum){
++		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1793,7 +1793,7 @@
+ 			values[i]=vector[this->vertices[i]->Sid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyDEnum || name==MaterialsRheologyDbarEnum){
++		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1961,7 +1961,7 @@
+ 				name==InversionVyObsEnum ||
+ 				name==FrictionCoefficientEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+-				name==MaterialsRheologyDbarEnum ||
++				name==MaterialsDamageDbarEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum ||
+ 				name==ConvergedEnum ||
+@@ -3729,7 +3729,7 @@
+ 
+ 	for(int i=0;i<num_controls;i++){
+ 
+-		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyDbarEnum){
++		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsDamageDbarEnum){
+ 			input=(Input*)material->inputs->GetInput(control_type[i]); _assert_(input);
+ 		}
+ 		else{
+@@ -3756,7 +3756,7 @@
+ 	int vertexpidlist[NUMVERTICES];
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3774,7 +3774,7 @@
+ 
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3793,7 +3793,7 @@
+ 	Input* grad_input=NULL;
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3824,7 +3824,7 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			GradjBSSA(gradient,control_index);
+ 			break;
+-		case MaterialsRheologyDbarEnum:
++		case MaterialsDamageDbarEnum:
+ 			GradjDSSA(gradient,control_index);
+ 			break;
+ 		case BalancethicknessThickeningRateEnum:
+@@ -3998,7 +3998,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);                                   _assert_(vy_input);
+ 	Input* adjointx_input=inputs->GetInput(AdjointxEnum);                       _assert_(adjointx_input);
+ 	Input* adjointy_input=inputs->GetInput(AdjointyEnum);                       _assert_(adjointy_input);
+-	Input* rheologyd_input=material->inputs->GetInput(MaterialsRheologyDbarEnum); _assert_(rheologyd_input);
++	Input* rheologyd_input=material->inputs->GetInput(MaterialsDamageDbarEnum); _assert_(rheologyd_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+@@ -5378,7 +5378,7 @@
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get input (either in element or material)*/
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyDbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsDamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+@@ -5413,7 +5413,7 @@
+ 	}
+ 	new_input = new TriaInput(control_enum,values,P1Enum);
+ 
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyDbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsDamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16147)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16148)
+@@ -26,7 +26,7 @@
+ 		self.thermal_exchange_velocity  = 0.
+ 		self.rheology_B   = float('NaN')
+ 		self.rheology_n   = float('NaN')
+-		self.rheology_D   = float('NaN')
++		self.damage_D   = float('NaN')
+ 		self.rheology_law = ''
+ 
+ 		#gia: 
+@@ -57,7 +57,7 @@
+ 		s+="%s\n" % fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
+-		s+="%s\n" % fielddisplay(self,"rheology_D","damage tensor (scalar for now)")
++		s+="%s\n" % fielddisplay(self,"damage_D","damage tensor (scalar for now)")
+ 		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]")
+@@ -118,7 +118,7 @@
+ 		md = checkfield(md,'materials.mu_water','>',0)
+ 		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
+-		md = checkfield(md,'materials.rheology_D','>',0,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+@@ -142,7 +142,7 @@
+ 		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_D','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+ 
+ 		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16147)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16148)
+@@ -18,7 +18,14 @@
+ 		thermal_exchange_velocity  = 0.;
+ 		rheology_B   = NaN;
+ 		rheology_n   = NaN;
+-		rheology_D   = NaN;
++		damage_D = NaN;
++		%damage_D
++		%damage_stress_threshold
++		%damage_c1
++		%damage_c2
++		%damage_c3
++		%damage_c4
++
+ 		rheology_law = '';
+ 
+ 		%gia: 
+@@ -100,7 +107,7 @@
+ 			md = checkfield(md,'materials.mu_water','>',0);
+ 			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+-			md = checkfield(md,'materials.rheology_D','>',0,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+@@ -127,7 +134,7 @@
+ 			fielddisplay(obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+ 			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+ 			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+-			fielddisplay(obj,'rheology_D','damage tensor (scalar)');
++			fielddisplay(obj,'damage_D','damage tensor (scalar)');
+ 			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+ 			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+@@ -150,7 +157,7 @@
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_D','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
+ 
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16147)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16148)
+@@ -115,7 +115,7 @@
+ 			md = checkfield(md,'inversion.tao','values',[0 1]);
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyDbar' 'Vx' 'Vy' 'Thickness'});
++				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsDamageDbar' 'Vx' 'Vy' 'Thickness'});
+ 			md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 16147)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 16148)
+@@ -123,7 +123,7 @@
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+ 		md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
+-		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsRheologyDbar','Vx','Vy'])
++		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsDamageDbar','Vx','Vy'])
+ 		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',1)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m	(revision 16147)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m	(revision 16148)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsRheologyDbarEnum()
+-%MATERIALSRHEOLOGYDBARENUM - Enum of MaterialsRheologyDbar
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsRheologyDbarEnum()
+-
+-macro=StringToEnum('MaterialsRheologyDbar');
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m	(revision 16147)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m	(revision 16148)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsRheologyDEnum()
+-%MATERIALSRHEOLOGYDENUM - Enum of MaterialsRheologyD
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsRheologyDEnum()
+-
+-macro=StringToEnum('MaterialsRheologyD');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m	(revision 16148)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageDbarEnum()
++%MATERIALSDAMAGEDBARENUM - Enum of MaterialsDamageDbar
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageDbarEnum()
++
++macro=StringToEnum('MaterialsDamageDbar');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16147)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16148)
+@@ -153,8 +153,8 @@
+ def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
+ def MaterialsRheologyZEnum(): return StringToEnum("MaterialsRheologyZ")[0]
+ def MaterialsRheologyZbarEnum(): return StringToEnum("MaterialsRheologyZbar")[0]
+-def MaterialsRheologyDEnum(): return StringToEnum("MaterialsRheologyD")[0]
+-def MaterialsRheologyDbarEnum(): return StringToEnum("MaterialsRheologyDbar")[0]
++def MaterialsDamageDEnum(): return StringToEnum("MaterialsDamageD")[0]
++def MaterialsDamageDbarEnum(): return StringToEnum("MaterialsDamageDbar")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m	(revision 16148)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageDEnum()
++%MATERIALSDAMAGEDENUM - Enum of MaterialsDamageD
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageDEnum()
++
++macro=StringToEnum('MaterialsDamageD');
Index: issm/oecreview/Archive/16133-16554/ISSM-16148-16149.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16148-16149.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16148-16149.diff	(revision 16556)
@@ -0,0 +1,653 @@
+Index: ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16149)
+@@ -17,9 +17,6 @@
+ 	/*set current analysis: */
+ 	femmodel->SetCurrentConfiguration(analysis_type);
+ 
+-	/*recover nodes: */
+-	nodes=femmodel->nodes;
+-
+ 	/*retrieve boundary conditions from element inputs :*/
+ 	GetSolutionFromInputsx(&yg,femmodel);
+ 
+Index: ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 16149)
+@@ -40,7 +40,6 @@
+ 
+ 	char     **responses_descriptors    = NULL;      //these are our! there are only numresponsedescriptors of them, not d_numresponses!!!
+ 	int        numresponsedescriptors;
+-	char      *string                   = NULL;
+ 	int        solution_type;
+ 	bool       control_analysis         = false;
+ 	void     (*solutioncore)(FemModel*) = NULL;
+Index: ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 16149)
+@@ -11,34 +11,28 @@
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+ 
+-	return(Shp2Expx(filshp,filexp,
+-					0));
++	return(Shp2Expx(filshp,filexp,0));
+ 
+ 	#else //ifdef _HAVE_SHAPELIB_
+ 	return 0;
+ 	#endif
+ }
+ 
+-int Shp2Expx(char* filshp,char* filexp,
+-			 int sgn){
++int Shp2Expx(char* filshp,char* filexp,int sgn){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+ 
+ 	double  cm,sp;
++	Xy2lldef(&cm,&sp,sgn);
+ 
+-	if (sgn)
+-		Xy2lldef(&cm,&sp,sgn);
++	return(Shp2Expx(filshp,filexp,sgn,cm,sp));
+ 
+-	return(Shp2Expx(filshp,filexp,
+-					sgn,cm,sp));
+-
+ 	#else //ifdef _HAVE_SHAPELIB_
+ 	return 0;
+ 	#endif
+ }
+ 
+-int Shp2Expx(char* filshp,char* filexp,
+-			 int sgn,double cm,double sp){
++int Shp2Expx(char* filshp,char* filexp,int sgn,double cm,double sp){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+ 
+Index: ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 16149)
+@@ -7,26 +7,21 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../../kml/kmlobjects.h"
+ 
+-int Shp2Kmlx(char* filshp,char* filkml,
+-			 int sgn){
++int Shp2Kmlx(char* filshp,char* filkml,int sgn){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+ 
+ 	double  cm,sp;
++	Xy2lldef(&cm,&sp,sgn);
+ 
+-	if (sgn)
+-		Xy2lldef(&cm,&sp,sgn);
++	return(Shp2Kmlx(filshp,filkml,sgn,cm,sp));
+ 
+-	return(Shp2Kmlx(filshp,filkml,
+-					sgn,cm,sp));
+-
+ 	#else //ifdef _HAVE_SHAPELIB_
+ 	return 0;
+ 	#endif
+ }
+ 
+-int Shp2Kmlx(char* filshp,char* filkml,
+-			 int sgn,double cm,double sp){
++int Shp2Kmlx(char* filshp,char* filkml,int sgn,double cm,double sp){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+ 
+@@ -102,11 +97,8 @@
+ 	pshapz=xNew<double*>(nshape);
+ 	pshapm=xNew<double*>(nshape);
+ 
+-/*  loop over the list of shapes  */
+-
+-	for( i = 0; i < nEntities; i++ )
+-	{
+-//	int     j;
++	/* loop over the list of shapes  */
++	for(i=0;i<nEntities;i++ ){
+ 		SHPObject   *psShape;
+ 
+ 	psShape = SHPReadObject( hSHP, i );
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16149)
+@@ -2,7 +2,7 @@
+  * \brief: solve dense matrix system with MUMPS
+  */
+ 
+-/*Header files: {{{*/
++/*Header files: */
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -20,10 +20,9 @@
+ #include "./mumpsincludes.h"
+ 
+ /*Mumps header files: */
+-#include "dmumps_c.h"
+-/*}}}*/
++#include <dmumps_c.h>
+ 
+-void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc) { 
++void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc){ 
+ 	theMumpsStruc.par          = 1;  
+ 	theMumpsStruc.sym          = 0;
+ 	theMumpsStruc.comm_fortran = MPI_Comm_c2f(IssmComm::GetComm());
+@@ -70,20 +69,13 @@
+ 	dmumps_c(&theMumpsStruc);
+ }
+ 
+-void MumpsSolve(int n,
+-		int nnz,
+-		int local_nnz,
+-		int* irn_loc,
+-		int* jcn_loc,
+-		IssmPDouble *a_loc,
+-		IssmPDouble *rhs,
+-		Parameters* parameters=0 /*unused here*/) {
+-	/*Initialize mumps: {{{*/
++void MumpsSolve(int n,int nnz,int local_nnz,int* irn_loc,int* jcn_loc, IssmPDouble *a_loc, IssmPDouble *rhs, Parameters* parameters=0 /*unused here*/){
++	/*Initialize mumps*/
+ 	DMUMPS_STRUC_C theMumpsStruc;
+ 	MumpsInit(theMumpsStruc);
+ 	MumpsSettings(theMumpsStruc);
+-	/*}}}*/
+-	// now setup the rest of theMumpsStruc 
++
++	/*now setup the rest of theMumpsStruc */
+ 	theMumpsStruc.n=n;
+ 	theMumpsStruc.nz=nnz;
+ 	theMumpsStruc.nz_loc=local_nnz;
+@@ -93,11 +85,11 @@
+ 	theMumpsStruc.rhs=rhs;
+ 	theMumpsStruc.nrhs=1;
+ 	theMumpsStruc.lrhs=1;
+-	/*Solve system: {{{*/
++
++	/*Solve system*/
+ 	MumpsAnalyze(theMumpsStruc);
+ 	MumpsFactorize(theMumpsStruc);
+ 	MumpsBacksubstitute(theMumpsStruc);
+-	/*}}}*/
+ 	MumpsFinalize(theMumpsStruc);
+ }
+ 
+@@ -115,36 +107,33 @@
+ 
+ void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters){ /*{{{*/
+ 
+-	/*Variables: {{{*/
++	/*Variables*/
++	ISSM_MPI_Comm  comm;
++	int            my_rank;
++	int            num_procs;
++	int            i,j;
++	int            nnz,local_nnz;
++	int           *irn_loc    = NULL;
++	int           *jcn_loc    = NULL;
++	IssmDouble    *a_loc      = NULL;
++	int            count;
++	int            lower_row;
++	int            upper_row;
++	IssmDouble    *rhs        = NULL;
++	int           *recvcounts = NULL;
++	int           *displs     = NULL;
+ 
+-	ISSM_MPI_Comm   comm;
+-	int        my_rank;
+-	int        num_procs;
+-	int        i;
+-	int        j;
+-	int         nnz       ,local_nnz;
+-	int        *irn_loc = NULL;
+-	int        *jcn_loc = NULL;
+-	IssmDouble *a_loc   = NULL;
+-	int         count;
+-	int         lower_row;
+-	int         upper_row;
+-	IssmDouble* rhs=NULL;
+-	int*        recvcounts=NULL;
+-	int*        displs=NULL;
+-	/*}}}*/
+-	/*Communicator info:{{{ */
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
+-	comm=IssmComm::GetComm();
+-	/*}}}*/
+-	/*First, some checks:{{{ */
++	/*Communicator info */
++	my_rank   = IssmComm::GetRank();
++	num_procs = IssmComm::GetSize();
++	comm      = IssmComm::GetComm();
++
++	/*First, some checks*/
+ 	if (Kff_M!=Kff_N)_error_("stiffness matrix Kff should be square");
+ 	if (uf_M!=Kff_M | uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
+ 	if (uf_m!=Kff_m | uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
+-	/*}}}*/
+-	/*Initialize matrix:{{{ */
+ 
++	/*Initialize matrix */
+ 	/*figure out number of non-zero entries: */
+ 	local_nnz=0;
+ 	for(i=0;i<Kff_m;i++){
+@@ -191,27 +180,18 @@
+ 	/*Gather:*/
+ 	ISSM_MPI_Gatherv(pf, pf_m, ISSM_MPI_DOUBLE, rhs, recvcounts, displs, ISSM_MPI_DOUBLE,0,comm);
+ 
+-	MumpsSolve(Kff_M,
+-		   nnz,
+-		   local_nnz,
+-		   irn_loc,
+-		   jcn_loc,
+-		   a_loc,
+-		   rhs,
+-		   parameters);
++	MumpsSolve(Kff_M,nnz,local_nnz,irn_loc,jcn_loc,a_loc,rhs,parameters);
+ 
+-	/*Now scatter from cpu 0 to all other cpus: {{{*/
++	/*Now scatter from cpu 0 to all other cpus*/
+ 	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
+ 
+-	/*}}}*/
+-	/*Cleanup: {{{*/
++	/*Cleanup*/
+ 	xDelete<int>(irn_loc);
+ 	xDelete<int>(jcn_loc);
+ 	xDelete<IssmDouble>(a_loc);
+ 	xDelete<IssmDouble>(rhs);
+ 	xDelete<int>(recvcounts);
+ 	xDelete<int>(displs);
+-	/*}}}*/
+ } /*}}}*/
+ 
+ #ifdef _HAVE_ADOLC_
+@@ -244,14 +224,7 @@
+   return 0;
+ }
+ 
+-void MumpsSolve(int n,
+-		int nnz,
+-		int local_nnz,
+-		int* irn_loc,
+-		int* jcn_loc,
+-		IssmDouble *a_loc,
+-		IssmDouble *rhs,
+-		Parameters* parameters) {
++void MumpsSolve(int n,int nnz,int local_nnz,int* irn_loc,int* jcn_loc,IssmDouble *a_loc,IssmDouble *rhs,Parameters* parameters){
+   int packedDimsSparseArrLength=1+1+1+local_nnz+local_nnz;
+   int *packedDimsSparseArr=xNew<int>(packedDimsSparseArrLength);
+   packedDimsSparseArr[0]=n;
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 16149)
+@@ -169,7 +169,6 @@
+ 	int         start,end;
+ 	IssmDouble*     df_local=NULL;
+ 	int         df_local_size;
+-	int         i;
+ 
+ 	int*     pressure_indices=NULL;
+ 	int*     velocity_indices=NULL;
+@@ -187,7 +186,7 @@
+ 
+ 		pressure_num=0;
+ 		velocity_num=0;
+-		for(i=0;i<df_local_size;i++){
++		for(int i=0;i<df_local_size;i++){
+ 			if (df_local[i]==PressureEnum)pressure_num++;
+ 			else velocity_num++;
+ 		}
+@@ -198,7 +197,7 @@
+ 
+ 		pressure_count=0;
+ 		velocity_count=0;
+-		for(i=0;i<df_local_size;i++){
++		for(int i=0;i<df_local_size;i++){
+ 			if (df_local[i]==PressureEnum){
+ 				pressure_indices[pressure_count]=start+i;
+ 				pressure_count++;
+Index: ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 16149)
+@@ -57,7 +57,7 @@
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+ 	_printf_("   matrix size: " << this->M << "x" << this->N << "\n");
+ 	for(i=0;i<this->M;i++){
+-		for(i=0;i<this->N;i++){
++		for(j=0;j<this->N;j++){
+ 			_printf_("(" << i << "," << j << ") " << *(this->value+N*i+j) << "\n");
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 16149)
+@@ -57,7 +57,7 @@
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+ 	_printf_("   matrix size: " << this->M << "x" << this->N << "\n");
+ 	for(i=0;i<this->M;i++){
+-		for(i=0;i<this->N;i++){
++		for(j=0;j<this->N;j++){
+ 			_printf_(i << " " << j << " " << *(this->value+N*i+j) << "\n");
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16148)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16149)
+@@ -21,12 +21,12 @@
+ class GenericExternalResult: public ExternalResult {
+ 
+ 	private: 
+-		int id;
+-		int enum_type;
++		int        id;
++		int        enum_type;
+ 		ResultType value;
+-		int M;
+-		int N;
+-		int step;
++		int        M;
++		int        N;
++		int        step;
+ 		IssmDouble time;
+ 
+ 	public:
+@@ -59,23 +59,29 @@
+ 
+ 		/*GenericExternalResult constructors and  destructors*/
+ 		GenericExternalResult(){ /*{{{*/
+-			id  = 0;
++			id        = 0;
+ 			enum_type = NoneEnum;
+-			M=0;
+-			N=0;
+-			step=0;
+-			time=0;
++			M         = 0;
++			N         = 0;
++			step      = 0;
++			time      = 0;
+ 		} /*}}}*/
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
++			id        = 0;
++			enum_type = NoneEnum;
++			M         = 0;
++			N         = 0;
++			step      = 0;
++			time      = 0;
+ 			_error_("template GenericExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_N,int in_step,IssmDouble in_time) not implemented for this ResultType\n");
+ 		}
+ /*}}}*/
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+-			id=in_id;
+-			enum_type=in_enum_type;
+-			value=in_value;
+-			step=in_step;
+-			time=in_time;
++			id        = in_id;
++			enum_type = in_enum_type;
++			value     = in_value;
++			step      = in_step;
++			time      = in_time;
+ 		}
+ 		/*}}}*/
+ 		~GenericExternalResult(){ /*{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16149)
+@@ -1776,7 +1776,8 @@
+ 
+ 	switch(type){
+ 	case VertexPIdEnum: 
+-		for (int i=0;i<NUMVERTICES;i++){
++		values = xNew<IssmDouble>(NUMVERTICES);
++		for(int i=0;i<NUMVERTICES;i++){
+ 			values[i]=vector[this->vertices[i]->Pid()];
+ 		}
+ 		/*update input*/
+@@ -1786,20 +1787,19 @@
+ 		else{
+ 			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+-		return; 
+ 
+ 	case VertexSIdEnum: 
+-		for (int i=0;i<NUMVERTICES;i++){
++		values = xNew<IssmDouble>(NUMVERTICES);
++		for(int i=0;i<NUMVERTICES;i++){
+ 			values[i]=vector[this->vertices[i]->Sid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
++		if(name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+ 			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+-		return; 
+ 
+ 	case NodesEnum:
+ 
+@@ -1808,19 +1808,12 @@
+ 		values   = xNew<IssmDouble>(numnodes);
+ 		GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+-		/*Use the dof list to index into the vector: */
+ 		for(int i=0;i<numnodes;i++){
+ 			values[i]=vector[doflist[i]];
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
+-
+-		/*Add input to the element: */
+ 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+ 
+-		/*Free ressources:*/
+-		xDelete<int>(doflist);
+-		return;
+-
+ 	case NodeSIdEnum:
+ 
+ 		/*Get number of nodes and dof list: */
+@@ -1831,9 +1824,7 @@
+ 			values[i]=vector[nodes[i]->Sid()];
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
+-		/*Add input to the element: */
+ 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
+-		return;
+ 
+ 	default:
+ 		_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+@@ -7617,7 +7608,6 @@
+ 	IssmDouble rho_water,rho_ice,density;
+ 	IssmDouble melting[NUMVERTICES],phi[NUMVERTICES];;
+ 	IssmDouble h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],r[NUMVERTICES];
+-	bool       grounded[NUMVERTICES],floating[NUMVERTICES];
+ 
+ 	/*Recover info at the vertices: */
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
+@@ -7640,8 +7630,6 @@
+ 			if(b[i]<=r[i]){ 
+ 				b[i]        = r[i];
+ 				s[i]        = b[i]+h[i];
+-				floating[i] = false;
+-				grounded[i] = true;
+ 			}
+ 		}
+ 		/*Ice sheet: if hydrostatic bed above bathymetry, ice sheet starts to unground, elso do nothing */
+@@ -7653,14 +7641,10 @@
+ 				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+-					floating[i] = true;
+-					grounded[i] = false;
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+-					floating[i] = true;
+-					grounded[i] = false;
+ 				}
+ 				else{
+ 					if(migration_style!=SoftMigrationEnum) _error_("Error: migration should be Aggressive, Soft or Subelement");
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16149)
+@@ -8219,22 +8219,14 @@
+ 	int        numdof  = NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+-	int        i,j,approximation;
++	int        i,j;
+ 	IssmDouble Jdet,viscosity,FSreconditioning,diameter,rigidity;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble B[8][24];
+-	IssmDouble B_prime[8][24];
+-	IssmDouble B_stab[3][NUMVERTICES];
+-	IssmDouble D_scalar,D_scalar_stab;
+-	IssmDouble D[8][8]={0.0};
+-	IssmDouble D_stab[3][3]={0.0};
+-	IssmDouble Ke_temp[24][24]={0.0}; //for the six nodes
+-	IssmDouble Ke_temp_stab[6][6]={0.0}; //for the six nodes
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Stabilization*/
+-	bool       stabilization = true;
++	IssmDouble D_scalar;
+ 	IssmDouble dbasis[3][6];
+ 	IssmDouble dmu[3];
+ 	IssmDouble mu;
+@@ -8330,7 +8322,7 @@
+ ElementMatrix* Penta::CreateKMatrixStressbalanceFSViscous(void){
+ 
+ 	/*Intermediaries */
+-	int        i,j,approximation;
++	int        i,approximation;
+ 	IssmDouble Jdet,viscosity,FSreconditioning,D_scalar;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+@@ -10939,7 +10931,6 @@
+ 	int*         vdoflist=NULL;
+ 	int*         pdoflist=NULL;
+ 	IssmDouble   FSreconditioning;
+-	GaussPenta  *gauss;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int vnumnodes = this->NumberofNodesVelocity();
+@@ -11275,7 +11266,6 @@
+ 	IssmDouble rho_water,rho_ice,density;
+ 	IssmDouble h[NUMVERTICES],s[NUMVERTICES],b[NUMVERTICES],r[NUMVERTICES];
+ 	IssmDouble melting[NUMVERTICES],phi[NUMVERTICES];
+-	bool       grounded[NUMVERTICES],floating[NUMVERTICES];
+ 
+ 	if(!IsOnBed()) return;
+ 
+@@ -11300,8 +11290,6 @@
+ 			if(b[i]<=r[i]){ 
+ 				b[i]        = r[i];
+ 				s[i]        = b[i]+h[i];
+-				floating[i] = false;
+-				grounded[i] = true;
+ 			}
+ 		}
+ 		/*Ice sheet: if hydrostatic bed above bathymetry, ice sheet starts to unground, elso do nothing */
+@@ -11313,14 +11301,10 @@
+ 				if(migration_style==AgressiveMigrationEnum || migration_style==SubelementMigrationEnum || migration_style==SubelementMigration2Enum){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+-					floating[i] = true;
+-					grounded[i] = false;
+ 				}
+ 				else if(migration_style==SoftMigrationEnum && phi_ungrounding[vertices[i]->Pid()]<0.){
+ 					s[i]        = (1-density)*h[i];
+ 					b[i]        = -density*h[i];
+-					floating[i] = true;
+-					grounded[i] = false;
+ 				}
+ 				else{
+ 					if(migration_style!=SoftMigrationEnum) _error_("Error: migration should be Aggressive, Soft or Subelement");
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 16149)
+@@ -395,15 +395,15 @@
+ }
+ /*}}}*/
+ /*FUNCTION Inputs::AXPY{{{*/
+-void  Inputs::AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum){
++void  Inputs::AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum){
+ 
+ 	/*Find x and y inputs: */
+-	Input* xinput=dynamic_cast<Input*>(this->GetInput(MeshXEnum));
+-	Input* yinput=dynamic_cast<Input*>(this->GetInput(MeshYEnum));
++	Input* xinput=dynamic_cast<Input*>(this->GetInput(inputx_enum));
++	Input* yinput=dynamic_cast<Input*>(this->GetInput(inputy_enum));
+ 
+ 	/*some checks: */
+-	if(!xinput) _error_("input " << EnumToStringx(MeshXEnum) << " could not be found!");
+-	if(!yinput) _error_("input " << EnumToStringx(MeshYEnum) << " could not be found!");
++	if(!xinput) _error_("input " << EnumToStringx(inputx_enum) << " could not be found!");
++	if(!yinput) _error_("input " << EnumToStringx(inputy_enum) << " could not be found!");
+ 
+ 	/*Apply AXPY: */
+ 	yinput->AXPY(xinput,scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 16148)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 16149)
+@@ -21,24 +21,24 @@
+ 		~Inputs();
+ 
+ 		/*numerics*/
+-		int        AddInput(Input* in_input);
+-		void       ChangeEnum(int enumtype,int new_enumtype);
+-		void       ConstrainMin(int constrain_enum, IssmDouble minimum);
+-		int        DeleteInput(int enum_type);
+-		void       DuplicateInput(int original_enum,int new_enum);
+-		Input*     GetInput(int enum_name);
+-		Inputs*    SpawnTriaInputs(int position);
+-		void       AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
++		int         AddInput(Input* in_input);
++		void        ChangeEnum(int enumtype,int new_enumtype);
++		void        ConstrainMin(int constrain_enum, IssmDouble minimum);
++		int         DeleteInput(int enum_type);
++		void        DuplicateInput(int original_enum,int new_enum);
++		Input*      GetInput(int enum_name);
++		Inputs*     SpawnTriaInputs(int position);
++		void        AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum);
+ 		IssmDouble  InfinityNorm(int enumtype);
+ 		IssmDouble  Max(int enumtype);
+ 		IssmDouble  MaxAbs(int enumtype);
+ 		IssmDouble  Min(int enumtype);
+ 		IssmDouble  MinAbs(int enumtype);
+-		void GetInputAverage(IssmDouble* pvalue, int enum_type);
+-		void GetInputValue(bool* pvalue,int enum_type);
+-		void GetInputValue(int* pvalue,int enum_type);
+-		void GetInputValue(IssmDouble* pvalue,int enum_type);
+-		void Configure(Parameters* parameters);
++		void        GetInputAverage(IssmDouble* pvalue, int enum_type);
++		void        GetInputValue(bool* pvalue,int enum_type);
++		void        GetInputValue(int* pvalue,int enum_type);
++		void        GetInputValue(IssmDouble* pvalue,int enum_type);
++		void        Configure(Parameters* parameters);
+ 
+ };
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16149-16150.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16149-16150.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16149-16150.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/scripts/cppcheck.sh
+===================================================================
+--- ../trunk-jpl/scripts/cppcheck.sh	(revision 16149)
++++ ../trunk-jpl/scripts/cppcheck.sh	(revision 16150)
+@@ -1,3 +1,4 @@
+ #!/bin/bash
+ 
+-cppcheck -j 8 --include=$ISSM_DIR/config.h --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
++cppcheck -j 8 --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
++#cppcheck --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
Index: issm/oecreview/Archive/16133-16554/ISSM-16150-16151.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16150-16151.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16150-16151.diff	(revision 16556)
@@ -0,0 +1,262 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16150)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16151)
+@@ -633,7 +633,6 @@
+ 	int        unstable        = 0;
+ 	int        reset_penalties = 0;
+ 	int        found           = 0;	
+-	int        penalty_lock;
+ 	int        new_active;
+ 	IssmDouble pressure;
+ 	IssmDouble h;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16150)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16151)
+@@ -1859,7 +1859,7 @@
+ void Tria::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+ 
+ 	/*Intermediaries*/
+-	int    i,j,t;
++	int    i,t;
+ 	int    tria_vertex_ids[3];
+ 	int    row;
+ 	IssmDouble nodeinputs[3];
+@@ -2417,7 +2417,7 @@
+ void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){
+ 
+ 	/*Intermediaries*/
+-	int        i,j;
++	int        i;
+ 	int        tria_vertex_ids[3];
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble yts;
+@@ -2428,9 +2428,7 @@
+ 	int*       tria_node_ids = NULL;
+ 
+ 	/*Checks if debuging*/
+-	/*{{{*/
+ 	_assert_(iomodel->elements);
+-	/*}}}*/
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+@@ -2982,7 +2980,6 @@
+ ElementMatrix* Tria::CreateKMatrixStressbalanceSSAViscous(void){
+ 
+ 	/*Intermediaries*/
+-	int        i,j;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble viscosity,newviscosity,oldviscosity;
+ 	IssmDouble viscosity_overshoot,thickness,Jdet;
+@@ -3026,7 +3023,7 @@
+ 
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 		D_scalar=2.*newviscosity*thickness*gauss->weight*Jdet;
+-		for(i=0;i<3;i++) D[i*3+i]=D_scalar;
++		for(int i=0;i<3;i++) D[i*3+i]=D_scalar;
+ 
+ 		TripleMultiply(B,3,numdof,1,
+ 					D,3,3,0,
+@@ -3050,7 +3047,6 @@
+ 
+ 	/*Intermediaries*/
+ 	bool       mainlyfloating;
+-	int        i,j;
+ 	int        analysis_type,migration_style;
+ 	int        point1;
+ 	IssmDouble alpha2,Jdet;
+@@ -3113,7 +3109,7 @@
+ 		GetBSSAFriction(&B[0], &xyz_list[0][0], gauss);
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		D_scalar=alpha2*gauss->weight*Jdet;
+-		for(i=0;i<2;i++) D[i*2+i]=D_scalar;
++		for(int i=0;i<2;i++) D[i*2+i]=D_scalar;
+ 
+ 		TripleMultiply(B,2,numdof,1,
+ 					D,2,2,0,
+@@ -6469,7 +6465,6 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        dim;
+ 	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -6567,7 +6562,6 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        dim;
+ 	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -7014,8 +7008,7 @@
+ ElementMatrix* Tria::CreateKMatrixBalancethickness_CG(void){
+ 
+ 	/*Intermediaries */
+-	int        stabilization;
+-	int        i,j,dim;
++	int        stabilization,dim;
+ 	IssmDouble Jdet,vx,vy,dvxdx,dvydy,vel,h;
+ 	IssmDouble D_scalar;
+ 	IssmDouble dvx[2],dvy[2];
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16150)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16151)
+@@ -4543,8 +4543,8 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int    i,j,found=0;
+-	int    friction_type,stabilization;
++	int        i,j,found=0;
++	int        stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+ 	IssmDouble thermalconductivity,kappa;
+@@ -4812,8 +4812,8 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int    i,j,found=0;
+-	int    friction_type,stabilization;
++	int        i,found=0;
++	int        stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+ 	IssmDouble thermalconductivity,kappa;
+@@ -4843,8 +4843,8 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+ 	Input* temperature_input=NULL;
+-	if (reCast<bool,IssmDouble>(dt)) temperature_input=inputs->GetInput(TemperatureEnum); _assert_(inputs);
+-	if (stabilization==2) diameter=MinEdgeLength(xyz_list);
++	if(reCast<bool,IssmDouble>(dt)) temperature_input=inputs->GetInput(TemperatureEnum); _assert_(inputs);
++	if(stabilization==2) diameter=MinEdgeLength(xyz_list);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,3);
+@@ -5585,7 +5585,6 @@
+ 	IssmDouble mu_prime;
+ 	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble eps1[3],eps2[3];
+-	IssmDouble phi[NUMVERTICES];
+ 	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -6158,8 +6157,8 @@
+ void  Penta::Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index){
+ 	/*dJ/dalpha = ∂L/∂alpha = ∂J/∂alpha + ∂/∂alpha(KU-F)*/
+ 
+-	int              i,approximation;
+-	Tria*            tria=NULL;
++	int   approximation;
++	Tria* tria=NULL;
+ 
+ 	/*If on water, skip grad (=0): */
+ 	if(NoIceInElement())return;
+@@ -6212,8 +6211,8 @@
+ 	}
+ 
+ 	/*Now deal with ∂J/∂alpha*/
+-	int        *responses = NULL;
+-	int         num_responses,resp;
++	int *responses = NULL;
++	int num_responses,resp;
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
+ 
+@@ -8018,7 +8017,6 @@
+ ElementMatrix* Penta::CreateKMatrixStressbalanceHOViscous(void){
+ 
+ 	/*Intermediaries */
+-	int         i,j;
+ 	int         approximation;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  Jdet;
+@@ -8063,7 +8061,7 @@
+ 		newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
+ 
+ 		D_scalar=2*newviscosity*gauss->weight*Jdet;
+-		for (i=0;i<5;i++) D[i*5+i]=D_scalar;
++		for(int i=0;i<5;i++) D[i*5+i]=D_scalar;
+ 
+ 		TripleMultiply(B,5,numdof,1,
+ 					D,5,5,0,
+@@ -9126,7 +9124,6 @@
+ ElementVector* Penta::CreatePVectorStressbalanceHODrivingStress(void){
+ 
+ 	/*Intermediaries*/
+-	int         i,j;
+ 	IssmDouble  Jdet;
+ 	IssmDouble  slope[3]; //do not put 2! this goes into GetInputDerivativeValue, which addresses slope[3] also!
+ 	IssmDouble  driving_stress_baseline,thickness;
+@@ -9159,7 +9156,7 @@
+ 
+ 		driving_stress_baseline=matpar->GetRhoIce()*matpar->GetG();
+ 
+-		for(i=0;i<numnodes;i++){
++		for(int i=0;i<numnodes;i++){
+ 			pe->values[i*NDOF2+0]+= -driving_stress_baseline*slope[0]*Jdet*gauss->weight*basis[i];
+ 			pe->values[i*NDOF2+1]+= -driving_stress_baseline*slope[1]*Jdet*gauss->weight*basis[i];
+ 		}
+@@ -9371,7 +9368,6 @@
+ 
+ 	/*Intermediaries*/
+ 	int        i,j;
+-	int        approximation;
+ 	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab,viscosity;
+ 	IssmDouble forcex,forcey,forcez,diameter,FSreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -9387,7 +9383,7 @@
+ 	IssmDouble mu;
+ 	IssmDouble dnodalbasis[6][6][3];
+ 	IssmDouble SW[6][4][4];
+-	int p,q,ii;
++	int p,ii;
+ 	int c=3; //index of pressure
+ 
+ 	/*Retrieve all inputs and parameters*/
+@@ -9462,7 +9458,7 @@
+ ElementVector* Penta::CreatePVectorStressbalanceFSViscous(void){
+ 
+ 	/*Intermediaries*/
+-	int        i,j;
++	int        i;
+ 	int        approximation;
+ 	IssmDouble Jdet,gravity,rho_ice;
+ 	IssmDouble forcex,forcey,forcez;
+@@ -9865,7 +9861,7 @@
+ ElementMatrix* Penta::CreateJacobianStressbalanceFS(void){
+ 
+ 	/*Intermediaries */
+-	int        i,j,approximation;
++	int        i,j;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdet;
+ 	IssmDouble eps1dotdphii,eps1dotdphij;
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16150)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16151)
+@@ -266,12 +266,11 @@
+ /*FUNCTION TransientInput::GetInputUpToCurrentTimeAverages{{{*/
+ void TransientInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){
+ 
+-	int i;
+-	IssmDouble* times=NULL;
+-	IssmDouble* values=NULL;
+-	int numsteps;
+-	int count;
+-	bool iscurrenttime_included=false;
++	int         i;
++	IssmDouble *times  = NULL;
++	IssmDouble *values = NULL;
++	int         numsteps;
++	bool        iscurrenttime_included = false;
+ 
+ 	/*Figure out how many time steps we are going to return: */
+ 	numsteps=0;
Index: issm/oecreview/Archive/16133-16554/ISSM-16151-16152.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16151-16152.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16151-16152.diff	(revision 16556)
@@ -0,0 +1,257 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16152)
+@@ -121,17 +121,17 @@
+ 			  _error_("imaxnbv != nbv");
+ 		  }
+ 		  for (i=0;i<Tho.nbt;i++)
+-			if(  reft[i] >=0 && flag[i]) 
+-			  {
++			if(reft[i] >=0 && flag[i]){
+ 				const Triangle & t = Tho.triangles[i];
+ 				int i0 = Tho.GetId(t[0]);
+ 				int i1 = Tho.GetId(t[1]);
+ 				int i2 = Tho.GetId(t[2]);
+-				if (i0<0 || i1<0 || i2<0){
++				if(i0<0 || i1<0 || i2<0){
+ 					delete [] refv;
+ 					_error_("i0<0 || i1<0 || i2< 0");
+ 				}
+-				if (i0>=Tho.nbv || i1>=Tho.nbv || i2>=Tho.nbv){
++				if(i0>=Tho.nbv || i1>=Tho.nbv || i2>=Tho.nbv){
++					delete [] refv;
+ 					_error_("i0>=Tho.nbv || i1>=Tho.nbv || i2>=Tho.nbv");
+ 				}
+ 				triangles[nbt] = Triangle(this,kk[i0],kk[i1],kk[i2]);
+@@ -4137,9 +4137,9 @@
+ 	for(i=0;i<nbv;i++)
+ 	 first_np_or_next_t1[i]=-1;
+ 	kk=0;
+-	while (Head0>=0&& kk++<100) {
++	while(Head0>=0&& kk++<100){
+ 		kch=0;
+-		for (i=Head0;i>=0;i=first_np_or_next_t0[ip=i],first_np_or_next_t0[ip]=-1) {
++		for(i=Head0;i>=0;i=first_np_or_next_t0[ip=i],first_np_or_next_t0[ip]=-1) {
+ 			//  pour tous les triangles autour du sommet s
+ 			register Triangle* t= vertices[i].t;
+ 			if (!t){
+Index: ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 16152)
+@@ -45,7 +45,7 @@
+ 
+ 	int     i,iret=0;
+ 	double  delta,slat;
+-	double  cde,re,ex2,ex;
++	double  re,ex2,ex;
+ 	double  latitude,longitude;
+ 	double  T,rho,sl,tc,mc;
+ 
+@@ -54,8 +54,6 @@
+ 	delta = central_meridian;
+ 	slat  = standard_parallel;
+ 
+-	/*  Conversion constant from degrees to radians  */
+-	cde = 57.29577951;
+ 	/*  Radius of the earth in meters  */
+ 	re  = 6378.273*1.e3;
+ 	/*  Eccentricity of the Hughes ellipsoid squared  */
+Index: ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 16152)
+@@ -47,7 +47,7 @@
+ 
+ 	int     i,iret=0;
+ 	double  delta,slat;
+-	double  cde,re,ex2,ex;
++	double  re,ex2,ex;
+ 	double  sl,rho,cm,T,chi;
+ 
+ 	if((sgn!=1) && (sgn!=-1)) _error_("Sign should be either +1 or -1.\n");
+@@ -55,8 +55,6 @@
+ 	delta = central_meridian;
+ 	slat  = standard_parallel;
+ 
+-	/*  Conversion constant from degrees to radians  */
+-	cde  = 57.29577951;
+ 	/*  Radius of the earth in meters  */
+ 	re   = 6378.273e+3;
+ 	/*  Eccentricity of the Hughes ellipsoid squared  */
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16152)
+@@ -14,17 +14,19 @@
+ 
+ ErrorException::ErrorException(const string &what_arg){/*{{{*/
+ 
+-	what_str=what_arg;
+-	file_name="";
+-	function_name="";
+-	file_line=0;
++	what_str      = what_arg;
++	file_name     = "";
++	function_name = "";
++	file_line     = 0;
++
+ }/*}}}*/
+ ErrorException::ErrorException(const string& what_file, const string& what_function,int what_line, const string& what_arg){/*{{{*/
+ 
+-	what_str=what_arg;
+-	file_name=what_file;
+-	function_name=what_function;
+-	file_line=what_line;
++	what_str      = what_arg;
++	file_name     = what_file;
++	function_name = what_function;
++	file_line     = what_line;
++
+ }/*}}}*/
+ ErrorException::~ErrorException() throw(){/*{{{*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16151)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16152)
+@@ -82,7 +82,7 @@
+ 
+ 	public:
+ 	ErrorException(const string &what_arg); //for windows
+-	ErrorException(const string&  what_file,const string& what_function,int what_line,const string& what_arg);//UNIX
++	ErrorException(const string &what_file,const string& what_function,int what_line,const string& what_arg);//UNIX
+ 	~ErrorException() throw();
+ 	virtual const char *what() const throw();
+ 	void Report() const;
+Index: ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 16152)
+@@ -44,28 +44,22 @@
+ 	static IssmPDouble* wgtp[MAX_LINE_GAUS_PTS]={wgt1 ,wgt2 ,wgt3 ,wgt4 };
+ 	static IssmPDouble* xip [MAX_LINE_GAUS_PTS]={xi1  ,xi2  ,xi3  ,xi4  };
+ 
+-	static int np[MAX_LINE_GAUS_PTS]={sizeof(wgt1 )/sizeof(IssmPDouble),
+-		sizeof(wgt2 )/sizeof(IssmPDouble),
+-		sizeof(wgt3 )/sizeof(IssmPDouble),
+-		sizeof(wgt4 )/sizeof(IssmPDouble)};
+-
+-	//	_printf0_("Gauss-Legendre recurrence coefficients ngaus=" << ngaus << "\n");
+ 	*pxgaus =xNew<IssmPDouble>(ngaus);
+ 	*pxwgt  =xNew<IssmPDouble>(ngaus);
+ 
+ 	/*  check to see if Gauss points need to be calculated  */
+-	if (ngaus <= MAX_LINE_GAUS_PTS) {
++	if(ngaus <= MAX_LINE_GAUS_PTS) {
+ 
+ 		/*  copy the points from the static arrays (noting that the pointers
+ 			 could be returned directly, but then the calling function would
+ 			 have to know to not free them)  */
+ 
+-		for (i=0; i<ngaus; i++) {
++		for(i=0; i<ngaus; i++) {
+ 			(*pxgaus)[i]=xip [ngaus-1][i];
+ 			(*pxwgt )[i]=wgtp[ngaus-1][i];
+ 		}
+ 	}
+-	else {
++	else{
+ 
+ 		/*  calculate the Gauss points using recurrence relations  */
+ 		alpha=xNew<IssmPDouble>(ngaus);
+@@ -1258,9 +1252,6 @@
+ 	static IssmPDouble l13[]={
+ 		0.250000000000000, 0.500000000000000, 0.166666666666667, 
+ 		0.166666666666667, 0.166666666666667};
+-	static IssmPDouble l23[]={
+-		0.250000000000000, 0.166666666666667, 0.500000000000000, 
+-		0.166666666666667, 0.166666666666667};
+ 	static IssmPDouble l33[]={
+ 		0.250000000000000, 0.166666666666667, 0.166666666666667, 
+ 		0.500000000000000, 0.166666666666667};
+@@ -1510,13 +1501,6 @@
+ 	static IssmPDouble* wgtp[MAX_LINE_GLOB_PTS]={wgt1 ,wgt2 ,wgt3 ,wgt4 ,wgt5 };
+ 	static IssmPDouble* xip [MAX_LINE_GLOB_PTS]={xi1  ,xi2  ,xi3  ,xi4  ,xi5  };
+ 
+-	static int np[MAX_LINE_GLOB_PTS]={sizeof(wgt1 )/sizeof(IssmPDouble),
+-		sizeof(wgt2 )/sizeof(IssmPDouble),
+-		sizeof(wgt3 )/sizeof(IssmPDouble),
+-		sizeof(wgt4 )/sizeof(IssmPDouble),
+-		sizeof(wgt5 )/sizeof(IssmPDouble)};
+-
+-	//	_printf0_("Gauss-Lobatto recurrence coefficients ngaus=" << ngaus << "\n");
+ 	*pxgaus =xNew<IssmPDouble>(ngaus);
+ 	*pxwgt  =xNew<IssmPDouble>(ngaus);
+ 
+Index: ../trunk-jpl/src/c/shared/Bamg/HeapSort.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/HeapSort.h	(revision 16151)
++++ ../trunk-jpl/src/c/shared/Bamg/HeapSort.h	(revision 16152)
+@@ -84,6 +84,9 @@
+ 			else{c[i]=crit;order[i]=pos;break;}
+ 		}
+ 	}
++
++	/*Make cppcheck happy*/
++	*porder=order;
+ }/*}}}*/
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16151)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16152)
+@@ -109,7 +109,6 @@
+ 
+ 	/*Variables*/
+ 	ISSM_MPI_Comm  comm;
+-	int            my_rank;
+ 	int            num_procs;
+ 	int            i,j;
+ 	int            nnz,local_nnz;
+@@ -124,7 +123,6 @@
+ 	int           *displs     = NULL;
+ 
+ 	/*Communicator info */
+-	my_rank   = IssmComm::GetRank();
+ 	num_procs = IssmComm::GetSize();
+ 	comm      = IssmComm::GetComm();
+ 
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16151)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16152)
+@@ -503,8 +503,6 @@
+ 		/*Solve{{{*/
+ 		IssmAbsVec<IssmDouble>* Solve(IssmAbsVec<IssmDouble>* pfin, Parameters* parameters){
+ 
+-			int i;
+-
+ 			/*output: */
+ 			IssmMpiVec<IssmDouble>* uf=NULL;
+ 			IssmMpiVec<IssmDouble>* pf=NULL;
+@@ -522,8 +520,7 @@
+ 					_error_("IssmMpiDenseMat solver requires MUMPS solver");
+ 					#endif
+ 					return (IssmAbsVec<IssmDouble>*)uf;
+-					break;
+-								}
++									 }
+ 				case GslEnum: {
+ 
+ 					IssmDouble* x=NULL;
+@@ -534,11 +531,10 @@
+ 					uf=new IssmMpiVec<IssmDouble>(x,this->N); xDelete(x);
+ 
+ 					return (IssmAbsVec<IssmDouble>*)uf;
+-					break;
+ 					#else
+ 					_error_("GSL support not compiled in!");
+ 					#endif
+-							  }
++								  }
+ 				default:
+ 					_error_("solver type not supported yet!");
+ 			}
Index: issm/oecreview/Archive/16133-16554/ISSM-16152-16153.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16152-16153.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16152-16153.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16152)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16153)
+@@ -1787,6 +1787,7 @@
+ 		else{
+ 			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
++		break;
+ 
+ 	case VertexSIdEnum: 
+ 		values = xNew<IssmDouble>(NUMVERTICES);
+@@ -1800,6 +1801,7 @@
+ 		else{
+ 			this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
++		break;
+ 
+ 	case NodesEnum:
+ 
+@@ -1813,6 +1815,7 @@
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
+ 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
++		break;
+ 
+ 	case NodeSIdEnum:
+ 
+@@ -1825,6 +1828,7 @@
+ 			if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in vector");
+ 		}
+ 		this->inputs->AddInput(new TriaInput(name,values,this->element_type));
++		break;
+ 
+ 	default:
+ 		_error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
Index: issm/oecreview/Archive/16133-16554/ISSM-16153-16154.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16153-16154.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16153-16154.diff	(revision 16556)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 16153)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 16154)
+@@ -18,7 +18,7 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 16153)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 16154)
+@@ -16,7 +16,7 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 16153)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 16154)
+@@ -16,12 +16,12 @@
+ md.materials=matdamageice()
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.rheology_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyDbar']
++md.inversion.control_parameters=['MaterialsDamageDbar']
+ md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+@@ -42,7 +42,7 @@
+ field_values=[\
+    md.results.StressbalanceSolution.Gradient1,\
+    md.results.StressbalanceSolution.J,\
+-   md.results.StressbalanceSolution.MaterialsRheologyDbar,\
++   md.results.StressbalanceSolution.MaterialsDamageDbar,\
+    md.results.StressbalanceSolution.Pressure,\
+    md.results.StressbalanceSolution.Vel,\
+    md.results.StressbalanceSolution.Vx,\
Index: issm/oecreview/Archive/16133-16554/ISSM-16154-16155.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16154-16155.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16154-16155.diff	(revision 16556)
@@ -0,0 +1,164 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16154)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16155)
+@@ -8,53 +8,71 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
++#include <cstring>
+ #include "./exceptions.h"
+ #include "../io/Print/Print.h"
+ #include "../io/Comm/IssmComm.h"
+ 
+-ErrorException::ErrorException(const string &what_arg){/*{{{*/
++ErrorException::ErrorException(const string & what_arg){/*{{{*/
+ 
+-	what_str      = what_arg;
+-	file_name     = "";
+-	function_name = "";
++	int len;
++	len           = strlen(what_arg.c_str())+1;
++	what_str      = new char[len];
++	memcpy(what_str,what_arg.c_str(),len);
++
++	file_name     = NULL;
++	function_name = NULL;
+ 	file_line     = 0;
+ 
+ }/*}}}*/
+ ErrorException::ErrorException(const string& what_file, const string& what_function,int what_line, const string& what_arg){/*{{{*/
+ 
+-	what_str      = what_arg;
+-	file_name     = what_file;
+-	function_name = what_function;
+-	file_line     = what_line;
++	int len;
+ 
++	len      = strlen(what_arg.c_str())+1;
++	what_str = new char[len];
++	memcpy(what_str,what_arg.c_str(),len);
++
++	len       = strlen(what_file.c_str())+1;
++	file_name = new char[len];
++	memcpy(file_name,what_file.c_str(),len);
++
++	len           = strlen(what_function.c_str())+1;
++	function_name = new char[len];
++	memcpy(function_name,what_function.c_str(),len);
++
++	file_line= what_line;
++
+ }/*}}}*/
+ ErrorException::~ErrorException() throw(){/*{{{*/
++	delete [] what_str;
++	delete [] file_name;
++	delete [] function_name;
+ }/*}}}*/
+ const char* ErrorException::what() const throw(){/*{{{*/
+-	return what_str.c_str();
++	return what_str;
+ }/*}}}*/
+ void ErrorException::Report() const{/*{{{*/
+ 
+-	int my_rank;
+-	int num_procs;
++	/*WINDOWS*/
++	if(!function_name || file_line==0){
++		_printf_("Error message: " << what());
++		return;
++	}
+ 
+ 	/*recover my_rank and num_procs:*/
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
++	int my_rank   = IssmComm::GetRank();
++	int num_procs = IssmComm::GetSize();
+ 
+-	if (function_name=="" || file_line==0){ //WINDOWS
+-		_printf_("Error message: " << what());
++	if(num_procs==1){
++		_printf_("\n??? Error in ==> " << file_name << ":" << file_line << "\n");
++		_printf_(function_name << " error message: " << what() << "\n\n");
+ 	}
+ 	else{
+-		if(num_procs==1){
+-			_printf_("\n??? Error in ==> " << file_name.c_str() << ":" << file_line << "\n");
+-			_printf_(function_name.c_str() << " error message: " << what() << "\n\n");
+-		}
+-		else{
+-			_printf_("\n[" << my_rank<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line << "\n");
+-			_printf_(  "[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n\n");
+-		}
++		_printf_("\n[" << my_rank<< "] ??? Error using ==> " << file_name << ":" << file_line << "\n");
++		_printf_(  "[" << my_rank << "] " << function_name << " error message: " << what() << "\n\n");
+ 	}
++
+ 	return;
+ }/*}}}*/
+ const char* ErrorException::MatlabReport() const{/*{{{*/
+@@ -62,14 +80,16 @@
+ 	/*Output*/
+ 	std::ostringstream buffer;
+ 
+-	if (this->file_line==0){ //WINDOWS
+-		 buffer << " error message: " << (this->what_str).c_str();
++	/*WINDOWS*/
++	if(!function_name || file_line==0){ 
++		buffer << " error message: " << this->what_str;
++		const string buffer2 = buffer.str();
++		return buffer2.c_str();
+ 	}
+-	else{
+-		buffer << "\nError in ==> " << (this->file_name).c_str() << ":" << file_line << "\n";
+-		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
+-	}
+ 
++	buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
++	buffer << this->function_name << " error message: " << this->what_str;
++
+ 	const string buffer2 = buffer.str();
+ 	return buffer2.c_str();
+ }/*}}}*/
+@@ -78,14 +98,16 @@
+ 	/*Output*/
+ 	std::ostringstream buffer;
+ 
+-	if (this->file_line==0){ //WINDOWS
+-		buffer << " error message: " << (this->what_str).c_str();
++	/*WINDOWS*/
++	if(!function_name || file_line==0){ 
++		buffer << " error message: " << this->what_str;
++		const string buffer2 = buffer.str();
++		return buffer2.c_str();
+ 	}
+-	else{
+-		buffer << "\nError in ==> " << (this->file_name).c_str() << ":" << file_line << "\n";
+-		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
+-	}
+ 
++	buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
++	buffer << this->function_name << " error message: " << this->what_str;
++
+ 	const string buffer2 = buffer.str();
+ 	return buffer2.c_str();
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16154)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16155)
+@@ -75,10 +75,10 @@
+ /*ISSM exception class: */
+ class ErrorException: public exception { /*{{{*/
+ 
+-	string   what_str;
+-	string   function_name;
+-	string   file_name;
+-	int      file_line;
++	char* what_str;
++	char* function_name;
++	char* file_name;
++	int   file_line;
+ 
+ 	public:
+ 	ErrorException(const string &what_arg); //for windows
Index: issm/oecreview/Archive/16133-16554/ISSM-16155-16156.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16155-16156.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16155-16156.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16155)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16156)
+@@ -2186,10 +2186,12 @@
+ 
+ 				// correction of second derivative
+ 				// by a laplacien
+-				double* d2[3] = {dxdx, dxdy, dydy};
+ 				double* dd;
+ 				for (int xy = 0;xy<3;xy++) {
+-					dd = d2[xy];
++					if      (xy==0) dd=dxdx;
++					else if (xy==1) dd=dxdy;
++					else if (xy==2) dd=dydy;
++					else    _error_("not supported yet");
+ 					// do leat 2 iteration for boundary problem
+ 					for (int ijacobi=0;ijacobi<Max(NbJacobi,2);ijacobi++){
+ 						for (i=0;i<nbt;i++) 
Index: issm/oecreview/Archive/16133-16554/ISSM-16156-16157.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16156-16157.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16156-16157.diff	(revision 16556)
@@ -0,0 +1,469 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16156)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16157)
+@@ -155,6 +155,12 @@
+ 	MaterialsRheologyZbarEnum,
+ 	MaterialsDamageDEnum,
+ 	MaterialsDamageDbarEnum,
++	MaterialsDamageLawEnum,
++	MaterialsDamageC1Enum,
++	MaterialsDamageC2Enum,
++	MaterialsDamageC3Enum,
++	MaterialsDamageC4Enum,
++	MaterialsDamageStressThresholdEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16156)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16157)
+@@ -163,6 +163,12 @@
+ 		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
+ 		case MaterialsDamageDEnum : return "MaterialsDamageD";
+ 		case MaterialsDamageDbarEnum : return "MaterialsDamageDbar";
++		case MaterialsDamageLawEnum : return "MaterialsDamageLaw";
++		case MaterialsDamageC1Enum : return "MaterialsDamageC1";
++		case MaterialsDamageC2Enum : return "MaterialsDamageC2";
++		case MaterialsDamageC3Enum : return "MaterialsDamageC3";
++		case MaterialsDamageC4Enum : return "MaterialsDamageC4";
++		case MaterialsDamageStressThresholdEnum : return "MaterialsDamageStressThreshold";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16156)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16157)
+@@ -166,6 +166,12 @@
+ 	      else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum;
+ 	      else if (strcmp(name,"MaterialsDamageD")==0) return MaterialsDamageDEnum;
+ 	      else if (strcmp(name,"MaterialsDamageDbar")==0) return MaterialsDamageDbarEnum;
++	      else if (strcmp(name,"MaterialsDamageLaw")==0) return MaterialsDamageLawEnum;
++	      else if (strcmp(name,"MaterialsDamageC1")==0) return MaterialsDamageC1Enum;
++	      else if (strcmp(name,"MaterialsDamageC2")==0) return MaterialsDamageC2Enum;
++	      else if (strcmp(name,"MaterialsDamageC3")==0) return MaterialsDamageC3Enum;
++	      else if (strcmp(name,"MaterialsDamageC4")==0) return MaterialsDamageC4Enum;
++	      else if (strcmp(name,"MaterialsDamageStressThreshold")==0) return MaterialsDamageStressThresholdEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+@@ -253,16 +259,16 @@
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+-	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
++	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
+ 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
+ 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+@@ -376,16 +382,16 @@
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+-	      else if (strcmp(name,"Param")==0) return ParamEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+ 	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
++	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
+ 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum;
+@@ -499,16 +505,16 @@
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"P1DG")==0) return P1DGEnum;
++	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16156)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16157)
+@@ -26,8 +26,18 @@
+ 		self.thermal_exchange_velocity  = 0.
+ 		self.rheology_B   = float('NaN')
+ 		self.rheology_n   = float('NaN')
++		self.rheology_law = ''
++		
++		#damage: 
+ 		self.damage_D   = float('NaN')
+-		self.rheology_law = ''
++		self.damage_law   = ''
++		
++		#parameters for law 'initial': 
++		self.damage_c1                  = float('NaN')
++		self.damage_c2                  = float('NaN')
++		self.damage_c3                  = float('NaN')
++		self.damage_c4                  = float('NaN')
++		self.damage_stress_threshold    = float('NaN')
+ 
+ 		#gia: 
+ 		self.lithosphere_shear_modulus  = 0.
+@@ -57,13 +67,20 @@
+ 		s+="%s\n" % fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
+ 		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
+-		s+="%s\n" % fielddisplay(self,"damage_D","damage tensor (scalar for now)")
+ 		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]")
+ 		s+="%s\n" % fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]")
+ 		s+="%s\n" % fielddisplay(self,"mantle_shear_modulus","Mantle shear modulus [Pa]")
+ 		s+="%s\n" % fielddisplay(self,"mantle_density","Mantle density [g/cm^-3]")
++		s+="%s\n" % fielddisplay(self,"damage_D","damage tensor (scalar for now)")
+ 
++		if (obj.damage_law=='initial'):
++			s+="%s\n" % fielddisplay(self,"damage_c1","damage parameter 1 ")
++			s+="%s\n" % fielddisplay(self,"damage_c2","damage parameter 2 ")
++			s+="%s\n" % fielddisplay(self,"damage_c3","damage parameter 3 ")
++			s+="%s\n" % fielddisplay(self,"damage_c4","damage parameter 4 ")
++			s+="%s\n" % fielddisplay(self,"damage_stress_threshold","damage stress threshold [Pa]")
++
+ 		return s
+ 	# }}}
+ 	def setdefaultparameters(self):    # {{{
+@@ -104,6 +121,14 @@
+ 		#Rheology law: what is the temperature dependence of B with T
+ 		#available: none, paterson and arrhenius
+ 		self.rheology_law='Paterson'
++		
++		#damage parameters: 
++		self.damage_law='initial'
++		self.damage_stress_threshold=0
++		self.damage_c1=0
++		self.damage_c2=0
++		self.damage_c3=0
++		self.damage_c4=0
+ 
+ 		# GIA:
+ 		self.lithosphere_shear_modulus  = 6.7*10**10;  # (Pa)
+@@ -118,12 +143,20 @@
+ 		md = checkfield(md,'materials.mu_water','>',0)
+ 		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
+-		md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+ 		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.mantle_shear_modulus','>',0,'numel',[1]);
+ 		md = checkfield(md,'materials.mantle_density','>',0,'numel',[1]);
++		
++		md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'materials.damage_law','values',['initial'])
++		if self.damage_law == 'initial':
++			md = checkfield(md,'materials.damage_c1','>=',0)
++			md = checkfield(md,'materials.damage_c2','>=',0)
++			md = checkfield(md,'materials.damage_c3','>=',0)
++			md = checkfield(md,'materials.damage_c4','>=',0)
++			md = checkfield(md,'materials.damage_stress_threshold','>=',0)
+ 
+ 		return md
+ 	# }}}
+@@ -142,11 +175,19 @@
+ 		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+ 
+ 		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+ 		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
+ 		WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+ 		WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
++		
++		WriteData(fid,'object',self,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','materials','fieldname','damage_law','format','String')
++		if self.damage_law=='initial':
++			WriteData(fid,'object',self,'class','materials','fieldname','damage_c1','format','Double')
++			WriteData(fid,'object',self,'class','materials','fieldname','damage_c2','format','Double')
++			WriteData(fid,'object',self,'class','materials','fieldname','damage_c3','format','Double')
++			WriteData(fid,'object',self,'class','materials','fieldname','damage_c4','format','Double')
++			WriteData(fid,'object',self,'class','materials','fieldname','damage_stress_threshold','format','Double')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16156)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16157)
+@@ -4,7 +4,8 @@
+ %      matdamageice=matdamageice();
+ 
+ classdef matdamageice
+-	properties (SetAccess=public) 
++	properties (SetAccess=public)  
++	% {{{
+ 		rho_ice                    = 0.;
+ 		rho_water                  = 0.;
+ 		rho_freshwater             = 0.;
+@@ -16,17 +17,20 @@
+ 		beta                       = 0.;
+ 		mixed_layer_capacity       = 0.;
+ 		thermal_exchange_velocity  = 0.;
+-		rheology_B   = NaN;
+-		rheology_n   = NaN;
+-		damage_D = NaN;
+-		%damage_D
+-		%damage_stress_threshold
+-		%damage_c1
+-		%damage_c2
+-		%damage_c3
+-		%damage_c4
+-
++		rheology_B                 = NaN;
++		rheology_n                 = NaN;
+ 		rheology_law = '';
++		
++		%damage 
++		damage_D                   = NaN;
++		damage_law                 = '';
++		
++		%parameters for law 'initial': 
++		damage_stress_threshold    = NaN;
++		damage_c1                  = NaN;
++		damage_c2                  = NaN;
++		damage_c3                  = NaN;
++		damage_c4                  = NaN;
+ 
+ 		%gia: 
+ 		lithosphere_shear_modulus  = 0.;
+@@ -34,7 +38,7 @@
+ 		mantle_shear_modulus       = 0.;
+ 		mantle_density             = 0.;
+ 
+-	end
++	end % }}}
+ 	methods
+ 		function obj = matdamageice(varargin) % {{{
+ 			switch nargin
+@@ -93,6 +97,14 @@
+ 			%available: none, paterson and arrhenius
+ 			obj.rheology_law='Paterson';
+ 
++			%damage parameters: 
++			obj.damage_law='initial';
++			obj.damage_stress_threshold=0;
++			obj.damage_c1=0;
++			obj.damage_c2=0;
++			obj.damage_c3=0;
++			obj.damage_c4=0;
++
+ 			%GIA: 
+ 			obj.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
+ 			obj.lithosphere_density        = 3.32;       % (g/cm^-3)
+@@ -107,8 +119,17 @@
+ 			md = checkfield(md,'materials.mu_water','>',0);
+ 			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
++			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
++			
+ 			md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
++			md = checkfield(md,'materials.damage_law','values',{'initial'});
++			if strcmpi(obj.damage_law,'initial'),
++				md = checkfield(md,'materials.damage_c1','>=',0);
++				md = checkfield(md,'materials.damage_c2','>=',0);
++				md = checkfield(md,'materials.damage_c3','>=',0);
++				md = checkfield(md,'materials.damage_c4','>=',0);
++				md = checkfield(md,'materials.damage_stress_threshold','>=',0);
++			end
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+ 				md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',1);
+@@ -134,12 +155,20 @@
+ 			fielddisplay(obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+ 			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+ 			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+-			fielddisplay(obj,'damage_D','damage tensor (scalar)');
+ 			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+ 			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+ 			fielddisplay(obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');
+ 			fielddisplay(obj,'mantle_density','Mantle density [g/cm^-3]');
++			fielddisplay(obj,'damage_D','damage tensor (scalar)');
++			fielddisplay(obj,'damage_law','damage law (string) from {''initial''}');
++			if strcmpi(obj.damage_law),
++				fielddisplay(obj,'damage_c1','damage parameter 1');
++				fielddisplay(obj,'damage_c2','damage parameter 2');
++				fielddisplay(obj,'damage_c3','damage parameter 3');
++				fielddisplay(obj,'damage_c4','damage parameter 4');
++				fielddisplay(obj,'damage_stress_threshold','damage stress threshold [Pa]');
++			end
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+@@ -157,13 +186,23 @@
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
+ 
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
++			
++			%damage: 
++			WriteData(fid,'object',obj,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','materials','fieldname','damage_law','format','String');
++			if strcmpi(obj.damage_law,'initial'),
++				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c1','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c2','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c3','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c4','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','damage_stress_threshold','format','Double');
++			end
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageLawEnum()
++%MATERIALSDAMAGELAWENUM - Enum of MaterialsDamageLaw
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageLawEnum()
++
++macro=StringToEnum('MaterialsDamageLaw');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageC1Enum()
++%MATERIALSDAMAGEC1ENUM - Enum of MaterialsDamageC1
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageC1Enum()
++
++macro=StringToEnum('MaterialsDamageC1');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageC2Enum()
++%MATERIALSDAMAGEC2ENUM - Enum of MaterialsDamageC2
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageC2Enum()
++
++macro=StringToEnum('MaterialsDamageC2');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageC3Enum()
++%MATERIALSDAMAGEC3ENUM - Enum of MaterialsDamageC3
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageC3Enum()
++
++macro=StringToEnum('MaterialsDamageC3');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageC4Enum()
++%MATERIALSDAMAGEC4ENUM - Enum of MaterialsDamageC4
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageC4Enum()
++
++macro=StringToEnum('MaterialsDamageC4');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m	(revision 16157)
+@@ -0,0 +1,11 @@
++function macro=MaterialsDamageStressThresholdEnum()
++%MATERIALSDAMAGESTRESSTHRESHOLDENUM - Enum of MaterialsDamageStressThreshold
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MaterialsDamageStressThresholdEnum()
++
++macro=StringToEnum('MaterialsDamageStressThreshold');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16156)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16157)
+@@ -155,6 +155,12 @@
+ def MaterialsRheologyZbarEnum(): return StringToEnum("MaterialsRheologyZbar")[0]
+ def MaterialsDamageDEnum(): return StringToEnum("MaterialsDamageD")[0]
+ def MaterialsDamageDbarEnum(): return StringToEnum("MaterialsDamageDbar")[0]
++def MaterialsDamageLawEnum(): return StringToEnum("MaterialsDamageLaw")[0]
++def MaterialsDamageC1Enum(): return StringToEnum("MaterialsDamageC1")[0]
++def MaterialsDamageC2Enum(): return StringToEnum("MaterialsDamageC2")[0]
++def MaterialsDamageC3Enum(): return StringToEnum("MaterialsDamageC3")[0]
++def MaterialsDamageC4Enum(): return StringToEnum("MaterialsDamageC4")[0]
++def MaterialsDamageStressThresholdEnum(): return StringToEnum("MaterialsDamageStressThreshold")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16157-16158.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16157-16158.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16157-16158.diff	(revision 16556)
@@ -0,0 +1,330 @@
+Index: ../trunk-jpl/src/c/analyses/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16158)
+@@ -10,11 +10,10 @@
+ #include "../solutionsequences/solutionsequences.h"
+ void gia_core(FemModel* femmodel){
+ 
+-	int i;
+-	Vector<IssmDouble>*  wg  = NULL;
+-	Vector<IssmDouble>*  dwdtg  = NULL;
+-	IssmDouble*          x   = NULL;
+-	IssmDouble*          y   = NULL;
++	Vector<IssmDouble> *wg    = NULL;
++	Vector<IssmDouble> *dwdtg = NULL;
++	IssmDouble          *x    = NULL;
++	IssmDouble          *y    = NULL;
+ 
+ 	/*parameters: */
+ 	bool save_results;
+Index: ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16158)
+@@ -9,8 +9,7 @@
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type){
+ 
+ 	/*variables: */
+-	Vector<IssmDouble>*    yg    = NULL;
+-	Nodes *nodes = NULL;
++	Vector<IssmDouble>* yg = NULL;
+ 
+ 	if(VerboseSolution()) _printf0_("   updating boundary conditions...\n");
+ 
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16158)
+@@ -77,7 +77,7 @@
+ 		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
+ 	}
+ 
+-	if (dim==3 & (isSIA || isSSA || isL1L2 || isHO)){
++	if (dim==3 && (isSIA || isSSA || isL1L2 || isHO)){
+ 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+ 		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+Index: ../trunk-jpl/src/c/analyses/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16158)
+@@ -160,9 +160,7 @@
+ 	char              *dakota_input_file  = NULL;
+ 	char              *dakota_output_file = NULL;
+ 	char              *dakota_error_file  = NULL;
+-	int                status             = 0;
+ 	Dakota::ModelLIter ml_iter;
+-	Parameters        *parameters         = NULL;
+ 
+ 	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
+ 	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16158)
+@@ -28,7 +28,6 @@
+ 	int                 nsteps,maxiter;
+ 	AppCtx              user;
+ 	TaoSolver           tao = 0;
+-	IssmDouble         *dummy        = NULL;
+ 	int                *control_list = NULL;
+ 	Vector<IssmDouble> *X            = NULL;
+ 	Vector<IssmDouble> *G            = NULL;
+@@ -162,7 +161,6 @@
+ 	IssmDouble    f,gnorm,cnorm,xdiff;
+ 	AppCtx   *user      = (AppCtx *)userCtx;
+ 	FemModel *femmodel  = user->femmodel;
+-	Element  *element   = NULL;
+ 	int      *responses = NULL;
+ 
+ 	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 16158)
+@@ -47,7 +47,6 @@
+ 		R2 x,y,xy;
+ 
+ 		SegInterpolation* SegI=lSegsI;
+-		SegI=lSegsI;
+ 		lSegsI[NbSeg].last=Size;
+ 		int EndSeg=Size;
+ 
+@@ -224,10 +223,9 @@
+ 
+ 		Triangle *tbegin, *t;
+ 
+-		long int verbose=2;
+ 		Icoor2 deta[3], deti,detj;
+ 		double ba[3];
+-		int nbt =0,ifirst=-1,ilast;
++		int ifirst=-1,ilast;
+ 		int i0,i1,i2;
+ 		int ocut,i,j,k=-1;
+ 		//  int OnAVertices =0;
+@@ -287,7 +285,6 @@
+ 				iedge= tadj; 
+ 				if (t == tbegin) { // 
+ 					double ba,bb;
+-					long int verbose=2;
+ 					AdjacentTriangle edge=CloseBoundaryEdge(a,t,ba,bb);
+ 					BamgVertex & v0 = *edge.EdgeVertex(0), & v1 = *edge.EdgeVertex(1);
+ 					NewItem(A,Metric(ba,v0,bb,v1));
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16158)
+@@ -61,8 +61,6 @@
+ 	void Geometry::ReadGeometry(BamgGeom* bamggeom,BamgOpts* bamgopts){
+ 
+ 		int verbose;
+-		nbv=0;
+-		nbe=0;
+ 		nbcurves=0;
+ 
+ 		double Hmin = HUGE_VAL;// the infinie value 
+@@ -285,7 +283,6 @@
+ 		int nbreq=0;
+ 		int nbreqv=0;
+ 		int nbtan=0;
+-		int nbcracked=0;
+ 		int i,count;
+ 
+ 		/*Get options*/
+@@ -377,7 +374,6 @@
+ 		bamggeom->TangentAtEdgesSize[1]=4;
+ 		if (nbtan){
+ 			bamggeom->TangentAtEdges=xNew<double>(4*nbtan);
+-			count=0;
+ 			for (i=0;i<nbe;i++){
+ 				if (edges[i].TgA() && edges[i][0].Corner()){
+ 					bamggeom->TangentAtEdges[4*i+0]=i+1; //back to Matlab indexing
+@@ -391,7 +387,6 @@
+ 					bamggeom->TangentAtEdges[4*i+2]=edges[i].tg[1].x;
+ 					bamggeom->TangentAtEdges[4*i+3]=edges[i].tg[1].y;
+ 				}
+-				count=count+1;
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16158)
+@@ -534,7 +534,6 @@
+ 		Icoor1 ii[  MaxDepth ], jj [ MaxDepth];
+ 		register int l=0; // level
+ 		register BamgQuadtreeBox * b;
+-		Icoor1 h=MaxISize;
+ 		Icoor1 hb =  MaxISize;
+ 		Icoor1 i0=0,j0=0;
+ 
+@@ -548,7 +547,6 @@
+ 		pi[0]=root->nbitems>0 ?(int)  root->nbitems : 4  ;
+ 		ii[0]=i0;
+ 		jj[0]=j0;
+-		h=hb;
+ 		do {    
+ 			b= pb[l];
+ 			while (pi[l]--){ 	      
+@@ -559,8 +557,7 @@
+ 					if ( ABS(i-i2.x) <hx && ABS(j-i2.y) <hy )
+ 					  {
+ 						R2 XY(X,b->v[k]->r);
+-						double dd;
+-						if( (dd= LengthInterpole(Mx(XY), b->v[k]->m(XY)))  < seuil ){
++						if(LengthInterpole(Mx(XY), b->v[k]->m(XY)) < seuil){
+ 							return b->v[k]; 
+ 						}
+ 					  }
+Index: ../trunk-jpl/src/c/bamg/Direction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Direction.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/bamg/Direction.cpp	(revision 16158)
+@@ -26,7 +26,7 @@
+ 	int Direction::direction(Icoor1 i,Icoor1 j) {
+ 		int r =1; 
+ 		if (dir!= MaxICoor) {
+-			Icoor2 x(dir/2),y1(MaxICoor/2-Abs(x)),y(dir%2?-y1:y1);
++			Icoor2 x(dir/2),y1(MaxICoor/2-Abs(x)),y((dir%2)?-y1:y1);
+ 			r = (x*i + y*j) >=0;
+ 		}
+ 		return r;
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16158)
+@@ -268,7 +268,6 @@
+ 	/*FUNCTION Mesh::ReadMesh(int* index,double* x,double* y,int nods,int nels){{{*/
+ 	void Mesh::ReadMesh(int* index,double* x,double* y,int nods,int nels){
+ 
+-		double Hmin = HUGE_VAL;// the infinie value 
+ 		long i1,i2,i3;
+ 		long i;
+ 		Metric M1(1);
+Index: ../trunk-jpl/src/c/toolkits/issm/Bucket.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 16157)
++++ ../trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 16158)
+@@ -130,11 +130,9 @@
+ 		/*specific routines of Bucket: */
+ 		void SpawnBucketsPerCpu(DataSet* bucketsofcpu_i,int rank_i,int* rowranks){ /*{{{*/
+ 
+-			int i,j;
+-
+ 			/*go through our idxm index of rows this bucket owns, and spawn buckets  
+ 			 *if these rows belong to cpu rank_i. Use rowranks to determine this.*/
+-			for(i=0;i<m;i++){
++			for(int i=0;i<m;i++){
+ 				if (rowranks[idxm[i]]==rank_i){
+ 					/*This row belongs to cpu rank_i, so spawn a bucket with this row, and add it to the bucketsofcpu_i dataset: */
+ 					if(type==MATRIX_BUCKET){
+@@ -146,8 +144,7 @@
+ 				}
+ 			}
+ 
+-		};
+-		/*}}}*/
++		}; /*}}}*/
+ 		int BucketType(void){ /*{{{*/
+ 
+ 			return type;
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 16157)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 16158)
+@@ -148,7 +148,6 @@
+ 			int           num_procs;
+ 
+ 			int        *row_indices_forcpu = NULL;
+-			int        *col_indices_forcpu = NULL;
+ 			int        *modes_forcpu       = NULL;
+ 			doubletype *values_forcpu      = NULL;
+ 			int         *numvalues_forcpu   = NULL;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16158)
+@@ -23,9 +23,6 @@
+ /*Constructors/destructor/copy*/
+ /*FUNCTION Tria::Tria(){{{*/
+ Tria::Tria(){
+-
+-	int i;
+-
+ 	this->nodes    = NULL;
+ 	this->vertices = NULL;
+ 	this->material = NULL;
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16158)
+@@ -845,9 +845,8 @@
+ 	 *		      [ 0    0    h   0]4
+ 	 * where h is the interpolation function for node i.
+ 	 */
+-	int i;
+-	int num_dof=4;
+ 
++	int        num_dof=4;
+ 	IssmDouble L1L2l3[NUMNODESP1_2d];
+ 	IssmDouble dbasis[3][NUMNODESP1];
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16157)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16158)
+@@ -42,17 +42,13 @@
+ /*FUNCTION Penta::Penta(int id, int index, IoModel* iomodel,int nummodels) {{{*/
+ Penta::Penta(int penta_id, int penta_sid, int index, IoModel* iomodel,int nummodels)
+ 	:PentaRef(nummodels)
+-	,ElementHook(nummodels,index+1,6,iomodel) //index+1: material id, iomodel->numberofelements+1: matpar id
+-                                                                      { //i is the element index
++	,ElementHook(nummodels,index+1,6,iomodel){
+ 
+-	int i;
+ 	int penta_elements_ids[2];
+ 
+ 	/*Checks in debugging mode*/
+-	/*{{{*/
+ 	_assert_(iomodel->Data(MeshUpperelementsEnum));
+ 	_assert_(iomodel->Data(MeshLowerelementsEnum));
+-	/*}}}*/
+ 
+ 	/*id: */
+ 	this->id=penta_id;
+@@ -4543,7 +4539,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int        i,j,found=0;
++	int        i,found=0;
+ 	int        stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+@@ -6525,7 +6521,6 @@
+ 	int*         vdoflist=NULL;
+ 	int*         pdoflist=NULL;
+ 	IssmDouble   FSreconditioning;
+-	GaussPenta  *gauss;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int vnumnodes = this->NumberofNodesVelocity();
+@@ -8585,7 +8580,6 @@
+ ElementVector* Penta::CreatePVectorCouplingSSAFSViscous(void){
+ 
+ 	/*Intermediaries */
+-	int         i,j;
+ 	int         approximation;
+ 	IssmDouble  viscosity,Jdet;
+ 	IssmDouble  FSreconditioning;
+@@ -8631,7 +8625,7 @@
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+-		for(i=0;i<NUMVERTICES;i++){
++		for(int i=0;i<NUMVERTICES;i++){
+ 			pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+ 			pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+ 			pe->values[i*NDOF3+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16158-16159.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16158-16159.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16158-16159.diff	(revision 16556)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16158)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16159)
+@@ -8580,7 +8580,7 @@
+ ElementVector* Penta::CreatePVectorCouplingSSAFSViscous(void){
+ 
+ 	/*Intermediaries */
+-	int         approximation;
++	int         i,approximation;
+ 	IssmDouble  viscosity,Jdet;
+ 	IssmDouble  FSreconditioning;
+ 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+@@ -8625,7 +8625,7 @@
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+-		for(int i=0;i<NUMVERTICES;i++){
++		for(i=0;i<NUMVERTICES;i++){
+ 			pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];
+ 			pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
+ 			pe->values[i*NDOF3+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16159-16160.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16159-16160.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16159-16160.diff	(revision 16556)
@@ -0,0 +1,177 @@
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16159)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16160)
+@@ -162,7 +162,7 @@
+ 			fielddisplay(obj,'mantle_density','Mantle density [g/cm^-3]');
+ 			fielddisplay(obj,'damage_D','damage tensor (scalar)');
+ 			fielddisplay(obj,'damage_law','damage law (string) from {''initial''}');
+-			if strcmpi(obj.damage_law),
++			if strcmpi(obj.damage_law,'initial'),
+ 				fielddisplay(obj,'damage_c1','damage parameter 1');
+ 				fielddisplay(obj,'damage_c2','damage parameter 2');
+ 				fielddisplay(obj,'damage_c3','damage parameter 3');
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 16159)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 16160)
+@@ -15,6 +15,7 @@
+ 		surfaceforcings  = 0;
+ 		basalforcings    = 0;
+ 		materials        = 0;
++		damage           = 0;
+ 		friction         = 0;
+ 		flowequation     = 0;
+ 		timestepping     = 0;
+@@ -186,9 +187,9 @@
+ 			%materials
+ 			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+ 			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
+-			if isa(md.materials,'matdamageice')
+-				md.materials.rheology_Z=DepthAverage(md,md.materials.rheology_Z);
+-			end
++			
++			%damage: 
++			md.damage.D=DepthAverage(md,md.damage.D);
+ 
+ 			%special for thermal modeling:
+ 			md.basalforcings.melting_rate=project2d(md,md.basalforcings.melting_rate,1); 
+@@ -717,9 +718,9 @@
+ 			%materials
+ 			md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
+ 			md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
+-			if isa(md.materials,'matdamageice')
+-				md.materials.rheology_Z=project3d(md,'vector',md.materials.rheology_Z,'type','node');
+-			end
++				
++			%damage
++			md.damage.D=project3d(md,'vector',md.damage.D,'type','node');
+ 
+ 			%parameters
+ 			md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
+@@ -830,6 +831,7 @@
+ 			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
+ 			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
+ 			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
++			if isfield(structmd,'rheology_Z'), md.damage.D=(1-structmd.rheology_Z); end
+ 			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+ 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+ 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+@@ -1046,6 +1048,7 @@
+ 			md.timestepping     = timestepping();
+ 			md.groundingline    = groundingline();
+ 			md.materials        = matice();
++			md.damage           = damage();
+ 			md.flowequation     = flowequation();
+ 			md.debug            = debug();
+ 			md.verbose          = verbose();
+@@ -1078,6 +1081,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(obj.surfaceforcings) ']'],'surface forcings'));
+ 			disp(sprintf('%19s: %-22s -- %s','basalforcings'   ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings'));
+ 			disp(sprintf('%19s: %-22s -- %s','materials'       ,['[1x1 ' class(obj.materials) ']'],'material properties'));
++			disp(sprintf('%19s: %-22s -- %s','damage'          ,['[1x1 ' class(obj.damage) ']'],'damage propagation laws'));
+ 			disp(sprintf('%19s: %-22s -- %s','friction'        ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties'));
+ 			disp(sprintf('%19s: %-22s -- %s','flowequation'    ,['[1x1 ' class(obj.flowequation) ']'],'flow equations'));
+ 			disp(sprintf('%19s: %-22s -- %s','timestepping'    ,['[1x1 ' class(obj.timestepping) ']'],'time stepping for transient models'));
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16160)
+@@ -0,0 +1,97 @@
++%DAMAGEICE class definition
++%
++%   Usage:
++%      damage=damage();
++
++classdef damage
++	properties (SetAccess=public)  
++	% {{{
++		%damage 
++		isdamage                   = NaN;
++		D                   = NaN;
++		law                 = '';
++		
++		%parameters for law 'initial': 
++		stress_threshold    = NaN;
++		c1                  = NaN;
++		c2                  = NaN;
++		c3                  = NaN;
++		c4                  = NaN;
++
++	end % }}}
++	methods
++		function obj = damage(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('damage');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							obj.(fieldname) = inputstruct.(fieldname);
++						end
++					end
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%damage parameters: 
++			obj.isdamage=0;
++			obj.D=0;
++			obj.law='undamaged';
++			
++			%damage parameters for 'initial' law of damage propagation
++			obj.stress_threshold=0;
++			obj.c1=0;
++			obj.c2=0;
++			obj.c3=0;
++			obj.c4=0;
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			
++			md = checkfield(md,'materials.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'materials.law','values',{'undamaged','pralong'});
++			if strcmpi(obj.law,'pralong'),
++				md = checkfield(md,'materials.c1','>=',0);
++				md = checkfield(md,'materials.c2','>=',0);
++				md = checkfield(md,'materials.c3','>=',0);
++				md = checkfield(md,'materials.c4','>=',0);
++				md = checkfield(md,'materials.stress_threshold','>=',0);
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Damage:\n'));
++
++			fielddisplay(obj,'D','damage tensor (scalar)');
++			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
++			if strcmpi(obj.law,'pralong'),
++				fielddisplay(obj,'c1','damage parameter 1');
++				fielddisplay(obj,'c2','damage parameter 2');
++				fielddisplay(obj,'c3','damage parameter 3');
++				fielddisplay(obj,'c4','damage parameter 4');
++				fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]');
++			end
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			
++			WriteData(fid,'object',obj,'class','materials','fieldname','D','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','materials','fieldname','law','format','String');
++			if strcmpi(obj.law,'pralong'),
++				WriteData(fid,'object',obj,'class','materials','fieldname','c1','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','c2','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','c3','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','c4','format','Double');
++				WriteData(fid,'object',obj,'class','materials','fieldname','stress_threshold','format','Double');
++			end
++
++		end % }}}
++	end
++end
Index: issm/oecreview/Archive/16133-16554/ISSM-16160-16161.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16160-16161.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16160-16161.diff	(revision 16556)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16160)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16161)
+@@ -5,7 +5,8 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
++md.damage.isdamage=1;
++md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 16160)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 16161)
+@@ -4,7 +4,8 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
++md.damage.isdamage=1;
++md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,StressbalanceSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 16160)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 16161)
+@@ -4,7 +4,8 @@
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.materials.damage_D=0.5*ones(md.mesh.numberofvertices,1);
++md.damage.isdamage=1;
++md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.verbose=verbose('control',true);
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16161-16162.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16161-16162.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16161-16162.diff	(revision 16556)
@@ -0,0 +1,1089 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16161)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16162)
+@@ -153,14 +153,15 @@
+ 	MaterialsRheologyNEnum,
+ 	MaterialsRheologyZEnum,
+ 	MaterialsRheologyZbarEnum,
+-	MaterialsDamageDEnum,
+-	MaterialsDamageDbarEnum,
+-	MaterialsDamageLawEnum,
+-	MaterialsDamageC1Enum,
+-	MaterialsDamageC2Enum,
+-	MaterialsDamageC3Enum,
+-	MaterialsDamageC4Enum,
+-	MaterialsDamageStressThresholdEnum,
++	DamageDEnum,
++	DamageDbarEnum,
++	DamageIsdamageEnum,
++	DamageLawEnum,
++	DamageC1Enum,
++	DamageC2Enum,
++	DamageC3Enum,
++	DamageC4Enum,
++	DamageStressThresholdEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16162)
+@@ -161,14 +161,15 @@
+ 		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+ 		case MaterialsRheologyZEnum : return "MaterialsRheologyZ";
+ 		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
+-		case MaterialsDamageDEnum : return "MaterialsDamageD";
+-		case MaterialsDamageDbarEnum : return "MaterialsDamageDbar";
+-		case MaterialsDamageLawEnum : return "MaterialsDamageLaw";
+-		case MaterialsDamageC1Enum : return "MaterialsDamageC1";
+-		case MaterialsDamageC2Enum : return "MaterialsDamageC2";
+-		case MaterialsDamageC3Enum : return "MaterialsDamageC3";
+-		case MaterialsDamageC4Enum : return "MaterialsDamageC4";
+-		case MaterialsDamageStressThresholdEnum : return "MaterialsDamageStressThreshold";
++		case DamageDEnum : return "DamageD";
++		case DamageDbarEnum : return "DamageDbar";
++		case DamageIsdamageEnum : return "DamageIsdamage";
++		case DamageLawEnum : return "DamageLaw";
++		case DamageC1Enum : return "DamageC1";
++		case DamageC2Enum : return "DamageC2";
++		case DamageC3Enum : return "DamageC3";
++		case DamageC4Enum : return "DamageC4";
++		case DamageStressThresholdEnum : return "DamageStressThreshold";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16162)
+@@ -164,14 +164,15 @@
+ 	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZ")==0) return MaterialsRheologyZEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum;
+-	      else if (strcmp(name,"MaterialsDamageD")==0) return MaterialsDamageDEnum;
+-	      else if (strcmp(name,"MaterialsDamageDbar")==0) return MaterialsDamageDbarEnum;
+-	      else if (strcmp(name,"MaterialsDamageLaw")==0) return MaterialsDamageLawEnum;
+-	      else if (strcmp(name,"MaterialsDamageC1")==0) return MaterialsDamageC1Enum;
+-	      else if (strcmp(name,"MaterialsDamageC2")==0) return MaterialsDamageC2Enum;
+-	      else if (strcmp(name,"MaterialsDamageC3")==0) return MaterialsDamageC3Enum;
+-	      else if (strcmp(name,"MaterialsDamageC4")==0) return MaterialsDamageC4Enum;
+-	      else if (strcmp(name,"MaterialsDamageStressThreshold")==0) return MaterialsDamageStressThresholdEnum;
++	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
++	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
++	      else if (strcmp(name,"DamageIsdamage")==0) return DamageIsdamageEnum;
++	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
++	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
++	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
++	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
++	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
++	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+-	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
++	      if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
++	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+-	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Param")==0) return ParamEnum;
++	      if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
++	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+ 	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16162)
+@@ -63,7 +63,7 @@
+ 			}
+ 			break;
+ 		case MatdamageiceEnum:
+-			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsDamageDEnum);
++			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
+ 			break;
+ 		default:
+@@ -72,7 +72,7 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
+-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsDamageDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
++				MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+ 				InversionMaxParametersEnum);
+ 
+ 	/*Add new constant material property to materials, at the end: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16162)
+@@ -39,7 +39,7 @@
+ 			case ThicknessEnum:             iomodel->FetchData(1,ThicknessEnum); break;
+ 			case FrictionCoefficientEnum:   iomodel->FetchData(1,FrictionCoefficientEnum); break;
+ 			case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
+-			case MaterialsDamageDbarEnum: iomodel->FetchData(1,MaterialsDamageDEnum); break;
++			case DamageDbarEnum: iomodel->FetchData(1,DamageDEnum); break;
+ 			default: _error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+ 		}
+ 	}
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsDamageDEnum);
++	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,DamageDEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16162)
+@@ -101,7 +101,7 @@
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	if(materials_type==MatdamageiceEnum){
+-		iomodel->FetchDataToInput(elements,MaterialsDamageDEnum);
++		iomodel->FetchDataToInput(elements,DamageDEnum);
+ 	}
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16162)
+@@ -166,7 +166,7 @@
+ 	/*Output*/
+ 	IssmDouble D;
+ 
+-	inputs->GetInputAverage(&D,MaterialsDamageDEnum);
++	inputs->GetInputAverage(&D,DamageDEnum);
+ 	return D;
+ }
+ /*}}}*/
+@@ -176,7 +176,7 @@
+ 	/*Output*/
+ 	IssmDouble D;
+ 
+-	inputs->GetInputAverage(&D,MaterialsDamageDEnum);
++	inputs->GetInputAverage(&D,DamageDEnum);
+ 	return 1/(1-D);
+ }
+ /*}}}*/
+@@ -185,7 +185,7 @@
+ 
+ 	/*Output*/
+ 	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,MaterialsDamageDbarEnum);
++	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
+ 	return 1/(1-Dbar);
+ }
+ /*}}}*/
+@@ -194,7 +194,7 @@
+ 
+ 	/*Output*/
+ 	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,MaterialsDamageDbarEnum);
++	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
+ 	return Dbar;
+ }
+ /*}}}*/
+@@ -797,9 +797,9 @@
+ 		}
+ 
+ 		/*Get D*/
+-		if (iomodel->Data(MaterialsDamageDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(MaterialsDamageDbarEnum,nodeinputs,P1Enum));
++		if (iomodel->Data(DamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(DamageDbarEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -816,13 +816,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsDamageDbarEnum:
+-						if (iomodel->Data(MaterialsDamageDEnum)){
+-							_assert_(iomodel->Data(MaterialsDamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case DamageDbarEnum:
++						if (iomodel->Data(DamageDEnum)){
++							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsDamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 
+@@ -855,9 +855,9 @@
+ 		}
+ 
+ 		/*Get D*/
+-		if (iomodel->Data(MaterialsDamageDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new PentaInput(MaterialsDamageDEnum,nodeinputs,P1Enum));
++		if (iomodel->Data(DamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new PentaInput(DamageDEnum,nodeinputs,P1Enum));
+ 		}
+ 
+ 		/*Control Inputs*/
+@@ -874,13 +874,13 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+-					case MaterialsDamageDbarEnum:
+-						if (iomodel->Data(MaterialsDamageDEnum)){
+-							_assert_(iomodel->Data(MaterialsDamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsDamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
++					case DamageDbarEnum:
++						if (iomodel->Data(DamageDEnum)){
++							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+ 							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+ 							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsDamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++							this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
+ 				}
+@@ -902,8 +902,8 @@
+ 				name==MaterialsRheologyBEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+ 				name==MaterialsRheologyNEnum ||
+-				name==MaterialsDamageDEnum ||
+-				name==MaterialsDamageDbarEnum
++				name==DamageDEnum ||
++				name==DamageDbarEnum
+ 		){
+ 		return true;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16161)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16162)
+@@ -1447,7 +1447,7 @@
+ 	Input *input = NULL;	
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum)
++	if (enum_type==MaterialsRheologyBbarEnum || enum_type==DamageDbarEnum)
+ 	 input=this->material->inputs->GetInput(enum_type);
+ 	else
+ 	 input=this->inputs->GetInput(enum_type);
+@@ -1563,7 +1563,7 @@
+ 					}
+ 					break;
+ 				case MaterialsRheologyBbarEnum:
+-				case MaterialsDamageDbarEnum:
++				case DamageDbarEnum:
+ 					/*Material will take care of it*/ break;
+ 				default:
+ 					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+@@ -1778,7 +1778,7 @@
+ 			values[i]=vector[this->vertices[i]->Pid()];
+ 		}
+ 		/*update input*/
+-		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
++		if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==DamageDEnum || name==DamageDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1792,7 +1792,7 @@
+ 			values[i]=vector[this->vertices[i]->Sid()];
+ 		}
+ 		/*update input*/
+-		if(name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsDamageDEnum || name==MaterialsDamageDbarEnum){
++		if(name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==DamageDEnum || name==DamageDbarEnum){
+ 			material->inputs->AddInput(new TriaInput(name,values,P1Enum));
+ 		}
+ 		else{
+@@ -1953,7 +1953,7 @@
+ 				name==InversionVyObsEnum ||
+ 				name==FrictionCoefficientEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+-				name==MaterialsDamageDbarEnum ||
++				name==DamageDbarEnum ||
+ 				name==GradientEnum ||
+ 				name==OldGradientEnum ||
+ 				name==ConvergedEnum ||
+@@ -3717,7 +3717,7 @@
+ 
+ 	for(int i=0;i<num_controls;i++){
+ 
+-		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsDamageDbarEnum){
++		if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==DamageDbarEnum){
+ 			input=(Input*)material->inputs->GetInput(control_type[i]); _assert_(input);
+ 		}
+ 		else{
+@@ -3744,7 +3744,7 @@
+ 	int vertexpidlist[NUMVERTICES];
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==DamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3762,7 +3762,7 @@
+ 
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==DamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3781,7 +3781,7 @@
+ 	Input* grad_input=NULL;
+ 	Input* input=NULL;
+ 
+-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsDamageDbarEnum){
++	if(enum_type==MaterialsRheologyBbarEnum || enum_type==DamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(enum_type);
+ 	}
+ 	else{
+@@ -3812,7 +3812,7 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			GradjBSSA(gradient,control_index);
+ 			break;
+-		case MaterialsDamageDbarEnum:
++		case DamageDbarEnum:
+ 			GradjDSSA(gradient,control_index);
+ 			break;
+ 		case BalancethicknessThickeningRateEnum:
+@@ -3986,7 +3986,7 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);                                   _assert_(vy_input);
+ 	Input* adjointx_input=inputs->GetInput(AdjointxEnum);                       _assert_(adjointx_input);
+ 	Input* adjointy_input=inputs->GetInput(AdjointyEnum);                       _assert_(adjointy_input);
+-	Input* rheologyd_input=material->inputs->GetInput(MaterialsDamageDbarEnum); _assert_(rheologyd_input);
++	Input* rheologyd_input=material->inputs->GetInput(DamageDbarEnum); _assert_(rheologyd_input);
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+@@ -5366,7 +5366,7 @@
+ 	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get input (either in element or material)*/
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsDamageDbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==DamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+@@ -5401,7 +5401,7 @@
+ 	}
+ 	new_input = new TriaInput(control_enum,values,P1Enum);
+ 
+-	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsDamageDbarEnum){
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==DamageDbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/m/exp/expwrite.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expwrite.m	(revision 16161)
++++ ../trunk-jpl/src/m/exp/expwrite.m	(revision 16162)
+@@ -40,7 +40,15 @@
+ 
+ 	fprintf(fid,'%s\n','## Icon:0');
+ 	fprintf(fid,'%s\n','# Points Count Value');
+-	fprintf(fid,'%i %f\n',[length(a(n).x) a(n).density]);
++	if isfield(a,'density'),
++		if ~isempty(a(n).density),
++			fprintf(fid,'%i %f\n',[length(a(n).x) a(n).density]);
++		else
++			fprintf(fid,'%i %f\n',[length(a(n).x) 1.]);
++		end
++	else
++		fprintf(fid,'%i %f\n',[length(a(n).x) 1.]);
++	end
+ 	fprintf(fid,'%s\n','# X pos Y pos');
+ 	fprintf(fid,'%10.10f %10.10f\n',[a(n).x(:) a(n).y(:)]');
+ 	fprintf(fid,'\n');
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16161)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16162)
+@@ -182,12 +182,12 @@
+ 		WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+ 		WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
+ 		
+-		WriteData(fid,'object',self,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','materials','fieldname','damage_law','format','String')
++		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
+ 		if self.damage_law=='initial':
+-			WriteData(fid,'object',self,'class','materials','fieldname','damage_c1','format','Double')
+-			WriteData(fid,'object',self,'class','materials','fieldname','damage_c2','format','Double')
+-			WriteData(fid,'object',self,'class','materials','fieldname','damage_c3','format','Double')
+-			WriteData(fid,'object',self,'class','materials','fieldname','damage_c4','format','Double')
+-			WriteData(fid,'object',self,'class','materials','fieldname','damage_stress_threshold','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c2','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c3','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c4','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','stress_threshold','format','Double')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16161)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16162)
+@@ -121,14 +121,14 @@
+ 			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+ 			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+ 			
+-			md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'materials.damage_law','values',{'initial'});
++			md = checkfield(md,'damage.D','>',0,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'damage.law','values',{'undamaged' 'pralong'});
+ 			if strcmpi(obj.damage_law,'initial'),
+-				md = checkfield(md,'materials.damage_c1','>=',0);
+-				md = checkfield(md,'materials.damage_c2','>=',0);
+-				md = checkfield(md,'materials.damage_c3','>=',0);
+-				md = checkfield(md,'materials.damage_c4','>=',0);
+-				md = checkfield(md,'materials.damage_stress_threshold','>=',0);
++				md = checkfield(md,'damage.c1','>=',0);
++				md = checkfield(md,'damage.c2','>=',0);
++				md = checkfield(md,'damage.c3','>=',0);
++				md = checkfield(md,'damage.c4','>=',0);
++				md = checkfield(md,'damage.stress_threshold','>=',0);
+ 			end
+ 
+ 			if ismember(GiaAnalysisEnum(),analyses),
+@@ -160,14 +160,14 @@
+ 			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+ 			fielddisplay(obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');
+ 			fielddisplay(obj,'mantle_density','Mantle density [g/cm^-3]');
+-			fielddisplay(obj,'damage_D','damage tensor (scalar)');
+-			fielddisplay(obj,'damage_law','damage law (string) from {''initial''}');
++			fielddisplay(obj,'D','damage tensor (scalar)');
++			fielddisplay(obj,'law','damage law (string) from {''initial''}');
+ 			if strcmpi(obj.damage_law,'initial'),
+-				fielddisplay(obj,'damage_c1','damage parameter 1');
+-				fielddisplay(obj,'damage_c2','damage parameter 2');
+-				fielddisplay(obj,'damage_c3','damage parameter 3');
+-				fielddisplay(obj,'damage_c4','damage parameter 4');
+-				fielddisplay(obj,'damage_stress_threshold','damage stress threshold [Pa]');
++				fielddisplay(obj,'c1','damage parameter 1');
++				fielddisplay(obj,'c2','damage parameter 2');
++				fielddisplay(obj,'c3','damage parameter 3');
++				fielddisplay(obj,'c4','damage parameter 4');
++				fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]');
+ 			end
+ 
+ 		end % }}}
+@@ -194,14 +194,14 @@
+ 			WriteData(fid,'object',obj,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+ 			
+ 			%damage: 
+-			WriteData(fid,'object',obj,'class','materials','fieldname','damage_D','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','damage_law','format','String');
+-			if strcmpi(obj.damage_law,'initial'),
+-				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c1','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c2','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c3','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','damage_c4','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','damage_stress_threshold','format','Double');
++			WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','damage','fieldname','law','format','String');
++			if strcmpi(obj.damage_law,'pralong'),
++				WriteData(fid,'object',obj,'class','damage','fieldname','c1','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c2','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c3','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c4','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','stress_threshold','format','Double');
+ 			end
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/damage.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/damage.py	(revision 16162)
+@@ -0,0 +1,86 @@
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from StringToEnum import StringToEnum
++from checkfield import *
++from WriteData import *
++
++class damage(object):
++	"""
++	DAMAGE class definition
++
++	   Usage:
++	      damage=damage();
++	"""
++
++	def __init__(self,*args):    # {{{
++			
++		#damage: 
++		isdamage = float('NaN')
++		self.D   = float('NaN')
++		self.law   = ''
++		
++		#parameters for law 'initial': 
++		self.stress_threshold    = float('NaN')
++		self.c1                  = float('NaN')
++		self.c2                  = float('NaN')
++		self.c3                  = float('NaN')
++		self.c4                  = float('NaN')
++
++		if not len(args):
++			self.setdefaultparameters()
++		else:
++			raise RuntimeError("constructor not supported")
++
++	# }}}
++	def __repr__(self):    # {{{
++		s ='   Damage:\n'
++
++		s+="%s\n" % fielddisplay(self,"D","damage tensor (scalar for now)")
++		s+="%s\n" % fielddisplay(self,"law","damage law (string) from ['undamaged','pralong']")
++
++		if (self.law=='pralong'):
++			s+="%s\n" % fielddisplay(self,"c1","damage parameter 1 ")
++			s+="%s\n" % fielddisplay(self,"c2","damage parameter 2 ")
++			s+="%s\n" % fielddisplay(self,"c3","damage parameter 3 ")
++			s+="%s\n" % fielddisplay(self,"c4","damage parameter 4 ")
++			s+="%s\n" % fielddisplay(self,"stress_threshold","damage stress threshold [Pa]")
++
++		return s
++	# }}}
++	def setdefaultparameters(self):    # {{{
++
++		#damage parameters: 
++		self.isdamage=0
++		self.D=0
++		self.law='undamaged'
++		self.stress_threshold=0
++		self.c1=0
++		self.c2=0
++		self.c3=0
++		self.c4=0
++
++	# }}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++	
++		md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'damage.law','values',['undamaged','pralong'])
++		if self.law == 'pralong':
++			md = checkfield(md,'damage.c1','>=',0)
++			md = checkfield(md,'damage.c2','>=',0)
++			md = checkfield(md,'damage.c3','>=',0)
++			md = checkfield(md,'damage.c4','>=',0)
++			md = checkfield(md,'damage.stress_threshold','>=',0)
++
++		return md
++	# }}}
++	def marshall(self,md,fid):    # {{{
++
++		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
++		if self.damage_law=='pralong':
++			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c2','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c3','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','c4','format','Double')
++			WriteData(fid,'object',self,'class','damage','fieldname','stress_threshold','format','Double')
++	# }}}
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 16161)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 16162)
+@@ -9,6 +9,7 @@
+ from surfaceforcings import surfaceforcings
+ from basalforcings import basalforcings
+ from matice import matice
++from damage import damage
+ from friction import friction
+ from flowequation import flowequation
+ from timestepping import timestepping
+@@ -57,6 +58,7 @@
+ 		self.surfaceforcings  = surfaceforcings()
+ 		self.basalforcings    = basalforcings()
+ 		self.materials        = matice()
++		self.damage           = damage()
+ 		self.friction         = friction()
+ 		self.flowequation     = flowequation()
+ 		self.timestepping     = timestepping()
+@@ -98,6 +100,7 @@
+ 		        'surfaceforcings',\
+ 		        'basalforcings',\
+ 		        'materials',\
++		        'damage',\
+ 		        'friction',\
+ 		        'flowequation',\
+ 		        'timestepping',\
+@@ -135,6 +138,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("surfaceforcings","[%s,%s]" % ("1x1",obj.surfaceforcings.__class__.__name__),"surface forcings"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("basalforcings","[%s,%s]" % ("1x1",obj.basalforcings.__class__.__name__),"bed forcings"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("materials","[%s,%s]" % ("1x1",obj.materials.__class__.__name__),"material properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("damage","[%s,%s]" % ("1x1",obj.damage.__class__.__name__),"damage propagation laws"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("friction","[%s,%s]" % ("1x1",obj.friction.__class__.__name__),"basal friction/drag properties"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flowequation","[%s,%s]" % ("1x1",obj.flowequation.__class__.__name__),"flow equations"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("timestepping","[%s,%s]" % ("1x1",obj.timestepping.__class__.__name__),"time stepping for transient models"))
+@@ -626,6 +630,8 @@
+ 		md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node')
+ 		md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element')
+ 
++		#damage
++		md.damage.D=project3d(md,'vector',md.damage.D,'type','node')
+ 		#parameters
+ 		md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node')
+ 		md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node')
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16161)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16162)
+@@ -7,7 +7,7 @@
+ 	properties (SetAccess=public)  
+ 	% {{{
+ 		%damage 
+-		isdamage                   = NaN;
++		isdamage            = NaN;
+ 		D                   = NaN;
+ 		law                 = '';
+ 		
+@@ -55,14 +55,16 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			
+-			md = checkfield(md,'materials.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'materials.law','values',{'undamaged','pralong'});
++			if obj.isdamage,
++				md = checkfield(md,'damage.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
++				md = checkfield(md,'damage.law','values',{'undamaged','pralong'});
++			end
+ 			if strcmpi(obj.law,'pralong'),
+-				md = checkfield(md,'materials.c1','>=',0);
+-				md = checkfield(md,'materials.c2','>=',0);
+-				md = checkfield(md,'materials.c3','>=',0);
+-				md = checkfield(md,'materials.c4','>=',0);
+-				md = checkfield(md,'materials.stress_threshold','>=',0);
++				md = checkfield(md,'damage.c1','>=',0);
++				md = checkfield(md,'damage.c2','>=',0);
++				md = checkfield(md,'damage.c3','>=',0);
++				md = checkfield(md,'damage.c4','>=',0);
++				md = checkfield(md,'damage.stress_threshold','>=',0);
+ 			end
+ 
+ 		end % }}}
+@@ -81,15 +83,18 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			
+-			WriteData(fid,'object',obj,'class','materials','fieldname','D','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','law','format','String');
++		
++			WriteData(fid,'object',obj,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1);
++			if obj.isdamage,
++				WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
++				WriteData(fid,'object',obj,'class','damage','fieldname','law','format','String');
++			end
+ 			if strcmpi(obj.law,'pralong'),
+-				WriteData(fid,'object',obj,'class','materials','fieldname','c1','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','c2','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','c3','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','c4','format','Double');
+-				WriteData(fid,'object',obj,'class','materials','fieldname','stress_threshold','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c1','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c2','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c3','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','c4','format','Double');
++				WriteData(fid,'object',obj,'class','damage','fieldname','stress_threshold','format','Double');
+ 			end
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageLawEnum()
+-%MATERIALSDAMAGELAWENUM - Enum of MaterialsDamageLaw
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageLawEnum()
+-
+-macro=StringToEnum('MaterialsDamageLaw');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageC1Enum()
+-%MATERIALSDAMAGEC1ENUM - Enum of MaterialsDamageC1
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageC1Enum()
+-
+-macro=StringToEnum('MaterialsDamageC1');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageC2Enum()
+-%MATERIALSDAMAGEC2ENUM - Enum of MaterialsDamageC2
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageC2Enum()
+-
+-macro=StringToEnum('MaterialsDamageC2');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageC3Enum()
+-%MATERIALSDAMAGEC3ENUM - Enum of MaterialsDamageC3
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageC3Enum()
+-
+-macro=StringToEnum('MaterialsDamageC3');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageC4Enum()
+-%MATERIALSDAMAGEC4ENUM - Enum of MaterialsDamageC4
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageC4Enum()
+-
+-macro=StringToEnum('MaterialsDamageC4');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageDbarEnum()
+-%MATERIALSDAMAGEDBARENUM - Enum of MaterialsDamageDbar
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageDbarEnum()
+-
+-macro=StringToEnum('MaterialsDamageDbar');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageStressThresholdEnum()
+-%MATERIALSDAMAGESTRESSTHRESHOLDENUM - Enum of MaterialsDamageStressThreshold
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageStressThresholdEnum()
+-
+-macro=StringToEnum('MaterialsDamageStressThreshold');
+Index: ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m	(revision 16161)
++++ ../trunk-jpl/src/m/enum/MaterialsDamageDEnum.m	(revision 16162)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsDamageDEnum()
+-%MATERIALSDAMAGEDENUM - Enum of MaterialsDamageD
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsDamageDEnum()
+-
+-macro=StringToEnum('MaterialsDamageD');
+Index: ../trunk-jpl/src/m/enum/DamageC2Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageC2Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageC2Enum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageC2Enum()
++%DAMAGEC2ENUM - Enum of DamageC2
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageC2Enum()
++
++macro=StringToEnum('DamageC2');
+Index: ../trunk-jpl/src/m/enum/DamageC3Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageC3Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageC3Enum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageC3Enum()
++%DAMAGEC3ENUM - Enum of DamageC3
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageC3Enum()
++
++macro=StringToEnum('DamageC3');
+Index: ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageIsdamageEnum()
++%DAMAGEISDAMAGEENUM - Enum of DamageIsdamage
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageIsdamageEnum()
++
++macro=StringToEnum('DamageIsdamage');
+Index: ../trunk-jpl/src/m/enum/DamageC4Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageC4Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageC4Enum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageC4Enum()
++%DAMAGEC4ENUM - Enum of DamageC4
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageC4Enum()
++
++macro=StringToEnum('DamageC4');
+Index: ../trunk-jpl/src/m/enum/DamageDbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageDbarEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageDbarEnum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageDbarEnum()
++%DAMAGEDBARENUM - Enum of DamageDbar
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageDbarEnum()
++
++macro=StringToEnum('DamageDbar');
+Index: ../trunk-jpl/src/m/enum/DamageLawEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageLawEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageLawEnum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageLawEnum()
++%DAMAGELAWENUM - Enum of DamageLaw
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageLawEnum()
++
++macro=StringToEnum('DamageLaw');
+Index: ../trunk-jpl/src/m/enum/DamageDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageDEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageDEnum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageDEnum()
++%DAMAGEDENUM - Enum of DamageD
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageDEnum()
++
++macro=StringToEnum('DamageD');
+Index: ../trunk-jpl/src/m/enum/DamageStressThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageStressThresholdEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageStressThresholdEnum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageStressThresholdEnum()
++%DAMAGESTRESSTHRESHOLDENUM - Enum of DamageStressThreshold
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageStressThresholdEnum()
++
++macro=StringToEnum('DamageStressThreshold');
+Index: ../trunk-jpl/src/m/enum/DamageC1Enum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageC1Enum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageC1Enum.m	(revision 16162)
+@@ -0,0 +1,11 @@
++function macro=DamageC1Enum()
++%DAMAGEC1ENUM - Enum of DamageC1
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageC1Enum()
++
++macro=StringToEnum('DamageC1');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16161)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16162)
+@@ -153,14 +153,15 @@
+ def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
+ def MaterialsRheologyZEnum(): return StringToEnum("MaterialsRheologyZ")[0]
+ def MaterialsRheologyZbarEnum(): return StringToEnum("MaterialsRheologyZbar")[0]
+-def MaterialsDamageDEnum(): return StringToEnum("MaterialsDamageD")[0]
+-def MaterialsDamageDbarEnum(): return StringToEnum("MaterialsDamageDbar")[0]
+-def MaterialsDamageLawEnum(): return StringToEnum("MaterialsDamageLaw")[0]
+-def MaterialsDamageC1Enum(): return StringToEnum("MaterialsDamageC1")[0]
+-def MaterialsDamageC2Enum(): return StringToEnum("MaterialsDamageC2")[0]
+-def MaterialsDamageC3Enum(): return StringToEnum("MaterialsDamageC3")[0]
+-def MaterialsDamageC4Enum(): return StringToEnum("MaterialsDamageC4")[0]
+-def MaterialsDamageStressThresholdEnum(): return StringToEnum("MaterialsDamageStressThreshold")[0]
++def DamageDEnum(): return StringToEnum("DamageD")[0]
++def DamageDbarEnum(): return StringToEnum("DamageDbar")[0]
++def DamageIsdamageEnum(): return StringToEnum("DamageIsdamage")[0]
++def DamageLawEnum(): return StringToEnum("DamageLaw")[0]
++def DamageC1Enum(): return StringToEnum("DamageC1")[0]
++def DamageC2Enum(): return StringToEnum("DamageC2")[0]
++def DamageC3Enum(): return StringToEnum("DamageC3")[0]
++def DamageC4Enum(): return StringToEnum("DamageC4")[0]
++def DamageStressThresholdEnum(): return StringToEnum("DamageStressThreshold")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
+Index: ../trunk-jpl/src/m/dev/devpath.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/devpath.py	(revision 16161)
++++ ../trunk-jpl/src/m/dev/devpath.py	(revision 16162)
+@@ -23,4 +23,10 @@
+ #Manual imports for commonly used functions
+ from plotmodel import plotmodel
+ 
++c = get_ipython().config
++c.InteractiveShellApp.exec_lines = []
++c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
++c.InteractiveShellApp.exec_lines.append('%autoreload 2')
++c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in startup.py to improve performance." ')
++
+ print("\n  ISSM development path correctly loaded\n\n")
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 16161)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 16162)
+@@ -122,7 +122,13 @@
+ 
+ 	#view
+ 
+-	#axis
++	#axis {{{
++	if options.exist('axis'):
++		if options.getfieldvalue('axis',True)=='off':
++			p.gca().ticklabel_format(style='plain')
++			p.setp(p.gca().get_xticklabels(), visible=False)
++			p.setp(p.gca().get_yticklabels(), visible=False)
++	# }}}
+ 
+ 	#box
+ 
+@@ -163,8 +169,19 @@
+ 	#wrapping
+ 
+ 	#colorbar {{{
+-	if options.getfieldvalue('colorbar','off')==1:
+-		cb=p.colorbar()
++	if options.getfieldvalue('colorbar',1)==1:
++		if options.exist('clim'):
++			# build custom colorbar (does not yet allow customizing the location)
++			fig = p.gcf()
++			ax = p.gca()
++			divider = make_axes_locatable(ax)
++			cax = divider.new_horizontal("5%", pad=0.05, axes_class=maxes.Axes)
++			fig.add_axes(cax) 
++			cmap = mpl.cm.jet
++			norm = mpl.colors.Normalize(vmin=lims[0], vmax=lims[1])
++			cb = mpl.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm)
++		else:
++			cb=p.colorbar()
+ 		cb.locator=MaxNLocator(nbins=5) # default 5 ticks
+ 		cb.update_ticks()
+ 		if options.exist('colorbarnumticks'):
Index: issm/oecreview/Archive/16133-16554/ISSM-16162-16163.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16162-16163.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16162-16163.diff	(revision 16556)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/classes/damage.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.py	(revision 16162)
++++ ../trunk-jpl/src/m/classes/damage.py	(revision 16163)
+@@ -61,9 +61,10 @@
+ 
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+-	
+-		md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
+-		md = checkfield(md,'damage.law','values',['undamaged','pralong'])
++
++		if self.isdamage:
++			md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
++			md = checkfield(md,'damage.law','values',['undamaged','pralong'])
+ 		if self.law == 'pralong':
+ 			md = checkfield(md,'damage.c1','>=',0)
+ 			md = checkfield(md,'damage.c2','>=',0)
+@@ -75,9 +76,11 @@
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 
+-		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
+-		if self.damage_law=='pralong':
++		WriteData(fid,'object',self,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1)
++		if self.isdamage:
++			WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
++			WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
++		if self.law=='pralong':
+ 			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
+ 			WriteData(fid,'object',self,'class','damage','fieldname','c2','format','Double')
+ 			WriteData(fid,'object',self,'class','damage','fieldname','c3','format','Double')
Index: issm/oecreview/Archive/16133-16554/ISSM-16163-16164.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16163-16164.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16163-16164.diff	(revision 16556)
@@ -0,0 +1,1280 @@
+Index: ../trunk-jpl/src/c/main/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/kriging.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/main/kriging.cpp	(revision 16164)
+@@ -13,7 +13,6 @@
+ 	/*I/O: */
+ 	FILE *output_fid = NULL;
+ 	FILE *input_fid  = NULL;
+-	bool  waitonlock = false;
+ 
+ 	/*File names*/
+ 	char *lockfilename   = NULL;
+Index: ../trunk-jpl/src/c/shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp	(revision 16164)
+@@ -15,13 +15,12 @@
+   IssmDouble monthlytemperaturestmp[12],monthlyprectmp[12];
+   IssmDouble delta18oLapseRate=-6.2*pow(10.,-3);
+   IssmDouble glacialindex; // used to vary present day temperature
+-  int imonth=0;
+ 
+-  glacialindex = 0;//(Delta18oTime-Delta18oPresent-delta18oLapseRate*(Delta18oSurfaceTime-Delta18oSurfacePresent))
++  glacialindex = 0.;//(Delta18oTime-Delta18oPresent-delta18oLapseRate*(Delta18oSurfaceTime-Delta18oSurfacePresent))
+   //  /(Delta18oLgm-Delta18oPresent-delta18oLapseRate*(Delta18oSurfaceLgm-Delta18oSurfacePresent));
+ 
+   for (int imonth = 0; imonth<12; imonth++){  
+-    monthlytemperaturestmp[imonth] = glacialindex*TemperaturesLgm[imonth] + (1-glacialindex)*TemperaturesPresentday[imonth];
++    monthlytemperaturestmp[imonth] = glacialindex*TemperaturesLgm[imonth] + (1.-glacialindex)*TemperaturesPresentday[imonth];
+     //monthlyprectmp[imonth] = 1.5*pow(2,((monthlytemperaturestmp[imonth]-273.15-0)/10)); //equation from rob's paper
+     monthlyprectmp[imonth] = PrecipitationsPresentday[imonth];
+ 
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 16164)
+@@ -18,7 +18,6 @@
+ 	int     dummy;
+ 	int     npart;
+ 	double *qmu_part  = NULL;
+-	int     numberofvertices;
+ 
+ 	/*output: */
+ 	Vector<IssmDouble>* partition_contributions=NULL;
+@@ -30,7 +29,6 @@
+ 	parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
+ 
+ 	/*Some parameters: */
+-	numberofvertices=vertices->NumberOfVertices();
+ 	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+ 
+ 	/*average onto the separate areas. The result will be a npart sized vector. */
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 16164)
+@@ -79,18 +79,16 @@
+ /*}}}*/
+ /*FUNCTION PropagateFloatingiceToGroundedNeighbors {{{*/
+ IssmDouble*    PropagateFloatingiceToGroundedNeighbors(Elements* elements,Nodes* nodes,Vertices* vertices,Parameters* parameters,IssmDouble* vertices_potentially_ungrounding){ 
+-	int                 i,analysis_type,numberofvertices;
++	int                 i,analysis_type;
+ 	int                 nflipped,local_nflipped;
+ 	IssmDouble*         phi                                  = NULL;
+ 	IssmDouble*         elements_neighboring_floatingce      = NULL;
+ 	Vector<IssmDouble>* vec_elements_neighboring_floatingice = NULL;
+ 	Vector<IssmDouble>* vec_phi                              = NULL;
+-	Node*               node                                  = NULL;
+ 	Element*            element                               = NULL;
+ 
+ 	/*recover parameters: */
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	numberofvertices=vertices->NumberOfVertices();
+ 
+ 	/*recover vec_phi*/
+ 	vec_phi=new Vector<IssmDouble>(vertices->NumberOfVertices());
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 16164)
+@@ -74,8 +74,7 @@
+ 	int      i,j;
+ 
+ 	/*output: */
+-	double*  segments=NULL;
+-	Segment<double>* segment=NULL;
++	double* segments=NULL;
+ 	int     numsegs;
+ 
+ 	/*intermediary: */
+Index: ../trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp	(revision 16164)
+@@ -91,22 +91,22 @@
+ /*}}}*/
+ 
+ 	/*Recover material parameters and loading history: see GiaDeflectionCoreArgs for more details {{{*/
+-	ri=arguments->ri;
+-	re=arguments->re;
+-	hes=arguments->hes;
+-	times=arguments->times;
+-	numtimes=arguments->numtimes;
+-	currenttime=arguments->currenttime;
+-	lithosphere_shear_modulus=arguments->lithosphere_shear_modulus;
+-	lithosphere_density=arguments->lithosphere_density;
+-	mantle_shear_modulus=arguments->mantle_shear_modulus;
+-	mantle_viscosity=arguments->mantle_viscosity;
+-	mantle_density=arguments->mantle_density;
+-	lithosphere_thickness=arguments->lithosphere_thickness;
+-	rho_ice=arguments->rho_ice; 
+-	disk_id=arguments->idisk;
+-	iedge=arguments->iedge;
+-	yts=arguments->yts;
++	ri                        = arguments->ri;
++	re                        = arguments->re;
++	hes                       = arguments->hes;
++	times                     = arguments->times;
++	numtimes                  = arguments->numtimes;
++	currenttime               = arguments->currenttime;
++	lithosphere_shear_modulus = arguments->lithosphere_shear_modulus;
++	lithosphere_density       = arguments->lithosphere_density;
++	mantle_shear_modulus      = arguments->mantle_shear_modulus;
++	mantle_viscosity          = arguments->mantle_viscosity;
++	mantle_density            = arguments->mantle_density;
++	lithosphere_thickness     = arguments->lithosphere_thickness;
++	rho_ice                   = arguments->rho_ice;
++	disk_id                   = arguments->idisk;
++	iedge                     = arguments->iedge;
++	yts                       = arguments->yts;
+ 
+ 	/*}}}*/
+ 
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 16164)
+@@ -7,11 +7,9 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void	ComputeStrainRatex( Vector<IssmDouble>** peps,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,Parameters* parameters){
++void	ComputeStrainRatex(Vector<IssmDouble>** peps,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	int      found=0;
+ 	int      numberofelements;
+ 	Element* element=NULL;
+ 
+@@ -25,7 +23,7 @@
+ 	eps=new Vector<IssmDouble>(numberofelements);
+ 
+ 	/*Compute basal stress for each element: */
+-	for (i=0;i<elements->Size();i++){
++	for(int i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->ComputeStrainRate(eps);
+ 	}
+Index: ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 16164)
+@@ -7,55 +7,42 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../KMLFileReadx/KMLFileReadx.h"
+ 
+-int Kml2Expx(char* filkml,char* filexp,
+-			 int sgn){
++int Kml2Expx(char* filkml,char* filexp,int sgn){
+ 
+ 	double  cm,sp;
+-
+ 	Ll2xydef(&cm,&sp,sgn);
+ 
+-	return(Kml2Expx(filkml,filexp,
+-					sgn,cm,sp));
++	return(Kml2Expx(filkml,filexp,sgn,cm,sp));
+ }
+ 
+-int Kml2Expx(char* filkml,char* filexp,
+-			 int sgn,double cm,double sp){
++int Kml2Expx(char* filkml,char* filexp,int sgn,double cm,double sp){
+ 
+-	int     iret=0;
+-	double  *lat=NULL,*lon=NULL;
++	int         iret   = 0;
++	KML_Object *kobj   = NULL;
++	FILE       *fidi   = NULL;
++	FILE       *fido   = NULL;
++	clock_t     clock0,clock1;
++	time_t      time0 ,time1;
+ 
+-	KML_Object*  kobj=NULL;
+-
+-	FILE*   fidi=NULL;
+-	FILE*   fido=NULL;
+-
+-	clock_t clock0,clock1;
+-	time_t  time0, time1;
+-
+ 	clock0=clock();
+ 	time0 =time(NULL);
+ 	_printf0_("\nKml2Expx Module -- " << ctime(&time0));
+ 
+-/*  read kml file  */
+-
++	/*read kml file*/
+ 	fidi=fopen(filkml,"r");
+ 	if (!(kobj=KMLFileReadx(fidi)))
+-		_error_("Error reading kml file.");
++	 _error_("Error reading kml file.");
+ 	fclose(fidi);
+ 
+-/*  open exp file  */
+-
++	/*open exp file*/
+ 	_printf0_("Writing exp profiles to file.\n");
+ 	fido=fopen(filexp,"w");
+ 
+-/*  write the polygons and linestrings  */
+-
++	/*write the polygons and linestrings  */
+ 	kobj->WriteExp(fido,"",sgn,cm,sp);
+ 
+-/*  close exp file  */
+-
++	/*close exp file  */
+ 	fclose(fido);
+-
+ 	delete kobj;
+ 
+ 	clock1=clock();
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 16164)
+@@ -10,10 +10,8 @@
+ void	ComputeBasalStressx( Vector<IssmDouble>** psigma,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	int      found=0;
+-	IssmDouble   numberofelements;
+-	Element* element=NULL;
++	IssmDouble numberofelements;
++	Element*   element=NULL;
+ 
+ 	/*output: */
+ 	Vector<IssmDouble>* sigma=NULL;
+@@ -25,7 +23,7 @@
+ 	sigma=new Vector<IssmDouble>(reCast<int>(numberofelements));
+ 
+ 	/*Compute basal stress for each element: */
+-	for (i=0;i<elements->Size();i++){
++	for(int i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->ComputeBasalStress(sigma);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 16164)
+@@ -33,11 +33,6 @@
+ 
+ int ContourToNodesx(IssmPDouble** pflags,double* x, double* y, int nods, Contours* contours, int edgevalue){
+ 
+-	/*Contour:*/
+-	Contour<IssmPDouble>* contouri=NULL;
+-	double*  xc=NULL;
+-	double*  yc=NULL;
+-
+ 	/*output: */
+ 	IssmPDouble* flags=NULL;
+ 	flags=xNewZeroInit<IssmPDouble>(nods);
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 16164)
+@@ -9,34 +9,26 @@
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters){
+ 
+-	int my_rank;
+-	int i;
+-	int index;
+-	Element* element=NULL;
+ 	IssmDouble value;
+-	int found;
+-	int sumfound;
+-	int cpu_found;
++	int        index;
++	int        found,sumfound,cpu_found;
+ 
+-	/*Get my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+ 	/*retrieve element we are interested in: */
+ 	parameters->FindParam(&index,IndexEnum);
+ 
+ 	/*This is the vertex id for which we want to collect the data. Go through elements, and for each 
+ 	 *element, figure out  if they hold the vertex, and the data. If so, return it: */
+-	for(i=0;i<elements->Size();i++){
++	for(int i=0;i<elements->Size();i++){
+ 		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		found=element->NodalValue(&value,index,natureofdataenum);
+-		if (found){
+-			cpu_found=my_rank;
++		if(found){
++			cpu_found=IssmComm::GetRank();
+ 			break;
+ 		}
+ 	}
+ 
+ 	/*Broadcast whether we found the element: */
+-	ISSM_MPI_Allreduce ( &found,&sumfound,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce(&found,&sumfound,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 	if(!sumfound)_error_("could not find element with vertex with id" << index << " to compute nodal value " << EnumToStringx(natureofdataenum));
+ 
+ 	/*Broadcast and plug into response: */
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 16164)
+@@ -11,31 +11,30 @@
+ int	ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	int noerr=1;
+-	int configuration_type;
+-	Element  *element  = NULL;
+-	Load     *load     = NULL;
+-	Node     *node     = NULL;
+-	Material *material = NULL;
++	int       i;
++	int       noerr = 1;
++	int       configuration_type;
++	Element  *element            = NULL;
++	Load     *load               = NULL;
++	Material *material           = NULL;
+ 
+ 	/*Get analysis type: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 	if(VerboseMProcessor()) _printf0_("      Configuring elements...\n");
+-	for (i=0;i<elements->Size();i++){
++	for(i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->Configure(elements,loads,nodes,vertices,materials,parameters);
+ 	}
+ 	if(VerboseMProcessor()) _printf0_("      Configuring loads...\n");
+-	for (i=0;i<loads->Size();i++){
++	for(i=0;i<loads->Size();i++){
+ 		load=(Load*)loads->GetObjectByOffset(i);
+ 		if (load->InAnalysis(configuration_type)){
+ 			load->Configure(elements,loads,nodes,vertices,materials,parameters);
+ 		}
+ 	}
+ 	if(VerboseMProcessor()) _printf0_("      Configuring materials...\n");
+-	for (i=0;i<materials->Size();i++){
++	for(i=0;i<materials->Size();i++){
+ 		material=(Material*)materials->GetObjectByOffset(i);
+ 		material->Configure(elements);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16164)
+@@ -16,7 +16,6 @@
+ 
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+-	SpcStatic*    spcstatic  = NULL;
+ 
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16164)
+@@ -8,9 +8,6 @@
+ 
+ void	CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSets*/
+-	Pengrid   *pengrid   = NULL;
+-
+ 	/*Intermediary*/
+ 	int         segment_width;
+ 	int         element;
+@@ -18,15 +15,8 @@
+ 	int         count;
+ 	int         penpair_ids[2];
+ 	bool        isSSA,isL1L2,isHO,isFS;
+-	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
+-	IssmDouble *pressureload   = NULL;
+-	IssmDouble *elements_type  = NULL;
+-	IssmDouble *nodeoniceshelf = NULL;
++	int         numpenalties,numrifts,numriftsegments;
+ 	IssmDouble *riftinfo       = NULL;
+-	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *nodeonFS   = NULL;
+-	IssmDouble *nodeonicesheet = NULL;
+-	IssmDouble *vertices_type  = NULL;
+ 	IssmDouble *penalties      = NULL;
+ 	int         assert_int;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16164)
+@@ -84,6 +84,9 @@
+ 				default: _error_("finite element "<<finiteelement<<" not supported");
+ 			}
+ 		}
++		else{
++			_error_("model not supported yet");
++		}
+ 
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+ 		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16164)
+@@ -187,6 +187,7 @@
+ 			temp_matrix=array[i];
+ 			temp_m=mdims_array[i];
+ 			temp_n=ndims_array[i];
++			_assert_(temp_n==5);
+ 
+ 			m=0;
+ 			for(j=0;j<temp_m;j++){
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 16164)
+@@ -229,18 +229,10 @@
+ /*RiftSetPreStable(Loads* loads){{{*/
+ void RiftSetPreStable(Loads* loads){
+ 
+-	int i;
+-
+-	Riftfront* riftfront=NULL;
+-	int found=0;
+-	int mpi_found=0;
+-
+ 	/*go though loads, and set loads to pre stable.:*/
+-	for (i=0;i<loads->Size();i++){
+-
++	for(int i=0;i<loads->Size();i++){
+ 		if(RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
++			Riftfront* riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+ 			riftfront->SetPreStable();
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16164)
+@@ -133,7 +133,6 @@
+ 	int     N                     = gate->N;
+ 
+ 	bool debug = M*N>1? true:false;
+-	debug = true;
+ 
+ 	/*partition loop across threads: */
+ 	PartitionRange(&i0,&i1,nods,num_threads,my_thread);
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 16164)
+@@ -10,8 +10,7 @@
+ void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,FemModel* femmodel,IssmDouble kmax){
+ 
+ 	int      i,connectivity;
+-	int      numberofdofspernode;
+-	int      fsize,configuration_type;
++	int      configuration_type;
+ 	Element *element = NULL;
+ 	Load    *load    = NULL;
+ 	Matrix<IssmDouble>* Jff = NULL;
+@@ -22,8 +21,6 @@
+ 	/*Recover some parameters*/
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+-	fsize=femmodel->nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	numberofdofspernode=femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
+ 	/*Initialize Jacobian Matrix*/
+ 	AllocateSystemMatricesx(&Jff,NULL,NULL,NULL,femmodel);
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp	(revision 16164)
+@@ -12,41 +12,24 @@
+ 
+ void* ContourToMeshxt(void* vpthread_handle){
+ 
+-	int noerr=1;
+-
+ 	/*gate variables :*/
+-	ContourToMeshxThreadStruct* gate=NULL;
+-	pthread_handle* handle=NULL;
+-	int     my_thread;
+-	int     num_threads;
+-	int     i0;
+-	int     i1;
++	ContourToMeshxThreadStruct *gate        = NULL;
++	pthread_handle             *handle      = NULL;
++	int  i,i1,i0;
+ 
+-	int i;
+-
+-	/*Contour:*/
+-	Contours* contours=NULL;
+-
+-	/*parameters: */
+-	int nods;
+-	int edgevalue;
+-	double* x=NULL;
+-	double* y=NULL;
+-	double* in_nod=NULL;
+-
+ 	/*recover handle and gate: */
+-	handle=(pthread_handle*)vpthread_handle;
+-	gate=(ContourToMeshxThreadStruct*)handle->gate;
+-	my_thread=handle->id;
+-	num_threads=handle->num;
++	handle          = (pthread_handle*)vpthread_handle;
++	gate            = (ContourToMeshxThreadStruct*)handle->gate;
++	int my_thread   = handle->id;
++	int num_threads = handle->num;
+ 
+ 	/*recover parameters :*/
+-	contours=gate->contours;
+-	nods=gate->nods;
+-	edgevalue=gate->edgevalue;
+-	in_nod=gate->in_nod;
+-	x=gate->x;
+-	y=gate->y;
++	Contours* contours  = gate->contours;
++	int       nods      = gate->nods;
++	int       edgevalue = gate->edgevalue;
++	double   *in_nod    = gate->in_nod;
++	double   *x         = gate->x;
++	double   *y         = gate->y;
+ 
+ 	/*distribute indices across threads :*/
+ 	PartitionRange(&i0,&i1,nods,num_threads,my_thread);
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp	(revision 16164)
+@@ -11,10 +11,11 @@
+ 
+ 	/*threading: */
+ 	PointCloudFindNeighborsThreadStruct gate;
+-	int num=1;
+ 
+ 	#ifdef _MULTITHREADING_
+-	num=_NUMTHREADS_;
++	int num=_NUMTHREADS_;
++	#else
++	int num=1;
+ 	#endif
+ 
+ 	if(!multithread)num=1;
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16164)
+@@ -10,13 +10,12 @@
+ void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
+ 
+ 	/*intermediary: */
+-	FILE       *fid = NULL;
+ 	int         code,vector_layout;
+ 	IssmDouble *spcdata = NULL;
+ 	int         M,N;
+ 
+ 	/*First of, find the record for the enum, and get code  of data type: */
+-	fid=iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
++	iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
+ 	if(code!=7)_error_("expecting a IssmDouble vector for constraints with enum " << EnumToStringx(vector_enum));
+ 	if(vector_layout!=1)_error_("expecting a nodal vector for constraints with enum " << EnumToStringx(vector_enum));
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 16164)
+@@ -256,15 +256,14 @@
+ 	QuadtreeBox **pbox = NULL;
+ 	QuadtreeBox  *box  = NULL;
+ 	int           xi,yi;
+-	int           level,levelbin;
++	int           levelbin;
+ 	int           index = -1;
+ 	double        length,length2;
+ 
+ 	/*Get integer coodinates*/
+ 	this->IntergerCoordinates(&xi,&yi,x,y);
+ 
+-	/*Initialize levels*/
+-	level    = 0;
++	/*Initialize level*/
+ 	levelbin = (1L<<this->MaxDepth);// = 2^30
+ 
+ 	/*Get inital box (the largest)*/
+@@ -272,9 +271,7 @@
+ 
+ 	/*Find the smallest box where this point is located*/
+ 	while((box=*pbox) && (box->nbitems<0)){ 
+-
+-		levelbin>>=1; level+=1; 
+-
++		levelbin>>=1;
+ 		pbox = &box->box[IJ(xi,yi,levelbin)];
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 16164)
+@@ -124,7 +124,7 @@
+ 
+ 	/*Output and Intermediaries*/
+ 	int          nobs,i,index;
+-	IssmPDouble  hmin,h2,hmin2,radius2;
++	IssmPDouble  hmin,h2,hmin2;
+ 	int         *indices      = NULL;
+ 	Observation *observation  = NULL;
+ 
+@@ -139,9 +139,6 @@
+ 		if(hmin<radius) radius=hmin;
+ 	}
+ 
+-	/*Compute radius square*/
+-	radius2 = radius*radius;
+-
+ 	/*Find all observations that are in radius*/
+ 	this->quadtree->RangeSearch(&indices,&nobs,x_interp,y_interp,radius);
+ 	for (i=0;i<nobs;i++){
+Index: ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 16164)
+@@ -38,18 +38,13 @@
+ 	int  j;
+ 	int  pos1,pos2,pos3,pos4;
+ 	int  num_nodes;
+-	int  num_elems;
+ 
+ 	/*numericalflux constructor data: */
+ 	int   numericalflux_elem_ids[2];
+-	int   numericalflux_mparid;
+ 	int   numericalflux_vertex_ids[2];
+ 	int   numericalflux_node_ids[4];
+ 	int   numericalflux_type;
+ 
+-	/* Get MatPar id */
+-	numericalflux_mparid=iomodel->numberofelements+1; //matlab indexing
+-
+ 	/*Get edge*/
+ 	int i1 = iomodel->faces[4*index+0];
+ 	int i2 = iomodel->faces[4*index+1];
+@@ -59,13 +54,13 @@
+ 	/*First, see wether this is an internal or boundary edge (if e2=-1)*/
+ 	if(e2==-1){
+ 		/* Boundary edge, only one element */
+-		num_elems=1; num_nodes=2;
++		num_nodes=2;
+ 		numericalflux_type=BoundaryEnum;
+ 		numericalflux_elem_ids[0]=e1;
+ 	}
+ 	else{
+ 		/* internal edge: connected to 2 elements */
+-		num_elems=2; num_nodes=4;
++		 num_nodes=4;
+ 		numericalflux_type=InternalEnum;
+ 		numericalflux_elem_ids[0]=e1;
+ 		numericalflux_elem_ids[1]=e2;
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16164)
+@@ -440,15 +440,12 @@
+ void  Pengrid::ConstraintActivateThermal(int* punstable){
+ 
+ 	//   The penalty is stable if it doesn't change during to successive iterations.   
+-
+-	int        found=0;
+ 	const int  numnodes=1;
+ 	IssmDouble pressure;
+ 	IssmDouble temperature;
+ 	IssmDouble t_pmp;
+ 	int        new_active;
+ 	int        unstable=0;
+-	int        reset_penalties=0;
+ 	int        penalty_lock;
+ 
+ 	/*recover pointers: */
+@@ -507,7 +504,6 @@
+ /*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{*/
+ ElementMatrix* Pengrid::PenaltyCreateKMatrixMelting(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble pressure,temperature,t_pmp;
+ 	IssmDouble penalty_factor;
+ 
+@@ -537,7 +533,6 @@
+ /*FUNCTION Pengrid::PenaltyCreateKMatrixThermal {{{*/
+ ElementMatrix* Pengrid::PenaltyCreateKMatrixThermal(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble    penalty_factor;
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+@@ -556,7 +551,6 @@
+ /*FUNCTION Pengrid::PenaltyCreatePVectorMelting {{{*/
+ ElementVector* Pengrid::PenaltyCreatePVectorMelting(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble pressure;
+ 	IssmDouble temperature;
+ 	IssmDouble melting_offset;
+@@ -599,7 +593,6 @@
+ /*FUNCTION Pengrid::PenaltyCreatePVectorThermal {{{*/
+ ElementVector* Pengrid::PenaltyCreatePVectorThermal(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble pressure;
+ 	IssmDouble t_pmp;
+ 	IssmDouble penalty_factor;
+@@ -631,8 +624,6 @@
+ 	//   The penalty is stable if it doesn't change during two consecutive iterations.   
+ 	const int  numnodes        = 1;
+ 	int        unstable        = 0;
+-	int        reset_penalties = 0;
+-	int        found           = 0;	
+ 	int        new_active;
+ 	IssmDouble pressure;
+ 	IssmDouble h;
+@@ -668,7 +659,6 @@
+ /*FUNCTION Pengrid::PenaltyCreateKMatrixHydrologyDCInefficient {{{*/
+ ElementMatrix* Pengrid::PenaltyCreateKMatrixHydrologyDCInefficient(IssmDouble kmax){
+ 
+-	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble    penalty_factor;
+ 
+ 	/*Retrieve parameters*/
+@@ -687,7 +677,6 @@
+ /*FUNCTION Pengrid::PenaltyCreatePVectorHydrologyDCInefficient {{{*/
+ ElementVector* Pengrid::PenaltyCreatePVectorHydrologyDCInefficient(IssmDouble kmax){
+ 
+-	const int  numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble h_max;
+ 	IssmDouble penalty_factor;
+ 
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16164)
+@@ -453,7 +453,6 @@
+ ElementMatrix* Riftfront::PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax){
+ 
+ 	const int   numdof = NDOF2*NUMVERTICES;
+-	int         dofs[1]             = {0};
+ 	IssmDouble  thickness;
+ 	IssmDouble  h[2];
+ 	IssmDouble  penalty_offset;
+@@ -533,7 +532,6 @@
+ /*FUNCTION Riftfront::PenaltyCreatePVectorStressbalanceHoriz {{{*/
+ ElementVector* Riftfront::PenaltyCreatePVectorStressbalanceHoriz(IssmDouble kmax){
+ 
+-	const int  numdof = NDOF2*NUMVERTICES;
+ 	int        j;
+ 	IssmDouble rho_ice;
+ 	IssmDouble rho_water;
+@@ -635,19 +633,18 @@
+ 
+ int Riftfront::Constrain(int* punstable){
+ 
+-	const int   numnodes        = 2;
+-	IssmDouble      penetration;
++	IssmDouble  penetration;
+ 	int         activate;
+ 	int         unstable;
+-	IssmDouble      vx1;
+-	IssmDouble      vy1;
+-	IssmDouble      vx2;
+-	IssmDouble      vy2;
+-	IssmDouble      fractionincrement;
++	IssmDouble  vx1;
++	IssmDouble  vy1;
++	IssmDouble  vx2;
++	IssmDouble  vy2;
++	IssmDouble  fractionincrement;
+ 
+ 	/*Objects: */
+-	Tria       *tria1           = NULL;
+-	Tria       *tria2           = NULL;
++	Tria  *tria1 = NULL;
++	Tria  *tria2 = NULL;
+ 
+ 	/*enum of element? */
+ 	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+@@ -755,16 +752,15 @@
+ /*FUNCTION Riftfront::MaxPenetration {{{*/
+ int   Riftfront::MaxPenetration(IssmDouble* ppenetration){
+ 
+-	const int     numnodes=2;
+-	IssmDouble        penetration=0;
+-	IssmDouble      vx1;
+-	IssmDouble      vy1;
+-	IssmDouble      vx2;
+-	IssmDouble      vy2;
++	IssmDouble penetration;
++	IssmDouble vx1;
++	IssmDouble vy1;
++	IssmDouble vx2;
++	IssmDouble vy2;
+ 
+ 	/*Objects: */
+-	Tria       *tria1           = NULL;
+-	Tria       *tria2           = NULL;
++	Tria  *tria1 = NULL;
++	Tria  *tria2 = NULL;
+ 
+ 	/*enum of element? */
+ 	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+@@ -773,9 +769,6 @@
+ 	tria1=(Tria*)elements[0];
+ 	tria2=(Tria*)elements[1];
+ 
+-	//initialize: 
+-	penetration=-1;
+-
+ 	/*recover velocity: */
+ 	tria1->GetInputValue(&vx1,nodes[0],VxEnum);
+ 	tria2->GetInputValue(&vx2,nodes[1],VxEnum);
+@@ -786,10 +779,10 @@
+ 	penetration=(vx2-vx1)*normal[0]+(vy2-vy1)*normal[1];
+ 
+ 	/*Now, we return penetration only if we are active!: */
+-	if(this->active==0)penetration=-1;
++	if(this->active==0) penetration=-1.;
+ 
+ 	/*If we are zigzag locked, same thing: */
+-	if(this->counter>this->penalty_lock)penetration=-1;
++	if(this->counter>this->penalty_lock) penetration=-1.;
+ 
+ 	/*assign output pointer: */
+ 	*ppenetration=penetration;
+@@ -837,7 +830,6 @@
+ /*FUNCTION Riftfront::PotentialUnstableConstraint {{{*/
+ int   Riftfront::PotentialUnstableConstraint(int* punstable){
+ 
+-	const int   numnodes        = 2;
+ 	IssmDouble  penetration;
+ 	int         unstable;
+ 	IssmDouble  vx1;
+@@ -886,17 +878,16 @@
+ /*FUNCTION Riftfront::PreConstrain {{{*/
+ int   Riftfront::PreConstrain(int* punstable){
+ 
+-	const int   numnodes    = 2;
+-	IssmDouble      penetration;
++	IssmDouble  penetration;
+ 	int         unstable;
+-	IssmDouble      vx1;
+-	IssmDouble      vy1;
+-	IssmDouble      vx2;
+-	IssmDouble      vy2;
++	IssmDouble  vx1;
++	IssmDouble  vy1;
++	IssmDouble  vx2;
++	IssmDouble  vy2;
+ 
+ 	/*Objects: */
+-	Tria       *tria1       = NULL;
+-	Tria       *tria2       = NULL;
++	Tria *tria1 = NULL;
++	Tria *tria2 = NULL;
+ 
+ 	/*enum of element? */
+ 	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16164)
+@@ -399,7 +399,6 @@
+ /*}}}*/
+ void FemModel::UpdateConstraintsx(void){ /*{{{*/
+ 
+-	Element   *element = NULL;
+ 	IssmDouble time;
+ 	int        analysis_type;
+ 
+@@ -1021,9 +1020,8 @@
+ void FemModel::CostFunctionx(IssmDouble* pJ){/*{{{*/
+ 
+ 	/*Intermediary*/
+-	int      num_responses;
+-	Element *element       = NULL;
+-	int     *responses     = NULL;
++	int num_responses;
++	int *responses = NULL;
+ 
+ 	/*output: */
+ 	IssmDouble J,Jplus;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16164)
+@@ -349,7 +349,6 @@
+ ElementVector* Tria::CreatePVector(void){
+ 
+ 	/*retrive parameters: */
+-	ElementVector* pe=NULL;
+ 	int analysis_type;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+@@ -1224,8 +1223,7 @@
+ 
+ 	/*Recover input*/
+ 	Input* input=inputs->GetInput(enumtype);
+-	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+-	int    numnodes = this->NumberofNodes();
++	if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+ 
+ 	/* Start looping on the number of vertices: */
+ 	GaussTria* gauss=new GaussTria();
+@@ -2040,21 +2038,16 @@
+ void Tria::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,IssmDouble** in_resultstimes,int** in_resultssteps,int* in_num_results){
+ 
+ 	/*Intermediaries*/
+-	int     i;
+-	int     numberofresults = 0;
+-	int     *resultsenums   = NULL;
+-	int     *resultssizes   = NULL;
+-	IssmDouble  *resultstimes   = NULL;
+-	int     *resultssteps   = NULL;
++	int        *resultsenums    = NULL;
++	int        *resultssizes    = NULL;
++	IssmDouble *resultstimes    = NULL;
++	int        *resultssteps    = NULL;
+ 
+ 	/*Checks*/
+ 	_assert_(in_num_results);
+ 
+ 	/*Count number of results*/
+-	for(i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-		numberofresults++;
+-	}
++	int numberofresults = this->results->Size();
+ 
+ 	if(numberofresults){
+ 
+@@ -2065,7 +2058,7 @@
+ 		resultssteps=xNew<int>(numberofresults);
+ 
+ 		/*populate enums*/
+-		for(i=0;i<this->results->Size();i++){
++		for(int i=0;i<this->results->Size();i++){
+ 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+ 			resultsenums[i]=elementresult->InstanceEnum();
+ 			resultstimes[i]=elementresult->GetTime();
+@@ -2419,7 +2412,6 @@
+ 
+ 	/*Intermediaries*/
+ 	int        i;
+-	int        tria_vertex_ids[3];
+ 	IssmDouble nodeinputs[3];
+ 	IssmDouble yts;
+ 	int        progstabilization,balancestabilization;
+@@ -2441,11 +2433,6 @@
+ 	/*Recover element type*/
+ 	this->SetElementType(finiteelement_type,analysis_counter);
+ 
+-	/*Recover vertices ids needed to initialize inputs*/
+-	for(i=0;i<3;i++){ 
+-		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+-	}
+-
+ 	/*Recover nodes ids needed to initialize the node hook.*/
+ 	switch(finiteelement_type){
+ 		case P1Enum:
+@@ -3180,7 +3167,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector and vectors*/
+ 	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,SSAApproximationEnum);
+@@ -3313,7 +3299,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes(); _assert_(numnodes==3); 
+-	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element vector*/
+ 	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters);
+@@ -3370,7 +3355,6 @@
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+-	int numdof   = numnodes*NDOF2;
+ 
+ 	/*Initialize Element matrix, vectors and Gaussian points*/
+ 	ElementMatrix* Ke=CreateKMatrixStressbalanceSSA(); //Initialize Jacobian with regular SSA (first part of the Gateau derivative)
+@@ -4032,7 +4016,6 @@
+ 	IssmDouble grade_g[NUMVERTICES]={0.0};
+ 	IssmDouble grade_g_gaussian[NUMVERTICES];
+ 	IssmDouble basis[3];
+-	IssmDouble epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+ 	Friction*  friction=NULL;
+ 	GaussTria  *gauss=NULL;
+ 
+@@ -4536,7 +4519,6 @@
+ /*FUNCTION Tria::SurfaceLogVxVyMisfit {{{*/
+ IssmDouble Tria::SurfaceLogVxVyMisfit(int weight_index){
+ 
+-	int        fit=-1;
+ 	IssmDouble Jelem=0, S=0;
+ 	IssmDouble epsvel=2.220446049250313e-16;
+ 	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
+@@ -7257,7 +7239,6 @@
+ 	/* Intermediaries */
+ 	IssmDouble D_scalar,Jdet,thickness;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble D[2][2];
+ 	IssmDouble l=8.;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -7497,8 +7478,6 @@
+ 	/*Initialize Element vector and other vectors*/
+ 	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
+ 	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
+-	IssmDouble*    Vx     = xNew<IssmDouble>(numnodes);
+-	IssmDouble*    Vy     = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16164)
+@@ -432,7 +432,6 @@
+ ElementMatrix* Penta::CreateKMatrix(void){
+ 
+ 	/*retrieve parameters: */
+-	ElementMatrix* Ke=NULL;
+ 	int analysis_type;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+@@ -1412,12 +1411,11 @@
+ 
+ 	/*Recover input*/
+ 	Input* input=inputs->GetInput(enumtype);
+-	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+-	int    numnodes = this->NumberofNodes();
++	if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+ 
+ 	/* Start looping on the number of vertices: */
+ 	GaussPenta* gauss=new GaussPenta();
+-	for (int iv=0;iv<this->NumberofNodes();iv++){
++	for(int iv=0;iv<this->NumberofNodes();iv++){
+ 		gauss->GaussNode(this->element_type,iv);
+ 		input->GetInputValue(&pvalue[iv],gauss);
+ 	}
+@@ -4083,7 +4081,7 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,found=0;
++	int        i,j;
+ 	IssmDouble Jdet,u,v,w,um,vm,wm;
+ 	IssmDouble h,hx,hy,hz,vx,vy,vz,vel;
+ 	IssmDouble gravity,rho_ice,rho_water;
+@@ -4319,7 +4317,7 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,found=0;
++	int        i,j;
+ 	IssmDouble Jdet,u,v,w,um,vm,wm,vel;
+ 	IssmDouble h,hx,hy,hz,vx,vy,vz;
+ 	IssmDouble gravity,rho_ice,rho_water,kappa;
+@@ -4539,7 +4537,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int        i,found=0;
++	int        i;
+ 	int        stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+@@ -4549,7 +4547,6 @@
+ 	IssmDouble tau_parameter,diameter;
+ 	IssmDouble u,v,w;
+ 	IssmDouble scalar_def,scalar_transient;
+-	IssmDouble temperature_list[NUMVERTICES];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble L[numdof];
+ 	IssmDouble dbasis[3][6];
+@@ -4808,7 +4805,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int        i,found=0;
++	int        i;
+ 	int        stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+@@ -4817,7 +4814,6 @@
+ 	IssmDouble tau_parameter,diameter;
+ 	IssmDouble u,v,w;
+ 	IssmDouble scalar_def,scalar_transient;
+-	IssmDouble temperature_list[NUMVERTICES];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble L[numdof];
+ 	IssmDouble dbasis[3][6];
+@@ -5085,7 +5081,7 @@
+ 	IssmDouble  B[numdof];
+ 	IssmDouble  B_average,s_average;
+ 	int        *doflist = NULL;
+-	IssmDouble  pressure[numdof];
++	//IssmDouble  pressure[numdof];
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -7917,7 +7913,6 @@
+ 	/*Intermediaries */
+ 	int         i,j;
+ 	IssmDouble  Jdet,viscosity;
+-	IssmDouble  epsilon[5];       /* epsilon=[exx,eyy,exy,exz,eyz];*/
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  B[3][numdof2d];
+ 	IssmDouble  Bprime[3][numdof2d];
+@@ -8657,7 +8652,6 @@
+ 	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  basis[6]; //for the six nodes of the penta
+-	Tria*       tria=NULL;
+ 	Friction*   friction=NULL;
+ 	GaussPenta  *gauss=NULL;
+ 
+@@ -8820,7 +8814,6 @@
+ 	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  basis[6]; //for the six nodes of the penta
+-	Tria*       tria=NULL;
+ 	Friction*   friction=NULL;
+ 	GaussPenta  *gauss=NULL;
+ 
+@@ -9366,12 +9359,9 @@
+ 	IssmDouble forcex,forcey,forcez,diameter,FSreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble l1l6[6]; //for the six nodes and the bubble 
+-	IssmDouble dh1dh6[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Stabilization*/
+-	bool       stabilization = true;
+ 	IssmDouble dbasis[3][6];
+ 	IssmDouble dmu[3];
+ 	IssmDouble mu;
+@@ -9411,7 +9401,6 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+-		GetNodalFunctionsP1(&l1l6[0], gauss);
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+ 
+@@ -9790,9 +9779,6 @@
+ /*FUNCTION Penta::CreateJacobianStressbalanceHO{{{*/
+ ElementMatrix* Penta::CreateJacobianStressbalanceHO(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+ 	/*Intermediaries */
+ 	int        i,j;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -10669,12 +10655,7 @@
+ 	int*       doflistp        = NULL;
+ 	int*       doflists        = NULL;
+ 	int*       doflistpressure = NULL;
+-	Penta      *penta          = NULL;
+ 
+-	/*OK, we have to add results of this element for HO 
+-	 * and results from the penta at base for SSA. Now recover results*/
+-	penta=GetBasalElement();
+-
+ 	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+ 	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+ 	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16164)
+@@ -25,7 +25,6 @@
+ 
+ 	/*Intermediary*/
+ 	int k,l;
+-	int gsize;
+ 
+ 	/*id: */
+ 	this->id            = node_id;
+@@ -40,7 +39,6 @@
+ 	/*indexing:*/
+ 	this->indexingupdate = true;
+ 	DistributeNumDofs(&this->indexing,analysis_type,in_approximation); //number of dofs per node
+-	gsize=this->indexing.gsize;
+ 
+ 	if(analysis_type==StressbalanceAnalysisEnum)
+ 	 this->approximation=in_approximation;
+@@ -1127,11 +1125,10 @@
+ /*}}}*/
+ void CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array){/*{{{*/
+ 
+-	int     i,counter;
+-	int     numdofs           = 0;
++	int         i,counter;
++	int         numdofs   = 0;
+ 	IssmDouble  norm;
+-	IssmDouble *transform         = NULL;
+-	IssmDouble *values            = NULL;
++	IssmDouble *transform = NULL;
+ 	IssmDouble  coord_system[3][3];
+ 
+ 	/*Some checks in debugging mode*/
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16163)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16164)
+@@ -287,14 +287,11 @@
+ 
+ 	va_list ap;
+ 	int     dataenum;
+-	int     i;
+-	DoubleMatParam* parameter=NULL;
+ 
+ 	/*Go through the entire list of enums and delete the corresponding data from the iomodel-data dataset: */
+-
+ 	va_start(ap,num);
+-	for(i = 0; i <num; i++){
+-		dataenum=va_arg(ap, int);
++	for(int i=0;i<num;i++){
++		dataenum=va_arg(ap,int);
+ 		_assert_(dataenum<MaximumNumberOfDefinitionsEnum);
+ 
+ 		/*do not erase independent variables for the AD mode computations!: */
+@@ -1040,9 +1037,6 @@
+ 	/*intermediary: */
+ 	int     i;
+ 	bool    defaulting    = false;
+-	bool    transient     = false;
+-
+-	FILE   *fid           = NULL;
+ 	int     code          = 0;
+ 	int     vector_layout = 0;
+ 	int     counter;
+@@ -1060,7 +1054,7 @@
+ 	this->constants->FindParam(&numberofelements,MeshNumberofelementsEnum);
+ 
+ 	/*First of, find the record for the enum, and get code  of data type: */
+-	fid=this->SetFilePointerToData(&code, &vector_layout,vector_enum);
++	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
+ 
+ 	switch(code){
+ 		case 1: //boolean constant.  {{{
Index: issm/oecreview/Archive/16133-16554/ISSM-16164-16165.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16164-16165.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16164-16165.diff	(revision 16556)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16164)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16165)
+@@ -1909,10 +1909,9 @@
+ 		MULTITHREADINGLIB="-lpthread"
+ 		;;
+ 		esac
+-
+ 		AC_DEFINE([_MULTITHREADING_],[1],[with numthreads enabled])
+-		AC_DEFINE_UNQUOTED([_NUMTHREADS_],[$NUMTHREADS_VALUE],[number of threads])
+ 	fi
++	AC_DEFINE_UNQUOTED([_NUMTHREADS_],[$NUMTHREADS_VALUE],[number of threads])
+ 	AC_SUBST([MULTITHREADINGLIB])
+ 	AC_MSG_RESULT($NUMTHREADS_VALUE) 
+ 	dnl }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16165-16166.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16165-16166.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16165-16166.diff	(revision 16556)
@@ -0,0 +1,629 @@
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16166)
+@@ -498,7 +498,6 @@
+ 		float        *eangle   = new float[nbe];
+ 		double        eps      = 1e-20;
+ 		BamgQuadtree  quadtree;                            // build quadtree to find duplicates
+-		BamgVertex   *v0       = vertices;
+ 
+ 		k=0;
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16166)
+@@ -521,9 +521,11 @@
+ 				i3  =(int)bamgmesh->SubDomains[i*3+0];
+ 				head=(int)bamgmesh->SubDomains[i*3+1]-1;//C indexing
+ 				direction=(int)bamgmesh->SubDomains[i*3+2];
+-				if (i3!=23) _error_("Bad Subdomain definition: first number should be 3");
++				if (i3!=3) _error_("Bad Subdomain definition: first number should be 3");
+ 				if (head<0 || head>=nbt) _error_("Bad Subdomain definition: head should in [1 " << nbt << "] (triangle number)");
+ 				subdomains[i].head = triangles+head;
++				subdomains[i].direction = direction;
++				subdomains[i].ReferenceNumber = i3;
+ 			}
+ 		}
+ 
+@@ -1050,9 +1052,9 @@
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/IntersectGeomMetric)*/
+ 
+ 		/*Get options*/
+-		int    verbose=bamgopts->verbose;
+-		double anisomax =bamgopts->anisomax;
+-		double errg     =bamgopts->errg;
++		int    verbose  = bamgopts->verbose;
++		double anisomax = bamgopts->anisomax;
++		double errg     = bamgopts->errg;
+ 
+ 		double ss[2]={0.00001,0.99999};
+ 		double errC = 2*sqrt(2*errg);
+@@ -1060,18 +1062,16 @@
+ 		double hmin = Gh.MinimalHmin();
+ 
+ 		//check that hmax is positive
+-		if (hmax<=0){
+-			_error_("hmax<=0");
+-		}
++		_assert_(hmax>0); 
+ 
+ 		//errC cannot be higher than 1
+-		if (errC>1) errC=1;
++		if(errC>1) errC=1;
+ 
+ 		//Set all vertices to "on"
+ 		SetVertexFieldOn();
+ 
+ 		//loop over all the vertices on edges
+-		for (int  i=0;i<nbe;i++){
++		for(int  i=0;i<nbe;i++){
+ 			for (int j=0;j<2;j++){
+ 
+ 				BamgVertex V;
+@@ -2620,14 +2620,12 @@
+ 						delete []  mark; 
+ 
+ 			  }
+-			else
+-			  { // find the head for all sub domaine
++			else{ // find the head for all subdomains
+ 				if (Gh.nbsubdomains != nbsubdomains && subdomains)
+ 				 delete [] subdomains, subdomains=0;
+ 				if (! subdomains  ) 
+ 				 subdomains = new SubDomain[ Gh.nbsubdomains];
+ 				nbsubdomains =Gh.nbsubdomains;
+-				long err=0;
+ 				CreateSingleVertexToTriangleConnectivity();
+ 				long * mark = new long[nbt];
+ 				Edge **GeomEdgetoEdge = MakeGeomEdgeToEdge();
+@@ -2638,7 +2636,6 @@
+ 				for (int i=0;i<nbsubdomains;i++) {
+ 					GeomEdge &eg = *Gh.subdomains[i].edge;
+ 					subdomains[i].ReferenceNumber = Gh.subdomains[i].ReferenceNumber;
+-					int ssdlab = subdomains[i].ReferenceNumber;
+ 					// by carefull is not easy to find a edge create from a GeomEdge 
+ 					// see routine MakeGeomEdgeToEdge
+ 					Edge &e = *GeomEdgetoEdge[Gh.GetId(eg)];
+@@ -3108,10 +3105,7 @@
+ 	/*FUNCTION Mesh::MakeBamgQuadtree{{{*/
+ 	void Mesh::MakeBamgQuadtree() {  
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/MakeBamgQuadtree)*/
+-
+-		long int verbose=0;
+-		if (  !quadtree )  quadtree = new BamgQuadtree(this);
+-
++		if(!quadtree) quadtree = new BamgQuadtree(this);
+ 	}
+ 	/*}}}*/
+ 	/*FUNCTION Mesh::MaxinalHmax{{{*/
+@@ -3313,18 +3307,13 @@
+ 				} while ( (tbegin != (Triangle*) ta)); 
+ 			}
+ 
+-		} while (nbv!=nbvold);
++		}while(nbv!=nbvold);
++		delete [] first_np_or_next_t;
+ 
+-		delete []  first_np_or_next_t;
++		long NbSwapf =0;
+ 
+-		long NbSwapf =0,NbSwp;
+-
+-		NbSwp = NbSwapf;
+-		for (i=0;i<nbv;i++)
+-		 NbSwapf += vertices[i].Optim(0);
+-		NbTSwap +=  NbSwapf ;
+-	}
+-	/*}}}*/
++		for(i=0;i<nbv;i++) NbSwapf += vertices[i].Optim(0);
++	}/*}}}*/
+ 	/*FUNCTION Mesh::ProjectOnCurve{{{*/
+ 	GeomEdge*   Mesh::ProjectOnCurve( Edge & BhAB, BamgVertex &  vA, BamgVertex & vB,
+ 				double theta,BamgVertex & R,VertexOnEdge &  BR,VertexOnGeom & GR) {
+@@ -3765,7 +3754,6 @@
+ 	void Mesh::TrianglesRenumberBySubDomain(bool justcompress){
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ReNumberingTheTriangleBySubDomain)*/
+ 
+-		long int verbose=0;
+ 		long *renu= new long[nbt];
+ 		register Triangle *t0,*t,*te=triangles+nbt;
+ 		register long k=0,it,i,j;
+@@ -4888,7 +4876,6 @@
+ long  Mesh::TriangleReferenceList(long* reft) const {
+ 	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ConsRefTriangle)*/
+ 
+-	long int verbose=0;
+ 	register Triangle *t0,*t;
+ 	register long k=0, num;   
+ 
+@@ -5415,7 +5402,7 @@
+ 				Edge &ei = BTh.edges[iedge];
+ 
+ 				/*Initialize variables*/
+-				double Lstep=0,Lcurve=0;    // step between two points   (phase==1) 
++				double Lstep=0;             // step between two points   (phase==1) 
+ 				long NbCreatePointOnCurve=0;// Nb of new points on curve (phase==1) 
+ 
+ 				/*Do phase 0 to step*/
+@@ -5548,7 +5535,6 @@
+ 					if (!phase)  { // 
+ 						long NbSegOnCurve = Max((long)(L+0.5),(long) 1);// nb of seg
+ 						Lstep = L/NbSegOnCurve; 
+-						Lcurve = L;
+ 						NbCreatePointOnCurve = NbSegOnCurve-1;
+ 						NbOfNewEdge += NbSegOnCurve;
+ 						NbOfNewPoints += NbCreatePointOnCurve;
+@@ -5679,8 +5665,8 @@
+ 			if (!v1 || !v2){
+ 				_error_("!v1 || !v2");
+ 			}
+-			Icoor2 detss = 0,l=0,ks;
+-			while ((ks=SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
++			Icoor2 detss = 0,l=0;
++			while ((SwapForForcingEdge(  va,  vb, tc, detss, det1,det2,NbSwap)))
+ 			 if(l++ > 10000000) {
+ 				 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+ 			 }
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 16166)
+@@ -24,16 +24,8 @@
+ 	double ymin,ymax;
+ 
+ 	/*contours: */
+-	double              *incontour     = NULL;
++	double *incontour     = NULL;
+ 
+-	/*threading: */
+-	InterpFromMesh2dxThreadStruct gate;
+-	int num=1;
+-
+-	#ifdef _MULTITHREADING_
+-	num=_NUMTHREADS_;
+-	#endif
+-
+ 	/*some checks*/
+ 	if (nels_data<1 || nods_data<3 || nods_prime==0){
+ 		_error_("nothing to be done according to the mesh given in input");
+@@ -83,27 +75,28 @@
+ 	}
+ 
+ 	/*initialize thread parameters: */
+-	gate.interpolation_type=interpolation_type;
+-	gate.debug=debug;
+-	gate.nels_data=nels_data;
+-	gate.index_data=index_data;
+-	gate.x_data=x_data;
+-	gate.y_data=y_data;
+-	gate.data=data;
+-	gate.xmin=xmin;
+-	gate.xmax=xmax;
+-	gate.ymin=ymin;
+-	gate.ymax=ymax;
+-	gate.nods_prime=nods_prime;
+-	gate.data_prime=data_prime;
+-	gate.x_prime=x_prime;
+-	gate.y_prime=y_prime;
+-	gate.default_values=default_values;
+-	gate.num_default_values=num_default_values;
+-	gate.incontour=incontour;
++	InterpFromMesh2dxThreadStruct gate;
++	gate.interpolation_type = interpolation_type;
++	gate.debug              = debug;
++	gate.nels_data          = nels_data;
++	gate.index_data         = index_data;
++	gate.x_data             = x_data;
++	gate.y_data             = y_data;
++	gate.data               = data;
++	gate.xmin               = xmin;
++	gate.xmax               = xmax;
++	gate.ymin               = ymin;
++	gate.ymax               = ymax;
++	gate.nods_prime         = nods_prime;
++	gate.data_prime         = data_prime;
++	gate.x_prime            = x_prime;
++	gate.y_prime            = y_prime;
++	gate.default_values     = default_values;
++	gate.num_default_values = num_default_values;
++	gate.incontour          = incontour;
+ 
+ 	/*launch the thread manager with InterpFromGridToMeshxt as a core: */
+-	LaunchThread(InterpFromMesh2dxt,(void*)&gate,num);
++	LaunchThread(InterpFromMesh2dxt,(void*)&gate,_NUMTHREADS_);
+ 
+ 	/*Assign output pointers:*/
+ 	 xDelete<double>(incontour);
+Index: ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 16166)
+@@ -27,10 +27,7 @@
+ 
+ 	/*threading: */
+ 	KrigingxThreadStruct gate;
+-	int num=1;
+-#ifdef _MULTITHREADING_
+-	num=_NUMTHREADS_;
+-#endif
++	int num = _NUMTHREADS_;
+ 
+ 	/*Get Variogram from Options*/
+ 	ProcessVariogram(&variogram,options);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16166)
+@@ -39,7 +39,6 @@
+ 
+ 	/*Output*/
+ 	Constraints *constraints      = NULL;
+-	SpcStatic   *spcstatic        = NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&g,ConstantsGEnum);
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16166)
+@@ -25,13 +25,6 @@
+ 	double* y=NULL;
+ 	int     i;
+ 
+-	/*threading: */
+-	InterpFromGridToMeshxThreadStruct gate;
+-	int num=1;
+-	#ifdef _MULTITHREADING_
+-	num=_NUMTHREADS_;
+-	#endif
+-
+ 	/*Some checks on arguments: */
+ 	if ((M<2) || (N<2) || (nods<=0)){
+ 		_error_("nothing to be done according to the dimensions of input matrices and vectors.");
+@@ -52,8 +45,8 @@
+ 		/*The coordinates given in input describe the contour of each pixel. Take the center of each pixel*/
+ 		x=xNew<double>(N);
+ 		y=xNew<double>(M);
+-		for (i=0;i<N;i++) x[i]=(x_in[i]+x_in[i+1])/2;
+-		for (i=0;i<M;i++) y[i]=(y_in[i]+y_in[i+1])/2;
++		for(i=0;i<N;i++) x[i]=(x_in[i]+x_in[i+1])/2.;
++		for(i=0;i<M;i++) y[i]=(y_in[i]+y_in[i+1])/2.;
+ 		x_rows=x_rows-1;
+ 		y_rows=y_rows-1;
+ 	}
+@@ -62,30 +55,31 @@
+ 		/*The coordinates given in input describe the center each pixel. Keep them*/
+ 		x=xNew<double>(N);
+ 		y=xNew<double>(M);
+-		for (i=0;i<N;i++) x[i]=x_in[i];
+-		for (i=0;i<M;i++) y[i]=y_in[i];
++		for(i=0;i<N;i++) x[i]=x_in[i];
++		for(i=0;i<M;i++) y[i]=y_in[i];
+ 	}
+ 	else{
+ 		_error_("x and y vectors length should be 1 or 0 more than data number of rows.");
+ 	}
+ 
+ 	/*initialize thread parameters: */
+-	gate.x_mesh=x_mesh;
+-	gate.y_mesh=y_mesh;
+-	gate.x_rows=x_rows;
+-	gate.y_rows=y_rows;
+-	gate.x=x;
+-	gate.y=y;
+-	gate.nods=nods;
+-	gate.data_mesh=data_mesh;
+-	gate.data=data;
+-	gate.default_value=default_value;
+-	gate.interp=interpenum;
+-	gate.M=M;
+-	gate.N=N;
++	InterpFromGridToMeshxThreadStruct gate;
++	gate.x_mesh        = x_mesh;
++	gate.y_mesh        = y_mesh;
++	gate.x_rows        = x_rows;
++	gate.y_rows        = y_rows;
++	gate.x             = x;
++	gate.y             = y;
++	gate.nods          = nods;
++	gate.data_mesh     = data_mesh;
++	gate.data          = data;
++	gate.default_value = default_value;
++	gate.interp        = interpenum;
++	gate.M             = M;
++	gate.N             = N;
+ 
+ 	/*launch the thread manager with InterpFromGridToMeshxt as a core: */
+-	LaunchThread(InterpFromGridToMeshxt,(void*)&gate,num);
++	LaunchThread(InterpFromGridToMeshxt,(void*)&gate,_NUMTHREADS_);
+ 	_printf_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%  \n");
+ 
+ 	/*Assign output pointers:*/
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 16166)
+@@ -12,15 +12,8 @@
+ int ContourToMeshx(double** pin_nod,double** pin_elem, double* index, double* x, double* y,Contours* contours,char* interptype,int nel,int nods, int edgevalue) {
+ 
+ 	/*Contour:*/
+-	double   value;
++	double value;
+ 
+-	/*threading: */
+-	ContourToMeshxThreadStruct gate;
+-	int num=1;
+-	#ifdef _MULTITHREADING_
+-	num=_NUMTHREADS_;
+-	#endif
+-
+ 	/*output: */
+ 	double*  in_nod;
+ 	double*  in_elem;
+@@ -28,21 +21,22 @@
+ 	in_elem  = xNewZeroInit<double>(nel);
+ 
+ 	/*initialize thread parameters: */
+-	gate.contours=contours;
+-	gate.nods=nods;
+-	gate.edgevalue=edgevalue;
+-	gate.in_nod=in_nod;
+-	gate.x=x;
+-	gate.y=y;
++	ContourToMeshxThreadStruct gate;
++	gate.contours  = contours;
++	gate.nods      = nods;
++	gate.edgevalue = edgevalue;
++	gate.in_nod    = in_nod;
++	gate.x         = x;
++	gate.y         = y;
+ 
+ 	/*launch the thread manager with ContourToMeshxt as a core: */
+-	LaunchThread(ContourToMeshxt,(void*)&gate,num);
++	LaunchThread(ContourToMeshxt,(void*)&gate,_NUMTHREADS_);
+ 
+ 	/*Take care of the case where an element interpolation has been requested: */
+ 	if ((strcmp(interptype,"element")==0) || (strcmp(interptype,"element and node")==0)){
+ 		for(int n=0;n<nel;n++){
+ 			if ( (in_nod[ (int)*(index+3*n+0) -1] == 1) && (in_nod[ (int)*(index+3*n+1) -1] == 1) && (in_nod[ (int)*(index+3*n+2) -1] == 1) ){
+-				value=1; in_elem[n]=value;
++				value=1.; in_elem[n]=value;
+ 			}
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp	(revision 16166)
+@@ -10,22 +10,16 @@
+ 	flags=new IssmSeqVec<IssmPDouble>(nods);
+ 
+ 	/*threading: */
+-	PointCloudFindNeighborsThreadStruct gate;
+-
+-	#ifdef _MULTITHREADING_
+ 	int num=_NUMTHREADS_;
+-	#else
+-	int num=1;
+-	#endif
+-
+ 	if(!multithread)num=1;
+ 
+ 	/*initialize thread parameters: */
+-	gate.x=x;
+-	gate.y=y;
+-	gate.nods=nods;
+-	gate.mindistance=mindistance;
+-	gate.flags=flags;
++	PointCloudFindNeighborsThreadStruct gate;
++	gate.x           = x;
++	gate.y           = y;
++	gate.nods        = nods;
++	gate.mindistance = mindistance;
++	gate.flags       = flags;
+ 
+ 	/*launch the thread manager with InterpFromGridToMeshxt as a core: */
+ 	LaunchThread(PointCloudFindNeighborsxt,(void*)&gate,num);
+Index: ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 16166)
+@@ -204,15 +204,14 @@
+ 	QuadtreeBox **pbox = NULL;
+ 	QuadtreeBox  *box  = NULL;
+ 	int           xi,yi;
+-	int           level,levelbin;
++	int           levelbin;
+ 	int           index;
+ 	double        length,length2;
+ 
+ 	/*Get integer coodinates*/
+ 	this->IntergerCoordinates(&xi,&yi,x,y);
+ 
+-	/*Initialize levels*/
+-	level    = 0;
++	/*Initialize level*/
+ 	levelbin = (1L<<this->MaxDepth);// = 2^30
+ 
+ 	/*Get inital box (the largest)*/
+@@ -220,9 +219,7 @@
+ 
+ 	/*Find the smallest box where this point is located*/
+ 	while((box=*pbox) && (box->nbitems<0)){ 
+-
+-		levelbin>>=1; level+=1; 
+-
++		levelbin>>=1;
+ 		pbox = &box->box[IJ(xi,yi,levelbin)];
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16166)
+@@ -440,7 +440,6 @@
+ void  Pengrid::ConstraintActivateThermal(int* punstable){
+ 
+ 	//   The penalty is stable if it doesn't change during to successive iterations.   
+-	const int  numnodes=1;
+ 	IssmDouble pressure;
+ 	IssmDouble temperature;
+ 	IssmDouble t_pmp;
+@@ -622,7 +621,6 @@
+ void  Pengrid::ConstraintActivateHydrologyDCInefficient(int* punstable){
+ 
+ 	//   The penalty is stable if it doesn't change during two consecutive iterations.   
+-	const int  numnodes        = 1;
+ 	int        unstable        = 0;
+ 	int        new_active;
+ 	IssmDouble pressure;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16165)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16166)
+@@ -156,15 +156,12 @@
+ /*FUNCTION Penta::BasalFrictionCreateInput {{{*/
+ void Penta::BasalFrictionCreateInput(void){
+ 
+-	/*Constants*/
+-	const int  numdof=NUMVERTICES*NDOF1;
+-
+ 	/*Intermediaries */
+-	int    count;
+-	IssmDouble basalfriction[NUMVERTICES]={0,0,0,0,0,0};
+-	IssmDouble alpha2,vx,vy;
+-	Friction*  friction=NULL;
+-	GaussPenta* gauss=NULL;
++	int         count;
++	IssmDouble  basalfriction[NUMVERTICES];
++	IssmDouble  alpha2                       ,vx,vy;
++	Friction   *friction                   = NULL;
++	GaussPenta *gauss                      = NULL;
+ 
+ 	/* Basal friction can only be found at the base of an ice sheet: */
+ 	if (!IsOnBed() || IsFloating()){
+@@ -566,14 +563,12 @@
+ void  Penta::CreateDVector(Vector<IssmDouble>* df){
+ 
+ 	/*retrieve parameters: */
+-	ElementMatrix* Ke=NULL;
+ 	ElementVector* De=NULL;
+ 	int analysis_type;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+-	/*Checks in debugging {{{*/
++	/*Checks in debugging*/
+ 	_assert_(this->nodes && this->material && this->matpar && this->verticalneighbors && this->parameters && this->inputs);
+-	/*}}}*/
+ 
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_STRESSBALANCE_
+@@ -2143,13 +2138,15 @@
+ /*FUNCTION Penta::InputToResult{{{*/
+ void  Penta::InputToResult(int enum_type,int step,IssmDouble time){
+ 
+-	bool   found = false;
+ 	Input *input = NULL;
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum) input=this->material->inputs->GetInput(MaterialsRheologyBEnum);
+-	else if (enum_type==MaterialsRheologyZbarEnum) input=this->material->inputs->GetInput(MaterialsRheologyZEnum);
+-	else input=this->inputs->GetInput(enum_type);
++	if      (enum_type==MaterialsRheologyBbarEnum)
++	 input=this->material->inputs->GetInput(MaterialsRheologyBEnum);
++	else if (enum_type==MaterialsRheologyZbarEnum)
++	 input=this->material->inputs->GetInput(MaterialsRheologyZEnum);
++	else
++	 input=this->inputs->GetInput(enum_type);
+ 	//if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found in penta->inputs"); why error out? if the requested input does not exist, we should still 
+ 	//try and output whatever we can instead of just failing.
+ 	if(!input)return;
+@@ -2851,24 +2848,18 @@
+ void Penta::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,IssmDouble** in_resultstimes,int** in_resultssteps,int* in_num_results){
+ 
+ 	/*Intermediaries*/
+-	int     i;
+-	int     numberofresults = 0;
+-	int     *resultsenums   = NULL;
+-	int     *resultssizes   = NULL;
+-	IssmDouble  *resultstimes   = NULL;
+-	int     *resultssteps   = NULL;
++	int        *resultsenums    = NULL;
++	int        *resultssizes    = NULL;
++	IssmDouble *resultstimes    = NULL;
++	int        *resultssteps    = NULL;
+ 
+ 	/*Checks*/
+ 	_assert_(in_num_results);
+ 
+ 	/*Count number of results*/
+-	for(i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-		numberofresults++;
+-	}
++	int numberofresults = this->results->Size();
+ 
+ 	if(numberofresults){
+-
+ 		/*Allocate output*/
+ 		resultsenums=xNew<int>(numberofresults);
+ 		resultssizes=xNew<int>(numberofresults);
+@@ -2876,7 +2867,7 @@
+ 		resultssteps=xNew<int>(numberofresults);
+ 
+ 		/*populate enums*/
+-		for(i=0;i<this->results->Size();i++){
++		for(int i=0;i<this->results->Size();i++){
+ 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+ 			resultsenums[i]=elementresult->InstanceEnum();
+ 			resultstimes[i]=elementresult->GetTime();
+@@ -3780,21 +3771,14 @@
+ /*FUNCTION Penta::ViscousHeatingCreateInput {{{*/
+ void Penta::ViscousHeatingCreateInput(void){
+ 
+-	/*Constants*/
+-	const int  numdof=NUMVERTICES*NDOF1;
+-
+ 	/*Intermediaries*/
+ 	IssmDouble phi;
+ 	IssmDouble viscosity;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6];
+-	IssmDouble viscousheating[NUMVERTICES]={0,0,0,0,0,0};
++	IssmDouble viscousheating[NUMVERTICES];
+ 	IssmDouble thickness;
+-	GaussPenta *gauss=NULL;
+ 
+-	/*Initialize Element vector*/
+-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters);
+-
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+@@ -3803,7 +3787,7 @@
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+ 
+ 	/*loop over vertices: */
+-	gauss=new GaussPenta();
++	GaussPenta* gauss=new GaussPenta();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 
+@@ -4100,7 +4084,6 @@
+ 	IssmDouble D_scalar_trans,D_scalar_stab;
+ 	IssmDouble D[3][3];
+ 	IssmDouble K[3][3]={0.0};
+-	Tria*      tria=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -4333,7 +4316,6 @@
+ 	IssmDouble D_scalar_trans,D_scalar_stab;
+ 	IssmDouble D[3][3];
+ 	IssmDouble K[3][3]={0.0};
+-	Tria*      tria=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16166-16167.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16166-16167.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16166-16167.diff	(revision 16556)
@@ -0,0 +1,3092 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16167)
+@@ -28,6 +28,9 @@
+ md.materials.rheology_B=1.7687*10**8*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      creating surface mass balance"
+ md.surfaceforcings.mass_balance=0.2*numpy.ones((md.mesh.numberofvertices,1))    #0m/a
+ md.basalforcings.melting_rate=0.*numpy.ones((md.mesh.numberofvertices,1))    #0m/a
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16167)
+@@ -67,6 +67,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=-10.*numpy.ones((md.mesh.numberofvertices,1))
+ md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.par	(revision 16167)
+@@ -20,6 +20,9 @@
+ md.materials.rheology_B=6.81*10^7*ones(md.mesh.numberofvertices,1); %to have the same B as the analytical solution 
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      creating surface mass balance');
+ smb_max=0.5; %m/yr
+ sb=10^-2/1000.; %m/yr/m
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 16166)
++++ ../trunk-jpl/test/Par/79North.par	(revision 16167)
+@@ -20,6 +20,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=50.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16167)
+@@ -58,6 +58,9 @@
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Friction
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 16167)
+@@ -26,6 +26,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      creating surface mass balance');
+ md.surfaceforcings.mass_balance=ones(md.mesh.numberofvertices,1)/md.constants.yts; %1m/a
+ md.basalforcings.melting_rate=0.*ones(md.mesh.numberofvertices,1)/md.constants.yts; %1m/a
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 16167)
+@@ -23,6 +23,9 @@
+ md.materials.rheology_B=6.81*10**7*numpy.ones((md.mesh.numberofvertices,1))    #to have the same B as the analytical solution 
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      creating surface mass balance"
+ smb_max=0.5    #m/yr
+ sb=10**-2/1000.    #m/yr/m
+Index: ../trunk-jpl/test/Par/Pig.par
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.par	(revision 16166)
++++ ../trunk-jpl/test/Par/Pig.par	(revision 16167)
+@@ -25,6 +25,9 @@
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ md.initialization.temperature=md.initialization.temperature;
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=50*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.par	(revision 16167)
+@@ -24,6 +24,9 @@
+ md.materials.rheology_B=6.81*10^7*ones(md.mesh.numberofvertices,1); %to have the same B as the analytical solution 
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      creating surface mass balance');
+ smb_max=0.5; %m/yr
+ sb=10^-2/1000.; %m/yr/m
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 16167)
+@@ -28,6 +28,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/ISMIPA.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPA.par	(revision 16167)
+@@ -15,6 +15,9 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16167)
+@@ -39,6 +39,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
+ md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/ISMIPB.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPB.par	(revision 16167)
+@@ -15,6 +15,9 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 16167)
+@@ -30,6 +30,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      creating surface mass balance"
+ md.surfaceforcings.mass_balance=numpy.ones((md.mesh.numberofvertices,1))/md.constants.yts    #1m/a
+ md.basalforcings.melting_rate=0.*numpy.ones((md.mesh.numberofvertices,1))/md.constants.yts    #1m/a
+Index: ../trunk-jpl/test/Par/ISMIPC.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPC.par	(revision 16167)
+@@ -16,6 +16,9 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/ISMIPD.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPD.par	(revision 16167)
+@@ -15,6 +15,9 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 16166)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 16167)
+@@ -36,6 +36,9 @@
+ md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ md.initialization.temperature=md.initialization.temperature
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Friction
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+Index: ../trunk-jpl/test/Par/ISMIPE.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPE.par	(revision 16167)
+@@ -25,6 +25,9 @@
+ md.materials.rheology_B=6.8067*10^7*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model:');
+ %Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/ISMIPF.par
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.par	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPF.par	(revision 16167)
+@@ -17,6 +17,9 @@
+ md.materials.rheology_n=1.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_law='None';
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      boundary conditions for stressbalance model');
+ %Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 16167)
+@@ -27,6 +27,9 @@
+ md.materials.rheology_B=6.81*10**7*numpy.ones((md.mesh.numberofvertices,1))    #to have the same B as the analytical solution 
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      creating surface mass balance"
+ smb_max=0.5    #m/yr
+ sb=10**-2/1000.    #m/yr/m
+Index: ../trunk-jpl/test/Par/ISMIPB.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPB.py	(revision 16167)
+@@ -18,6 +18,9 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPD.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPD.py	(revision 16167)
+@@ -18,6 +18,9 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPF.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPF.py	(revision 16167)
+@@ -20,6 +20,9 @@
+ md.materials.rheology_n=1.*numpy.ones((md.mesh.numberofelements,1))
+ md.materials.rheology_law='None'
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/GiaBenchmarksAB.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 16166)
++++ ../trunk-jpl/test/Par/GiaBenchmarksAB.par	(revision 16167)
+@@ -43,6 +43,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 16166)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 16167)
+@@ -60,6 +60,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=-10.*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.melting_rate=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16167)
+@@ -28,6 +28,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/GiaBenchmarksCD.par
+===================================================================
+--- ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 16166)
++++ ../trunk-jpl/test/Par/GiaBenchmarksCD.par	(revision 16167)
+@@ -42,6 +42,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16167)
+@@ -31,6 +31,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Accumulation and melting
+ md.surfaceforcings.mass_balance=10.*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.melting_rate=5.*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16167)
+@@ -28,6 +28,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=10*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.melting_rate=5*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 16166)
++++ ../trunk-jpl/test/Par/79North.py	(revision 16167)
+@@ -32,6 +32,9 @@
+ md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ md.initialization.temperature=md.initialization.temperature
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Friction
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16167)
+@@ -42,6 +42,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Accumulation and melting
+ md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
+ md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16167)
+@@ -29,6 +29,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ %Friction
+ md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16167)
+@@ -58,6 +58,9 @@
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Friction
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+Index: ../trunk-jpl/test/Par/ISMIPA.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPA.py	(revision 16167)
+@@ -18,6 +18,9 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16167)
+@@ -39,6 +39,9 @@
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ #Friction
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+Index: ../trunk-jpl/test/Par/SquareEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16166)
++++ ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16167)
+@@ -25,6 +25,9 @@
+ md.materials.rheology_B=1.7687*10^8*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
++%Damage
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++
+ disp('      creating surface mass balance');
+ md.surfaceforcings.mass_balance=0.2*ones(md.mesh.numberofvertices,1); %0m/a
+ md.basalforcings.melting_rate=0.*ones(md.mesh.numberofvertices,1); %0m/a
+Index: ../trunk-jpl/test/Par/ISMIPC.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPC.py	(revision 16167)
+@@ -19,6 +19,9 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/Par/ISMIPE.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.py	(revision 16166)
++++ ../trunk-jpl/test/Par/ISMIPE.py	(revision 16167)
+@@ -30,6 +30,9 @@
+ md.materials.rheology_B=6.8067*10**7*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
++#Damage
++md.damage.D=zeros((md.mesh.numberofvertices,1))
++
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+ md=SetIceSheetBC(md)
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 16167)
+@@ -4,7 +4,6 @@
+ from meshprocessrifts import *
+ from setmask import *
+ from parameterize import *
+-from matdamageice import *
+ from paterson import *
+ from setflowequation import *
+ from EnumDefinitions import *
+@@ -15,10 +14,7 @@
+ md=meshprocessrifts(md,'../Exp/Square.exp')
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf2.py')
+-md.materials=matdamageice()
+-md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.damage.D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 16167)
+@@ -2,10 +2,6 @@
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf2.par');
+-md.materials=matdamageice();
+-md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.damage.isdamage=1;
+ md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 16167)
+@@ -3,7 +3,6 @@
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+-from matdamageice import *
+ from paterson import *
+ from setflowequation import *
+ from EnumDefinitions import *
+@@ -13,10 +12,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.materials=matdamageice()
+-md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.damage.D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 16167)
+@@ -1,10 +1,6 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md.materials=matdamageice();
+-md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.damage.isdamage=1;
+ md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 16167)
+@@ -3,7 +3,6 @@
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+-from matdamageice import *
+ from paterson import *
+ from setflowequation import *
+ from EnumDefinitions import *
+@@ -13,15 +12,12 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.materials=matdamageice()
+-md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+-md.materials.damage_D=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md.damage.D=0.5*numpy.ones((md.mesh.numberofvertices,1))
+ md=setflowequation(md,'SSA','all')
+ 
+ #control parameters
+ md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsDamageDbar']
++md.inversion.control_parameters=['DamageDbar']
+ md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+@@ -37,12 +33,12 @@
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Gradient','Misfits','MaterialsRheologyDbar','Pressure','Vel','Vx','Vy']
++field_names     =['Gradient','Misfits','DamageDbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+    md.results.StressbalanceSolution.Gradient1,\
+    md.results.StressbalanceSolution.J,\
+-   md.results.StressbalanceSolution.MaterialsDamageDbar,\
++   md.results.StressbalanceSolution.DamageDbar,\
+    md.results.StressbalanceSolution.Pressure,\
+    md.results.StressbalanceSolution.Vel,\
+    md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 16167)
+@@ -17,7 +17,10 @@
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+-md.cluster=generic('name',oshostname(),'np',3);
++md.verbose.control=true;
++md.verbose.solution=true;
++
++md.cluster=generic('name',oshostname(),'np',1);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 16166)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 16167)
+@@ -1,17 +1,13 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md.materials=matdamageice();
+-md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+-md.damage.isdamage=1;
+ md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'SSA','all');
+ md.verbose=verbose('control',true);
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+-md.inversion.control_parameters={'MaterialsDamageDbar'};
++md.inversion.control_parameters={'DamageDbar'};
+ md.inversion.min_parameters=zeros(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=(1-10^-13)*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+@@ -27,12 +23,12 @@
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient','Misfits','MaterialsDamageDbar','Pressure','Vel','Vx','Vy'};
++field_names     ={'Gradient','Misfits','DamageDbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+    (md.results.StressbalanceSolution.Gradient1),...
+    (md.results.StressbalanceSolution.J),...
+-   (md.results.StressbalanceSolution.MaterialsDamageDbar),...
++   (md.results.StressbalanceSolution.DamageDbar),...
+    (md.results.StressbalanceSolution.Pressure),...
+    (md.results.StressbalanceSolution.Vel),...
+    (md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16166)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16167)
+@@ -151,8 +151,6 @@
+ 	MaterialsRheologyBbarEnum,
+ 	MaterialsRheologyLawEnum,
+ 	MaterialsRheologyNEnum,
+-	MaterialsRheologyZEnum,
+-	MaterialsRheologyZbarEnum,
+ 	DamageDEnum,
+ 	DamageDbarEnum,
+ 	DamageIsdamageEnum,
+@@ -372,7 +370,6 @@
+ 	SSA2dIceFrontEnum,
+ 	SSA3dIceFrontEnum,
+ 	MaticeEnum,
+-	MatdamageiceEnum,
+ 	MatparEnum,
+ 	NodeEnum,
+ 	NumericalfluxEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16167)
+@@ -159,8 +159,6 @@
+ 		case MaterialsRheologyBbarEnum : return "MaterialsRheologyBbar";
+ 		case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw";
+ 		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+-		case MaterialsRheologyZEnum : return "MaterialsRheologyZ";
+-		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
+ 		case DamageDEnum : return "DamageD";
+ 		case DamageDbarEnum : return "DamageDbar";
+ 		case DamageIsdamageEnum : return "DamageIsdamage";
+@@ -372,7 +370,6 @@
+ 		case SSA2dIceFrontEnum : return "SSA2dIceFront";
+ 		case SSA3dIceFrontEnum : return "SSA3dIceFront";
+ 		case MaticeEnum : return "Matice";
+-		case MatdamageiceEnum : return "Matdamageice";
+ 		case MatparEnum : return "Matpar";
+ 		case NodeEnum : return "Node";
+ 		case NumericalfluxEnum : return "Numericalflux";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16167)
+@@ -162,8 +162,6 @@
+ 	      else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+-	      else if (strcmp(name,"MaterialsRheologyZ")==0) return MaterialsRheologyZEnum;
+-	      else if (strcmp(name,"MaterialsRheologyZbar")==0) return MaterialsRheologyZbarEnum;
+ 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+ 	      else if (strcmp(name,"DamageIsdamage")==0) return DamageIsdamageEnum;
+@@ -259,12 +257,12 @@
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
++	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
++	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+-	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+-	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
++	      if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+@@ -378,17 +376,16 @@
+ 	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
+ 	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
++	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
++	      else if (strcmp(name,"Param")==0) return ParamEnum;
++	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+-	      else if (strcmp(name,"Param")==0) return ParamEnum;
+-	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+-	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
++	      if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+@@ -505,13 +502,13 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16167)
+@@ -53,7 +53,7 @@
+ 	/*Create materials*/
+ 	switch(materials_type){
+ 		case MaticeEnum:
+-			iomodel->FetchData(2,MaterialsRheologyBEnum,MaterialsRheologyNEnum);
++			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+ 			if(dakota_analysis){
+ 				if(iomodel->dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+@@ -62,10 +62,6 @@
+            #endif
+ 			}
+ 			break;
+-		case MatdamageiceEnum:
+-			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum);
+-			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matdamageice(i+1,i,iomodel));
+-			break;
+ 		default:
+ 			_error_("Materials "<<EnumToStringx(materials_type)<<" not supported");
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16167)
+@@ -100,9 +100,8 @@
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+-	if(materials_type==MatdamageiceEnum){
+-		iomodel->FetchDataToInput(elements,DamageDEnum);
+-	}
++	iomodel->FetchDataToInput(elements,DamageDEnum);
++
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+Index: ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp	(revision 16167)
+@@ -33,6 +33,7 @@
+ 	for(i=0;i<num_controls;i++){
+ 
+ 		for(j=0;j<elements->Size();j++){
++
+ 			Element* element=(Element*)elements->GetObjectByOffset(j);
+ 			element->Gradj(gradient_list[i],control_type[i],i);
+ 		}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16166)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16167)
+@@ -99,8 +99,6 @@
+ 					./classes/Materials/Materials.cpp\
+ 					./classes/Materials/Matice.h\
+ 					./classes/Materials/Matice.cpp\
+-					./classes/Materials/Matdamageice.h\
+-					./classes/Materials/Matdamageice.cpp\
+ 					./classes/Materials/Matpar.h\
+ 					./classes/Materials/Matpar.cpp\
+ 					./classes/Constraints/Constraints.h\
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16167)
+@@ -1,912 +0,0 @@
+-/*!\file Matdamageice.c
+- * \brief: implementation of the Matdamageice object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "shared/shared.h"
+-
+-/*Matdamageice constructors and destructor*/
+-/*FUNCTION Matdamageice::Matdamageice(){{{*/
+-Matdamageice::Matdamageice(){
+-	this->inputs=NULL;
+-	this->helement=NULL;
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::Matdamageice(int id, int index, IoModel* iomodel, int num_vertices){{{*/
+-Matdamageice::Matdamageice(int matice_mid,int index, IoModel* iomodel){
+-
+-	/*Intermediaries:*/
+-	int    matice_eid;
+-
+-	/*Initialize id*/
+-	this->mid=matice_mid;
+-
+-	/*Initialize inputs*/
+-	this->inputs=new Inputs();
+-
+-	/*Initialize inputs from IoModel*/
+-	this->InputUpdateFromIoModel(index,iomodel);
+-
+-	/*Hooks: */
+-	matice_eid=index+1;
+-	this->helement=new Hook(&matice_eid,1);
+-
+-	return;
+-
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::~Matdamageice(){{{*/
+-Matdamageice::~Matdamageice(){
+-	delete helement;
+-	delete inputs;
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION Matdamageice::Echo {{{*/
+-void Matdamageice::Echo(void){
+-
+-	_printf_("Matdamageice:\n");
+-	_printf_("   mid: " << mid << "\n");
+-	_printf_("   inputs:\n");
+-	inputs->Echo();
+-	_printf_("   element:\n");
+-	helement->Echo();
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::DeepEcho {{{*/
+-void Matdamageice::DeepEcho(void){
+-
+-	_printf_("Matdamageice:\n");
+-	_printf_("   mid: " << mid << "\n");
+-	_printf_("   inputs:\n");
+-	inputs->DeepEcho();
+-	_printf_("   element:\n");
+-	helement->Echo();
+-}		
+-/*}}}*/
+-/*FUNCTION Matdamageice::Id {{{*/
+-int    Matdamageice::Id(void){ return mid; }
+-/*}}}*/
+-/*FUNCTION Matdamageice::ObjectEnum{{{*/
+-int Matdamageice::ObjectEnum(void){
+-
+-	return MatdamageiceEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::copy {{{*/
+-Object* Matdamageice::copy() {
+-
+-	/*Output*/
+-	Matdamageice* matice=NULL;
+-
+-	/*Initialize output*/
+-	matice=new Matdamageice();
+-
+-	/*copy fields: */
+-	matice->mid=this->mid;
+-	matice->helement=(Hook*)this->helement->copy();
+-	if(this->inputs) matice->inputs=(Inputs*)this->inputs->Copy();
+-	else  matice->inputs=new Inputs();
+-
+-	return matice;
+-}
+-/*}}}*/
+-
+-/*Matdamageice management*/
+-/*FUNCTION Matdamageice::Configure {{{*/
+-void  Matdamageice::Configure(Elements* elementsin){
+-
+-	/*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective 
+-	 * datasets, using internal ids and offsets hidden in hooks: */
+-	helement->configure((DataSet*)elementsin);
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::SetCurrentConfiguration {{{*/
+-void  Matdamageice::SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+-
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetA {{{*/
+-IssmDouble Matdamageice::GetA(){
+-	/*
+-	 * A = 1/B^n
+-	 */
+-
+-	IssmDouble B,n;
+-
+-	inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
+-	n=this->GetN();
+-
+-	return pow(B,-n);
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetB {{{*/
+-IssmDouble Matdamageice::GetB(){
+-
+-	/*Output*/
+-	IssmDouble B;
+-
+-	inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
+-	return B;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetBbar {{{*/
+-IssmDouble Matdamageice::GetBbar(){
+-
+-	/*Output*/
+-	IssmDouble Bbar;
+-
+-	inputs->GetInputAverage(&Bbar,MaterialsRheologyBbarEnum);
+-	return Bbar;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetN {{{*/
+-IssmDouble Matdamageice::GetN(){
+-
+-	/*Output*/
+-	IssmDouble n;
+-
+-	inputs->GetInputAverage(&n,MaterialsRheologyNEnum);
+-	return n;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetD {{{*/
+-IssmDouble Matdamageice::GetD(){
+-
+-	/*Output*/
+-	IssmDouble D;
+-
+-	inputs->GetInputAverage(&D,DamageDEnum);
+-	return D;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetZ {{{*/
+-IssmDouble Matdamageice::GetZ(){
+-
+-	/*Output*/
+-	IssmDouble D;
+-
+-	inputs->GetInputAverage(&D,DamageDEnum);
+-	return 1/(1-D);
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetZbar {{{*/
+-IssmDouble Matdamageice::GetZbar(){
+-
+-	/*Output*/
+-	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
+-	return 1/(1-Dbar);
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetDbar {{{*/
+-IssmDouble Matdamageice::GetDbar(){
+-
+-	/*Output*/
+-	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
+-	return Dbar;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetVectorFromInputs{{{*/
+-void  Matdamageice::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
+-
+-	/*Intermediaries*/
+-	Element *element= NULL;
+-
+-	/*Recover element*/
+-	element=(Element*)helement->delivers();
+-
+-	/*Check that input_enum is a material input*/
+-	if (!IsInput(input_enum)) return;
+-
+-	switch(element->ObjectEnum()){
+-
+-		case TriaEnum:{
+-
+-			/*Prepare index list*/
+-			int vertexpidlist[3];
+-			((Tria*)element)->GetVertexPidList(&vertexpidlist[0]);
+-
+-			/*Get input (either in element or material)*/
+-			Input* input=inputs->GetInput(input_enum);
+-			if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in material");
+-
+-			/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
+-			input->GetVectorFromInputs(vector,&vertexpidlist[0]);}
+-			break;
+-
+-		default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosity2d {{{*/
+-void  Matdamageice::GetViscosity2d(IssmDouble* pviscosity, IssmDouble* epsilon){
+-	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
+-												   (1-D) * B
+-	  viscosity= -------------------------------------------------------------------
+-						  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+-
+-	  where viscosity is the viscotiy, B the flow law parameter , (u,v) the velocity 
+-	  vector, and n the flow law exponent.
+-
+-	  If epsilon is NULL, it means this is the first time SystemMatrices is being run, and we 
+-	  return 10^14, initial viscosity.
+-	  */
+-
+-	/*output: */
+-	IssmDouble viscosity;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy;
+-
+-	/*Intermediary: */
+-	IssmDouble A,e;
+-	IssmDouble Btmp,B,n,D;
+-
+-	/*Get B and n*/
+-	Btmp=GetBbar();
+-	D=GetDbar();
+-	n=GetN();
+-	B=(1-D)*Btmp;
+-
+-	if (n==1){
+-		/*Viscous behaviour! viscosity=B: */
+-		viscosity=B/2;
+-	}
+-	else{
+-		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-			viscosity=0.5*pow(10.,14);
+-		}
+-		else{
+-			/*Retrive strain rate components: */
+-			exx=*(epsilon+0);
+-			eyy=*(epsilon+1);
+-			exy=*(epsilon+2);
+-
+-			/*Build viscosity: viscosity=B/(2*A^e) */
+-			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+-			if(A==0){
+-				/*Maxiviscositym viscosity for 0 shear areas: */
+-				viscosity=2.5*pow(10.,17);
+-			}
+-			else{
+-				e=(n-1)/(2*n);
+-				viscosity=B/(2*pow(A,e));
+-			}
+-		}
+-	}
+-
+-	/*Checks in debugging mode*/
+-	if(viscosity<=0) _error_("Negative viscosity");
+-	_assert_(B>0);
+-	_assert_(n>0);
+-
+-	/*Return: */
+-	*pviscosity=viscosity;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosity3d {{{*/
+-void  Matdamageice::GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+-
+-	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+-	 *
+-	 *                                             (1-D)* B
+-	 * viscosity3d= -------------------------------------------------------------------
+-	 *                      2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+-	 *
+-	 *     where mu is the viscotiy, B the flow law parameter , (u,v) the velocity 
+-	 *     vector, and n the flow law exponent.
+-	 *
+-	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+-	 * return g, initial viscosity.
+-	 */
+-
+-	/*output: */
+-	IssmDouble viscosity3d;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy,exz,eyz;
+-
+-	/*Intermediaries: */
+-	IssmDouble A,e;
+-	IssmDouble B,n,D;
+-
+-	/*Get B, Z and n*/
+-	n=GetN();
+-	D=GetD();
+-	B=(1-D)*GetB();
+-
+-	if (n==1){
+-		/*Viscous behaviour! viscosity3d=B: */
+-		viscosity3d=B/2;
+-	}
+-	else{
+-		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+-				(epsilon[3]==0) && (epsilon[4]==0)){
+-			viscosity3d=0.5*pow(10.,14);
+-		}
+-		else{
+-
+-			/*Retrive strain rate components: */
+-			exx=*(epsilon+0);
+-			eyy=*(epsilon+1);
+-			exy=*(epsilon+2);
+-			exz=*(epsilon+3);
+-			eyz=*(epsilon+4);
+-
+-			/*Build viscosity: viscosity3d=2*B/(2*A^e) */
+-			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy;
+-			if(A==0){
+-				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow(10.,17);
+-			}
+-			else{
+-				e=(n-1)/2/n;
+-
+-				viscosity3d=B/(2*pow(A,e));
+-			}
+-		}
+-	}
+-
+-	/*Checks in debugging mode*/
+-	if(viscosity3d<=0) _error_("Negative viscosity");
+-	_assert_(B>0);
+-	_assert_(n>0);
+-
+-	/*Assign output pointers:*/
+-	*pviscosity3d=viscosity3d;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosity3dFS {{{*/
+-void  Matdamageice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+-	 *
+-	 *                                             (1-D)* B
+-	 * viscosity3d= -------------------------------------------------------------------
+-	 *                   2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+-	 *
+-	 *     where mu is the viscotiy, B the flow law parameter , (u,v) the velocity 
+-	 *     vector, and n the flow law exponent.
+-	 *
+-	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+-	 * return g, initial viscosity.
+-	 */
+-
+-	/*output: */
+-	IssmDouble viscosity3d;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy,exz,eyz,ezz;
+-
+-	/*Intermediaries: */
+-	IssmDouble A,e;
+-	IssmDouble B,n,D;
+-	IssmDouble eps0;
+-
+-	/*Get B and n*/
+-	eps0=pow(10.,(IssmDouble)-27);
+-	n=GetN();
+-	D=GetD();
+-	B=(1-D)*GetB();
+-
+-	if (n==1){
+-		/*Viscous behaviour! viscosity3d=B: */
+-		viscosity3d=B/2;
+-	}
+-	else{
+-		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+-				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-			viscosity3d=0.5*pow(10.,14);
+-		}
+-		else{
+-
+-			/*Retrive strain rate components: */
+-			exx=*(epsilon+0);
+-			eyy=*(epsilon+1);
+-			ezz=*(epsilon+2); //not used
+-			exy=*(epsilon+3);
+-			exz=*(epsilon+4);
+-			eyz=*(epsilon+5);
+-
+-			/*Build viscosity: viscosity3d=B/(2*A^e) */
+-			A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+pow(exz,2)+pow(eyz,2)+exx*eyy+pow(eps0,2);
+-			if(A==0){
+-				/*Maxiviscosity3dm viscosity for 0 shear areas: */
+-				viscosity3d=2.25*pow(10.,17);
+-			}
+-			else{
+-				e=(n-1)/2/n;
+-				viscosity3d=B/(2*pow(A,e));
+-			}
+-		}
+-	}
+-
+-	/*Checks in debugging mode*/
+-	if(viscosity3d<=0) _error_("Negative viscosity");
+-	_assert_(B>0);
+-	_assert_(n>0);
+-
+-	/*Assign output pointers:*/
+-	*pviscosity3d=viscosity3d;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosityComplement {{{*/
+-void  Matdamageice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+-	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+-	 *
+-	 *  										                1
+-	 * viscosity= -------------------------------------------------------------------
+-	 *  				  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+-	 *
+-	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+-	 * return mu20, initial viscosity.
+-	 */
+-
+-	/*output: */
+-	IssmDouble viscosity_complement;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy;
+-
+-	/*Intermediary value A and exponent e: */
+-	IssmDouble A,e;
+-	IssmDouble B,n;
+-
+-	/*Get B and n*/
+-	B=GetBbar();
+-	n=GetN();
+-
+-	if(epsilon){
+-		exx=*(epsilon+0);
+-		eyy=*(epsilon+1);
+-		exy=*(epsilon+2);
+-
+-		/*Build viscosity: mu2=B/(2*A^e) */
+-		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+-		if(A==0){
+-			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow(10.,17);
+-		}
+-		else{
+-			e=(n-1)/(2*n);
+-
+-			viscosity_complement=1/(2*pow(A,e));
+-		}
+-	}
+-	else{
+-		viscosity_complement=4.5*pow(10.,17);
+-	}
+-
+-	/*Checks in debugging mode*/
+-	_assert_(B>0);
+-	_assert_(n>0);
+-	_assert_(viscosity_complement>0);
+-
+-	/*Return: */
+-	*pviscosity_complement=viscosity_complement;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosityDComplement {{{*/
+-void  Matdamageice::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+-	/*Return viscosity derivative for control method d(mu)/dD: 
+-	 *
+-	 *  										               B 
+-	 * dviscosity= - -------------------------------------------------------------------
+-	 *  				  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+-	 *
+-	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+-	 * return mu20, initial viscosity.
+-	 */
+-
+-	/*output: */
+-	IssmDouble viscosity_complement;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy;
+-
+-	/*Intermediary value A and exponent e: */
+-	IssmDouble A,e;
+-	IssmDouble B,n;
+-
+-	/*Get B and n*/
+-	B=GetBbar();
+-	n=GetN();
+-
+-	if(epsilon){
+-		exx=*(epsilon+0);
+-		eyy=*(epsilon+1);
+-		exy=*(epsilon+2);
+-
+-		/*Build viscosity: mu2=B/(2*A^e) */
+-		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+-		if(A==0){
+-			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=- 2.25*pow(10.,17);
+-		}
+-		else{
+-			e=(n-1)/(2*n);
+-
+-			viscosity_complement=- B/(2*pow(A,e));
+-		}
+-	}
+-	else{
+-		viscosity_complement=- 4.5*pow(10.,17);
+-	}
+-
+-	/*Checks in debugging mode*/
+-	_assert_(B>0);
+-	_assert_(n>0);
+-	_assert_(viscosity_complement<0);
+-
+-	/*Return: */
+-	*pviscosity_complement=viscosity_complement;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosityDerivativeEpsSquare{{{*/
+-void  Matdamageice::GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){
+-
+-	/*output: */
+-	IssmDouble mu_prime;
+-	IssmDouble mu,n,eff2;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy,exz,eyz;
+-
+-	/*Get visocisty and n*/
+-	GetViscosity3d(&mu,epsilon);
+-	n=GetN();
+-
+-	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+-				(epsilon[3]==0) && (epsilon[4]==0)){
+-		mu_prime=0.5*pow(10.,14);
+-	}
+-	else{
+-		/*Retrive strain rate components: */
+-		exx=epsilon[0];
+-		eyy=epsilon[1];
+-		exy=epsilon[2];
+-		exz=epsilon[3];
+-		eyz=epsilon[4];
+-		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
+-
+-		mu_prime=(1-n)/(2*n) * mu/eff2;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmu_prime=mu_prime;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosityDerivativeEpsSquareFS{{{*/
+-void  Matdamageice::GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* epsilon){
+-
+-	/*output: */
+-	IssmDouble mu_prime;
+-	IssmDouble mu,n,eff2;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,ezz,exy,exz,eyz;
+-
+-	/*Get visocisty and n*/
+-	GetViscosity3d(&mu,epsilon);
+-	n=GetN();
+-
+-	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+-				(epsilon[3]==0) && (epsilon[4]==0) && (epsilon[5]==0)){
+-		mu_prime=0.5*pow(10.,14);
+-	}
+-	else{
+-		/*Retrive strain rate components: */
+-		exx=epsilon[0];
+-		eyy=epsilon[1];
+-		ezz=epsilon[2];
+-		exy=epsilon[3];
+-		exz=epsilon[4];
+-		eyz=epsilon[5];
+-		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy + exz*exz + eyz*eyz;
+-
+-		mu_prime=(1-n)/(2*n) * mu/eff2;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmu_prime=mu_prime;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::GetViscosity2dDerivativeEpsSquare{{{*/
+-void  Matdamageice::GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* epsilon){
+-
+-	/*output: */
+-	IssmDouble mu_prime;
+-	IssmDouble mu,n,eff2;
+-
+-	/*input strain rate: */
+-	IssmDouble exx,eyy,exy;
+-
+-	/*Get visocisty and n*/
+-	GetViscosity2d(&mu,epsilon);
+-	n=GetN();
+-
+-	if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+-		mu_prime=0.5*pow(10.,14);
+-	}
+-	else{
+-		/*Retrive strain rate components: */
+-		exx=epsilon[0];
+-		eyy=epsilon[1];
+-		exy=epsilon[2];
+-		eff2 = exx*exx + eyy*eyy + exx*eyy + exy*exy ;
+-
+-		mu_prime=(1-n)/(2*n) * mu/eff2;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmu_prime=mu_prime;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputDuplicate{{{*/
+-void  Matdamageice::InputDuplicate(int original_enum,int new_enum){
+-
+-	/*Call inputs method*/
+-	if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
+-
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVector(IssmDouble* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+-
+-	/*Intermediaries*/
+-	Element *element      = NULL;
+-
+-	/*Recover element*/
+-	element=(Element*)helement->delivers();
+-
+-	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
+-
+-	switch(type){
+-
+-		case VertexEnum:
+-
+-			switch(element->ObjectEnum()){
+-
+-				case TriaEnum: {
+-					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Pid()];
+-					this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+-					return;
+-				}
+-				default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
+-			}
+-		default: _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+-	}
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+-
+-	/*Intermediaries*/
+-	Element *element      = NULL;
+-	Parameters* parameters= NULL;
+-	int         dim;
+-
+-	/*Recover element*/
+-	element=(Element*)helement->delivers();
+-
+-	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
+-
+-	switch(type){
+-
+-		case VertexEnum:
+-
+-			switch(element->ObjectEnum()){
+-
+-				case TriaEnum: {
+-										IssmDouble values[3];
+-										for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector 
+-										this->inputs->AddInput(new TriaInput(name,values,P1Enum));
+-										/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
+-										if(name==MaterialsRheologyBEnum){
+-											/*Are we in 2D?:*/
+-											if(element->ObjectEnum()==TriaEnum){
+-												parameters=((Tria*)(element))->parameters;
+-											}
+-											else{
+-												parameters=((Penta*)(element))->parameters;
+-											}
+-											parameters->FindParam(&dim,MeshDimensionEnum);
+-											if(dim==2){
+-												/*Dupliacte rheology input: */
+-												this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
+-											}
+-										}
+-										/*}}}*/
+-										return;
+-									}
+-				default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
+-			}
+-		default: _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromMatrixDakota(IssmDouble* vector, int name, int type) {{{*/
+-void  Matdamageice::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols,int name, int type){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+-void  Matdamageice::InputUpdateFromConstant(IssmDouble constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromConstant(int constant, int name) {{{*/
+-void  Matdamageice::InputUpdateFromConstant(int constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromConstant(bool constant, int name) {{{*/
+-void  Matdamageice::InputUpdateFromConstant(bool constant, int name){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromSolution{{{*/
+-void  Matdamageice::InputUpdateFromSolution(IssmDouble* solution){
+-	/*Nothing updated yet*/
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::InputUpdateFromIoModel{{{*/
+-void Matdamageice::InputUpdateFromIoModel(int index, IoModel* iomodel){
+-
+-	int i,j;
+-	bool   control_analysis;
+-	int    num_control_type;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+-	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+-
+-	if(iomodel->dim==2){
+-
+-		/*Intermediaries*/
+-		const int num_vertices = 3; //Tria has 3 vertices
+-		IssmDouble    nodeinputs[num_vertices];
+-		IssmDouble    cmmininputs[num_vertices];
+-		IssmDouble    cmmaxinputs[num_vertices];
+-
+-		/*Get B*/
+-		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Get n*/
+-		if (iomodel->Data(MaterialsRheologyNEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
+-			this->inputs->AddInput(new TriaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Get D*/
+-		if (iomodel->Data(DamageDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(DamageDbarEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Control Inputs*/
+-		#ifdef _HAVE_CONTROL_
+-		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+-			for(i=0;i<num_control_type;i++){
+-				switch(reCast<int>(iomodel->Data(InversionControlParametersEnum)[i])){
+-					case MaterialsRheologyBbarEnum:
+-						if (iomodel->Data(MaterialsRheologyBEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+-						}
+-						break;
+-					case DamageDbarEnum:
+-						if (iomodel->Data(DamageDEnum)){
+-							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+-						}
+-						break;
+-
+-				}
+-			}
+-		}
+-		#endif
+-	}
+-
+-	/*if 3d*/
+-	#ifdef _HAVE_3D_
+-	else if(iomodel->dim==3){
+-
+-		/*Intermediaries*/
+-		const int num_vertices = 6; //Penta has 6 vertices
+-		IssmDouble    nodeinputs[num_vertices];
+-		IssmDouble    cmmininputs[num_vertices];
+-		IssmDouble    cmmaxinputs[num_vertices];
+-
+-		/*Get B*/
+-		if (iomodel->Data(MaterialsRheologyBEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Get n*/
+-		if (iomodel->Data(MaterialsRheologyNEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
+-			this->inputs->AddInput(new PentaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Get D*/
+-		if (iomodel->Data(DamageDEnum)) {
+-			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new PentaInput(DamageDEnum,nodeinputs,P1Enum));
+-		}
+-
+-		/*Control Inputs*/
+-		#ifdef _HAVE_CONTROL_
+-		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+-			for(i=0;i<num_control_type;i++){
+-				switch(reCast<int>(iomodel->Data(InversionControlParametersEnum)[i])){
+-					case MaterialsRheologyBbarEnum:
+-						if (iomodel->Data(MaterialsRheologyBEnum)){
+-							_assert_(iomodel->Data(MaterialsRheologyBEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+j]-1];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+-						}
+-						break;
+-					case DamageDbarEnum:
+-						if (iomodel->Data(DamageDEnum)){
+-							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
+-							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
+-							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
+-							this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+-						}
+-						break;
+-				}
+-			}
+-		}
+-		#endif
+-	}
+-	#endif
+-	else{
+-		_error_("Mesh type not supported yet!");
+-	}
+-
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION Matdamageice::IsInput{{{*/
+-bool Matdamageice::IsInput(int name){
+-	if (
+-				name==MaterialsRheologyBEnum ||
+-				name==MaterialsRheologyBbarEnum ||
+-				name==MaterialsRheologyNEnum ||
+-				name==DamageDEnum ||
+-				name==DamageDbarEnum
+-		){
+-		return true;
+-	}
+-	else return false;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16167)
+@@ -1,68 +0,0 @@
+-/*!\file Matdamageice.h
+- * \brief: header file for matice object
+- */
+-
+-#ifndef MATDAMAGEICE_H_
+-#define MATDAMAGEICE_H_
+-
+-/*Headers:*/
+-/*{{{*/
+-#include "./Material.h"
+-class IoModel;
+-/*}}}*/
+-
+-class Matdamageice: public Material{
+-
+-	private: 
+-		int	   mid;
+-		Hook* helement;
+-
+-	public:
+-		/*Matdamageice constructors, destructors: {{{*/
+-		Matdamageice();
+-		Matdamageice(int mid,int i, IoModel* iomodel);
+-		~Matdamageice();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   ObjectEnum();
+-		Object* copy();
+-		/*}}}*/
+-		/*Update virtual functions definitions: {{{*/
+-		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrow, int ncols, int name, int type);
+-		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);
+-		void  InputUpdateFromConstant(IssmDouble constant, int name);
+-		void  InputUpdateFromConstant(int constant, int name);
+-		void  InputUpdateFromConstant(bool constant, int name);
+-		void  InputUpdateFromSolution(IssmDouble* solution);
+-		void  InputUpdateFromIoModel(int index, IoModel* iomodel);
+-		/*}}}*/
+-		/*Material virtual functions resolution: {{{*/
+-		void   InputDuplicate(int original_enum,int new_enum);
+-		void   Configure(Elements* elements);
+-		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum);
+-		void   SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin);
+-		void   GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
+-		void   GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+-		void   GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+-		void   GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void   GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void   GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		void   GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		void   GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+-		IssmDouble GetA();
+-		IssmDouble GetB();
+-		IssmDouble GetBbar();
+-		IssmDouble GetN();
+-		IssmDouble GetZ();
+-		IssmDouble GetD();
+-		IssmDouble GetZbar();
+-		IssmDouble GetDbar();
+-		bool   IsInput(int name);
+-		/*}}}*/
+-};
+-
+-#endif  /* _MATICE_H_ */
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16167)
+@@ -174,6 +174,44 @@
+ 	return n;
+ }
+ /*}}}*/
++/*FUNCTION Matice::GetD {{{*/
++IssmDouble Matice::GetD(){
++
++	/*Output*/
++	IssmDouble D;
++
++	inputs->GetInputAverage(&D,DamageDEnum);
++	return D;
++}
++/*}}}*/
++/*FUNCTION Matice::GetZ {{{*/
++IssmDouble Matice::GetZ(){
++
++	/*Output*/
++	IssmDouble D;
++
++	inputs->GetInputAverage(&D,DamageDEnum);
++	return 1/(1-D);
++}
++/*}}}*/
++/*FUNCTION Matice::GetZbar {{{*/
++IssmDouble Matice::GetZbar(){
++
++	/*Output*/
++	IssmDouble Dbar;
++	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
++	return 1/(1-Dbar);
++}
++/*}}}*/
++/*FUNCTION Matice::GetDbar {{{*/
++IssmDouble Matice::GetDbar(){
++
++	/*Output*/
++	IssmDouble Dbar;
++	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
++	return Dbar;
++}
++/*}}}*/
+ /*FUNCTION Matice::GetVectorFromInputs{{{*/
+ void  Matice::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
+ 
+@@ -209,7 +247,7 @@
+ /*FUNCTION Matice::GetViscosity2d {{{*/
+ void  Matice::GetViscosity2d(IssmDouble* pviscosity, IssmDouble* epsilon){
+ 	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
+-												    B
++												    (1-D) B
+ 	  viscosity= -------------------------------------------------------------------
+ 						  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 
+@@ -228,15 +266,16 @@
+ 
+ 	/*Intermediary: */
+ 	IssmDouble A,e;
+-	IssmDouble B,n;
++	IssmDouble B,D,n;
+ 
+ 	/*Get B and n*/
+ 	B=GetBbar();
+ 	n=GetN();
++	D=GetDbar();
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity=B: */
+-		viscosity=B/2;
++		viscosity=(1-D)*B/2;
+ 	}
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
+@@ -256,7 +295,7 @@
+ 			}
+ 			else{
+ 				e=(n-1)/(2*n);
+-				viscosity=B/(2*pow(A,e));
++				viscosity=(1-D)*B/(2*pow(A,e));
+ 			}
+ 		}
+ 	}
+@@ -265,6 +304,7 @@
+ 	if(viscosity<=0) _error_("Negative viscosity");
+ 	_assert_(B>0);
+ 	_assert_(n>0);
++	_assert_(D>=0 && D<1);
+ 
+ 	/*Return: */
+ 	*pviscosity=viscosity;
+@@ -275,7 +315,7 @@
+ 
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+-	 *                                               B
++	 *                                               (1-D)*B
+ 	 * viscosity3d= -------------------------------------------------------------------
+ 	 *                      2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+@@ -294,15 +334,16 @@
+ 
+ 	/*Intermediaries: */
+ 	IssmDouble A,e;
+-	IssmDouble B,n;
++	IssmDouble B,D,n;
+ 
+ 	/*Get B and n*/
+ 	B=GetB();
++	D=GetD();
+ 	n=GetN();
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+-		viscosity3d=B/2;
++		viscosity3d=(1-D)*B/2;
+ 	}
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+@@ -327,7 +368,7 @@
+ 			else{
+ 				e=(n-1)/2/n;
+ 
+-				viscosity3d=B/(2*pow(A,e));
++				viscosity3d=(1-D)*B/(2*pow(A,e));
+ 			}
+ 		}
+ 	}
+@@ -336,6 +377,7 @@
+ 	if(viscosity3d<=0) _error_("Negative viscosity");
+ 	_assert_(B>0);
+ 	_assert_(n>0);
++	_assert_(D>=0 && D<1);
+ 
+ 	/*Assign output pointers:*/
+ 	*pviscosity3d=viscosity3d;
+@@ -345,7 +387,7 @@
+ void  Matice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+-	 *                                          B
++	 *                                          (1-D)*B
+ 	 * viscosity3d= -------------------------------------------------------------------
+ 	 *                   2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+@@ -364,17 +406,18 @@
+ 
+ 	/*Intermediaries: */
+ 	IssmDouble A,e;
+-	IssmDouble B,n;
++	IssmDouble B,D,n;
+ 	IssmDouble eps0;
+ 
+ 	/*Get B and n*/
+ 	eps0=pow(10.,-27);
+ 	B=GetB();
++	D=GetD();
+ 	n=GetN();
+ 
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+-		viscosity3d=B/2;
++		viscosity3d=(1-D)*B/2;
+ 	}
+ 	else{
+ 		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0) && 
+@@ -399,7 +442,7 @@
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+-				viscosity3d=B/(2*pow(A,e));
++				viscosity3d=(1-D)*B/(2*pow(A,e));
+ 			}
+ 		}
+ 	}
+@@ -408,6 +451,7 @@
+ 	if(viscosity3d<=0) _error_("Negative viscosity");
+ 	_assert_(B>0);
+ 	_assert_(n>0);
++	_assert_(D>=0 && D<1);
+ 
+ 	/*Assign output pointers:*/
+ 	*pviscosity3d=viscosity3d;
+@@ -417,7 +461,7 @@
+ void  Matice::GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
+ 	/*Return viscosity accounting for steady state power law creep [Thomas and SSA, 1982]: 
+ 	 *
+-	 *  										                1
++	 *  										                (1-D)
+ 	 * viscosity= -------------------------------------------------------------------
+ 	 *  				  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
+ 	 *
+@@ -433,6 +477,62 @@
+ 
+ 	/*Intermediary value A and exponent e: */
+ 	IssmDouble A,e;
++	IssmDouble D,n;
++
++	/*Get D and n*/
++	D=GetDbar();
++	n=GetN();
++
++	if(epsilon){
++		exx=*(epsilon+0);
++		eyy=*(epsilon+1);
++		exy=*(epsilon+2);
++
++		/*Build viscosity: mu2=(1-D)/(2*A^e) */
++		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
++		if(A==0){
++			/*Maximum viscosity_complement for 0 shear areas: */
++			viscosity_complement=2.25*pow(10.,17);
++		}
++		else{
++			e=(n-1)/(2*n);
++
++			viscosity_complement=(1-D)/(2*pow(A,e));
++		}
++	}
++	else{
++		viscosity_complement=4.5*pow(10.,17);
++	}
++
++	/*Checks in debugging mode*/
++	_assert_(D>=0 && D<1);
++	_assert_(n>0);
++	_assert_(viscosity_complement>0);
++
++	/*Return: */
++	*pviscosity_complement=viscosity_complement;
++}
++/*}}}*/
++/*FUNCTION Matice::GetViscosityDComplement {{{*/
++void  Matice::GetViscosityDComplement(IssmDouble* pviscosity_complement, IssmDouble* epsilon){
++	/*Return viscosity derivative for control method d(mu)/dD: 
++	 *
++	 *  										               B 
++	 * dviscosity= - -------------------------------------------------------------------
++	 *  				  2[ exx^2+eyy^2+exx*eyy+exy^2+exz^2+eyz^2 ]^[(n-1)/2n]
++	 *
++	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
++	 * return mu20, initial viscosity.
++	 */
++
++	/*output: */
++	IssmDouble viscosity_complement;
++
++	/*input strain rate: */
++	IssmDouble exx,eyy,exy;
++
++	/*Intermediary value A and exponent e: */
++	IssmDouble A,e;
+ 	IssmDouble B,n;
+ 
+ 	/*Get B and n*/
+@@ -448,22 +548,22 @@
+ 		A=pow(exx,2)+pow(eyy,2)+pow(exy,2)+exx*eyy;
+ 		if(A==0){
+ 			/*Maximum viscosity_complement for 0 shear areas: */
+-			viscosity_complement=2.25*pow(10.,17);
++			viscosity_complement=- 2.25*pow(10.,17);
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+ 
+-			viscosity_complement=1/(2*pow(A,e));
++			viscosity_complement=- B/(2*pow(A,e));
+ 		}
+ 	}
+ 	else{
+-		viscosity_complement=4.5*pow(10.,17);
++		viscosity_complement=- 4.5*pow(10.,17);
+ 	}
+ 
+ 	/*Checks in debugging mode*/
+ 	_assert_(B>0);
+ 	_assert_(n>0);
+-	_assert_(viscosity_complement>0);
++	_assert_(viscosity_complement<0);
+ 
+ 	/*Return: */
+ 	*pviscosity_complement=viscosity_complement;
+@@ -728,6 +828,12 @@
+ 			this->inputs->AddInput(new TriaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+ 
++		/*Get D:*/
++		if (iomodel->Data(DamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(DamageDbarEnum,nodeinputs,P1Enum));
++		}
++
+ 		/*Control Inputs*/
+ 		#ifdef _HAVE_CONTROL_
+ 		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+@@ -742,6 +848,15 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
++					case DamageDbarEnum:
++						if (iomodel->Data(DamageDEnum)){
++							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						}
++						break;
+ 				}
+ 			}
+ 		}
+@@ -769,7 +884,13 @@
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
+ 			this->inputs->AddInput(new PentaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
+ 		}
+-
++		
++		/*Get D*/
++		if (iomodel->Data(DamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new PentaInput(DamageDEnum,nodeinputs,P1Enum));
++		}
++		
+ 		/*Control Inputs*/
+ 		#ifdef _HAVE_CONTROL_
+ 		if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+@@ -784,6 +905,16 @@
+ 							this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 						}
+ 						break;
++					case DamageDbarEnum:
++						if (iomodel->Data(DamageDEnum)){
++							_assert_(iomodel->Data(DamageDEnum));_assert_(iomodel->Data(InversionMinParametersEnum)); _assert_(iomodel->Data(InversionMaxParametersEnum)); 
++							for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+j]-1];
++							for(j=0;j<num_vertices;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							for(j=0;j<num_vertices;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(iomodel->elements[num_vertices*index+j]-1)*num_control_type+i];
++							this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
++						}
++						break;
++
+ 				}
+ 			}
+ 		}
+@@ -803,7 +934,10 @@
+ 				name==MaterialsRheologyBEnum ||
+ 				name==MaterialsRheologyBbarEnum ||
+ 				name==MaterialsRheologyNEnum ||
+-				name==QmuMaterialsRheologyBEnum
++				name==QmuMaterialsRheologyBEnum ||
++				name==DamageDEnum ||
++				name==DamageDbarEnum
++
+ 		){
+ 		return true;
+ 	}
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16167)
+@@ -56,17 +56,17 @@
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+ 		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+-		void       GetViscosityDComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
++		void       GetViscosityDComplement(IssmDouble*, IssmDouble*);
+ 		void       GetViscosityDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void       GetViscosityDerivativeEpsSquareFS(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
+ 		IssmDouble GetA();
+ 		IssmDouble GetB();
+ 		IssmDouble GetBbar();
+-		IssmDouble GetZ(){_error_("not supported");};
+-		IssmDouble GetD(){_error_("not supported");};
+-		IssmDouble GetZbar(){_error_("not supported");};
+-		IssmDouble GetDbar(){_error_("not supported");};
++		IssmDouble GetZ();
++		IssmDouble GetD();
++		IssmDouble GetZbar();
++		IssmDouble GetDbar();
+ 		IssmDouble GetN();
+ 		bool       IsInput(int name);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16166)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16167)
+@@ -76,7 +76,6 @@
+ #include "./Materials/Materials.h"
+ #include "./Materials/Material.h"
+ #include "./Materials/Matice.h"
+-#include "./Materials/Matdamageice.h"
+ #include "./Materials/Matpar.h"
+ 
+ /*Params: */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16167)
+@@ -1560,9 +1560,9 @@
+ 						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+-				case MaterialsRheologyBbarEnum:
+-				case DamageDbarEnum:
+-					/*Material will take care of it*/ break;
++				/*Material will take care of it*/ 
++				case MaterialsRheologyBbarEnum:break;
++				case DamageDbarEnum: break;
+ 				default:
+ 					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+ 			}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16167)
+@@ -2141,12 +2141,9 @@
+ 	Input *input = NULL;
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if      (enum_type==MaterialsRheologyBbarEnum)
+-	 input=this->material->inputs->GetInput(MaterialsRheologyBEnum);
+-	else if (enum_type==MaterialsRheologyZbarEnum)
+-	 input=this->material->inputs->GetInput(MaterialsRheologyZEnum);
+-	else
+-	 input=this->inputs->GetInput(enum_type);
++	if (enum_type==MaterialsRheologyBbarEnum) input=this->material->inputs->GetInput(MaterialsRheologyBEnum);
++	else if (enum_type==DamageDbarEnum) input=this->material->inputs->GetInput(DamageDEnum);
++	else input=this->inputs->GetInput(enum_type);
+ 	//if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found in penta->inputs"); why error out? if the requested input does not exist, we should still 
+ 	//try and output whatever we can instead of just failing.
+ 	if(!input)return;
+@@ -2257,9 +2254,9 @@
+ 						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+ 					}
+ 					break;
+-				case MaterialsRheologyBbarEnum:
+-				case MaterialsRheologyZbarEnum:
+-					/*Material will take care of it*/ break;
++				/*Material will take care of it*/ 
++				case MaterialsRheologyBbarEnum: break;
++				case DamageDbarEnum:break;
+ 				default:
+ 					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+ 			}
+@@ -2666,12 +2663,7 @@
+ 				values[i]=vector[this->vertices[i]->Pid()];
+ 			}
+ 			/*update input*/
+-			if (name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
+-				material->inputs->AddInput(new PentaInput(name,values,P1Enum));
+-			}
+-			else{
+-				this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+-			}
++			this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			return;
+ 
+ 		case VertexSIdEnum: 
+@@ -2679,12 +2671,7 @@
+ 				values[i]=vector[this->vertices[i]->Sid()];
+ 			}
+ 			/*update input*/
+-			if (name==MaterialsRheologyZEnum || name==MaterialsRheologyZbarEnum){
+-				material->inputs->AddInput(new PentaInput(name,values,P1Enum));
+-			}
+-			else{
+-				this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+-			}
++			this->inputs->AddInput(new PentaInput(name,values,P1Enum));
+ 			return;
+ 
+ 		case NodesEnum:
+@@ -3979,8 +3966,8 @@
+ 		case MaterialsRheologyBbarEnum:
+ 			*presponse=this->material->GetBbar();
+ 			break;
+-		case MaterialsRheologyZbarEnum:
+-			*presponse=this->material->GetZbar();
++		case DamageDbarEnum:
++			*presponse=this->material->GetDbar();
+ 			break;
+ 		case VelEnum:
+ 			{
+@@ -5432,11 +5419,10 @@
+ 		if(!IsOnBed()) return;
+ 		input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum);
+ 	}
+-	else if(enum_type==MaterialsRheologyZbarEnum){
++	else if(enum_type==DamageDbarEnum){
+ 		if(!IsOnBed()) return;
+-		input=(Input*)material->inputs->GetInput(MaterialsRheologyZEnum);
++		input=(Input*)material->inputs->GetInput(DamageDEnum);
+ 	}
+-
+ 	else{
+ 		input=inputs->GetInput(enum_type);
+ 	}
+@@ -5455,8 +5441,8 @@
+ 	if(enum_type==MaterialsRheologyBbarEnum){
+ 		input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum);
+ 	}
+-	else if(enum_type==MaterialsRheologyZbarEnum){
+-		input=(Input*)material->inputs->GetInput(MaterialsRheologyZEnum);
++	else if(enum_type==DamageDbarEnum){
++		input=(Input*)material->inputs->GetInput(DamageDEnum);
+ 	}
+ 	else{
+ 		input=inputs->GetInput(enum_type);
+@@ -5477,8 +5463,8 @@
+ 	if(enum_type==MaterialsRheologyBbarEnum){
+ 		input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum);
+ 	}
+-	else if(enum_type==MaterialsRheologyZbarEnum){
+-		input=(Input*)material->inputs->GetInput(MaterialsRheologyZEnum);
++	else if(enum_type==DamageDbarEnum){
++		input=(Input*)material->inputs->GetInput(DamageDEnum);
+ 	}
+ 	else{
+ 		input=inputs->GetInput(enum_type);
+@@ -5524,11 +5510,8 @@
+ 	switch(this->material->ObjectEnum()){
+ 		case MaticeEnum:
+ 			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++			this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 			break;
+-		case MatdamageiceEnum:
+-			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
+-			this->InputDepthAverageAtBase(MaterialsRheologyZEnum,MaterialsRheologyZbarEnum,MaterialsEnum);
+-			break;
+ 		default:
+ 			_error_("material "<<EnumToStringx(this->material->ObjectEnum())<<" not supported");
+ 	}
+@@ -5540,7 +5523,7 @@
+ 
+ 	/*Delete averaged fields*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
+-	this->material->inputs->DeleteInput(MaterialsRheologyZbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ 
+ 	/*clean up and return*/
+ 	return Ke;
+@@ -6136,7 +6119,7 @@
+ 
+ 	/*If on water, skip grad (=0): */
+ 	if(NoIceInElement())return;
+-
++					
+ 	/*First deal with ∂/∂alpha(KU-F)*/
+ 	switch(control_type){
+ 
+@@ -6403,6 +6386,7 @@
+ 
+ 	/*Depth Average B*/
+ 	this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++	this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+@@ -6411,6 +6395,7 @@
+ 
+ 	/*delete Average B*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ 
+ } /*}}}*/
+ /*FUNCTION Penta::GradjBbarHO {{{*/
+@@ -6419,8 +6404,9 @@
+ 	/*Gradient is computed on bed only (Bbar)*/
+ 	if (!IsOnBed()) return;
+ 
+-	/*Depth Average B*/
++	/*Depth Average B and D*/
+ 	this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++	this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0);
+@@ -6429,6 +6415,7 @@
+ 
+ 	/*delete Average B*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ } /*}}}*/
+ /*FUNCTION Penta::GradjBbarFS {{{*/
+ void  Penta::GradjBbarFS(Vector<IssmDouble>* gradient,int control_index){
+@@ -6436,8 +6423,9 @@
+ 	/*Gradient is computed on bed only (Bbar)*/
+ 	if (!IsOnBed()) return;
+ 
+-	/*Depth Average B*/
++	/*Depth Average B and D*/
+ 	this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++	this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 
+ 	/*Collapse element to the base*/
+ 	Tria* tria=(Tria*)SpawnTria(0);
+@@ -6446,6 +6434,7 @@
+ 
+ 	/*delete Average B*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ } /*}}}*/
+ /*FUNCTION Penta::InputControlUpdate{{{*/
+ void  Penta::InputControlUpdate(IssmDouble scalar,bool save_parameter){
+@@ -6465,9 +6454,9 @@
+ 			if (!IsOnBed()) goto cleanup_and_return;
+ 			input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum); _assert_(input);
+ 		}
+-		else if(control_type[i]==MaterialsRheologyZbarEnum){
++		else if(control_type[i]==DamageDbarEnum){
+ 			if (!IsOnBed()) goto cleanup_and_return;
+-			input=(Input*)material->inputs->GetInput(MaterialsRheologyZEnum); _assert_(input);
++			input=(Input*)material->inputs->GetInput(DamageDEnum); _assert_(input);
+ 		}
+ 		else{
+ 			input=(Input*)this->inputs->GetInput(control_type[i]); _assert_(input);
+@@ -6482,8 +6471,8 @@
+ 		if(control_type[i]==MaterialsRheologyBbarEnum){
+ 			this->InputExtrude(MaterialsRheologyBEnum,MaterialsEnum);
+ 		}
+-		else if(control_type[i]==MaterialsRheologyZbarEnum){
+-			this->InputExtrude(MaterialsRheologyZEnum,MaterialsEnum);
++		else if(control_type[i]==DamageDbarEnum){
++			this->InputExtrude(DamageDEnum,MaterialsEnum);
+ 		}
+ 	}
+ 
+@@ -7694,11 +7683,8 @@
+ 	switch(this->material->ObjectEnum()){
+ 		case MaticeEnum:
+ 			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++			this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 			break;
+-		case MatdamageiceEnum:
+-			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
+-			this->InputDepthAverageAtBase(MaterialsRheologyZEnum,MaterialsRheologyZbarEnum,MaterialsEnum);
+-			break;
+ 		default:
+ 			_error_("material "<<EnumToStringx(this->material->ObjectEnum())<<" not supported");
+ 	}
+@@ -7710,7 +7696,7 @@
+ 
+ 	/*Delete averaged fields*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
+-	this->material->inputs->DeleteInput(MaterialsRheologyZbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ 
+ 	/*clean up and return*/
+ 	return Ke;
+@@ -9736,11 +9722,8 @@
+ 	switch(this->material->ObjectEnum()){
+ 		case MaticeEnum:
+ 			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
++			this->InputDepthAverageAtBase(DamageDEnum,DamageDbarEnum,MaterialsEnum);
+ 			break;
+-		case MatdamageiceEnum:
+-			this->InputDepthAverageAtBase(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum,MaterialsEnum);
+-			this->InputDepthAverageAtBase(MaterialsRheologyZEnum,MaterialsRheologyZbarEnum,MaterialsEnum);
+-			break;
+ 		default:
+ 			_error_("material "<<EnumToStringx(this->material->ObjectEnum())<<" not supported");
+ 	}
+@@ -9752,7 +9735,7 @@
+ 
+ 	/*Delete averaged inputs*/
+ 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
+-	this->material->inputs->DeleteInput(MaterialsRheologyZbarEnum);
++	this->material->inputs->DeleteInput(DamageDbarEnum);
+ 
+ 	/*clean up and return*/
+ 	return Ke;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16166)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16167)
+@@ -60,6 +60,7 @@
+ /*Object virtual functions definitions:*/
+ 		/*FUNCTION ControlInput::Echo {{{*/
+ void ControlInput::Echo(void){
++	printf("I'm here\n");
+ 	this->DeepEcho();
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16166)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 16167)
+@@ -1,193 +0,0 @@
+-from fielddisplay import fielddisplay
+-from EnumDefinitions import *
+-from StringToEnum import StringToEnum
+-from checkfield import *
+-from WriteData import *
+-
+-class matdamageice(object):
+-	"""
+-	MATDAMAGEICE class definition
+-
+-	   Usage:
+-	      matdamageice=matdamageice();
+-	"""
+-
+-	def __init__(self,*args):    # {{{
+-		self.rho_ice                    = 0.
+-		self.rho_water                  = 0.
+-		self.rho_freshwater             = 0.
+-		self.mu_water                   = 0.
+-		self.heatcapacity               = 0.
+-		self.latentheat                 = 0.
+-		self.thermalconductivity        = 0.
+-		self.meltingpoint               = 0.
+-		self.beta                       = 0.
+-		self.mixed_layer_capacity       = 0.
+-		self.thermal_exchange_velocity  = 0.
+-		self.rheology_B   = float('NaN')
+-		self.rheology_n   = float('NaN')
+-		self.rheology_law = ''
+-		
+-		#damage: 
+-		self.damage_D   = float('NaN')
+-		self.damage_law   = ''
+-		
+-		#parameters for law 'initial': 
+-		self.damage_c1                  = float('NaN')
+-		self.damage_c2                  = float('NaN')
+-		self.damage_c3                  = float('NaN')
+-		self.damage_c4                  = float('NaN')
+-		self.damage_stress_threshold    = float('NaN')
+-
+-		#gia: 
+-		self.lithosphere_shear_modulus  = 0.
+-		self.lithosphere_density        = 0.
+-		self.mantle_shear_modulus       = 0.
+-		self.mantle_density             = 0.
+-
+-		if not len(args):
+-			self.setdefaultparameters()
+-		else:
+-			raise RuntimeError("constructor not supported")
+-
+-	# }}}
+-	def __repr__(self):    # {{{
+-		s ='   Materials:\n'
+-
+-		s+="%s\n" % fielddisplay(self,"rho_ice","ice density [kg/m^3]")
+-		s+="%s\n" % fielddisplay(self,"rho_water","ocean water density [kg/m^3]")
+-		s+="%s\n" % fielddisplay(self,"rho_freshwater","fresh water density [kg/m^3]")
+-		s+="%s\n" % fielddisplay(self,"mu_water","water viscosity [N s/m^2]")
+-		s+="%s\n" % fielddisplay(self,"heatcapacity","heat capacity [J/kg/K]")
+-		s+="%s\n" % fielddisplay(self,"thermalconductivity","ice thermal conductivity [W/m/K]")
+-		s+="%s\n" % fielddisplay(self,"meltingpoint","melting point of ice at 1atm in K")
+-		s+="%s\n" % fielddisplay(self,"latentheat","latent heat of fusion [J/m^3]")
+-		s+="%s\n" % fielddisplay(self,"beta","rate of change of melting point with pressure [K/Pa]")
+-		s+="%s\n" % fielddisplay(self,"mixed_layer_capacity","mixed layer capacity [W/kg/K]")
+-		s+="%s\n" % fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")
+-		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
+-		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
+-		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson', 'Arrhenius' or 'LliboutryDuval'")
+-		s+="%s\n" % fielddisplay(self,"lithosphere_shear_modulus","Lithosphere shear modulus [Pa]")
+-		s+="%s\n" % fielddisplay(self,"lithosphere_density","Lithosphere density [g/cm^-3]")
+-		s+="%s\n" % fielddisplay(self,"mantle_shear_modulus","Mantle shear modulus [Pa]")
+-		s+="%s\n" % fielddisplay(self,"mantle_density","Mantle density [g/cm^-3]")
+-		s+="%s\n" % fielddisplay(self,"damage_D","damage tensor (scalar for now)")
+-
+-		if (obj.damage_law=='initial'):
+-			s+="%s\n" % fielddisplay(self,"damage_c1","damage parameter 1 ")
+-			s+="%s\n" % fielddisplay(self,"damage_c2","damage parameter 2 ")
+-			s+="%s\n" % fielddisplay(self,"damage_c3","damage parameter 3 ")
+-			s+="%s\n" % fielddisplay(self,"damage_c4","damage parameter 4 ")
+-			s+="%s\n" % fielddisplay(self,"damage_stress_threshold","damage stress threshold [Pa]")
+-
+-		return s
+-	# }}}
+-	def setdefaultparameters(self):    # {{{
+-
+-		#ice density (kg/m^3)
+-		self.rho_ice=917.
+-
+-		#ocean water density (kg/m^3)
+-		self.rho_water=1023.
+-
+-		#fresh water density (kg/m^3)
+-		self.rho_freshwater=1000.
+-
+-		#water viscosity (N.s/m^2)
+-		self.mu_water=0.001787  
+-
+-		#ice heat capacity cp (J/kg/K)
+-		self.heatcapacity=2093.
+-
+-		#ice latent heat of fusion L (J/kg)
+-		self.latentheat=3.34*10**5
+-
+-		#ice thermal conductivity (W/m/K)
+-		self.thermalconductivity=2.4
+-
+-		#the melting point of ice at 1 atmosphere of pressure in K
+-		self.meltingpoint=273.15
+-
+-		#rate of change of melting point with pressure (K/Pa)
+-		self.beta=9.8*10**-8
+-
+-		#mixed layer (ice-water interface) heat capacity (J/kg/K)
+-		self.mixed_layer_capacity=3974.
+-
+-		#thermal exchange velocity (ice-water interface) (m/s)
+-		self.thermal_exchange_velocity=1.00*10**-4
+-
+-		#Rheology law: what is the temperature dependence of B with T
+-		#available: none, paterson and arrhenius
+-		self.rheology_law='Paterson'
+-		
+-		#damage parameters: 
+-		self.damage_law='initial'
+-		self.damage_stress_threshold=0
+-		self.damage_c1=0
+-		self.damage_c2=0
+-		self.damage_c3=0
+-		self.damage_c4=0
+-
+-		# GIA:
+-		self.lithosphere_shear_modulus  = 6.7*10**10;  # (Pa)
+-		self.lithosphere_density        = 3.32;       # (g/cm^-3)
+-		self.mantle_shear_modulus       = 1.45*10**11; # (Pa)
+-		self.mantle_density             = 3.34;       # (g/cm^-3)
+-	# }}}
+-	def checkconsistency(self,md,solution,analyses):    # {{{
+-		md = checkfield(md,'materials.rho_ice','>',0)
+-		md = checkfield(md,'materials.rho_water','>',0)
+-		md = checkfield(md,'materials.rho_freshwater','>',0)
+-		md = checkfield(md,'materials.mu_water','>',0)
+-		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
+-		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
+-		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius','LliboutryDuval'])
+-		md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',[1]);
+-		md = checkfield(md,'materials.lithosphere_density','>',0,'numel',[1]);
+-		md = checkfield(md,'materials.mantle_shear_modulus','>',0,'numel',[1]);
+-		md = checkfield(md,'materials.mantle_density','>',0,'numel',[1]);
+-		
+-		md = checkfield(md,'materials.damage_D','>',0,'size',[md.mesh.numberofvertices])
+-		md = checkfield(md,'materials.damage_law','values',['initial'])
+-		if self.damage_law == 'initial':
+-			md = checkfield(md,'materials.damage_c1','>=',0)
+-			md = checkfield(md,'materials.damage_c2','>=',0)
+-			md = checkfield(md,'materials.damage_c3','>=',0)
+-			md = checkfield(md,'materials.damage_c4','>=',0)
+-			md = checkfield(md,'materials.damage_stress_threshold','>=',0)
+-
+-		return md
+-	# }}}
+-	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer')
+-		WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','rho_water','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+-		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+-
+-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
+-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
+-		
+-		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
+-		if self.damage_law=='initial':
+-			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c2','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c3','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c4','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','stress_threshold','format','Double')
+-	# }}}
+Index: ../trunk-jpl/src/m/classes/matdamageice.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16166)
++++ ../trunk-jpl/src/m/classes/matdamageice.m	(revision 16167)
+@@ -1,209 +0,0 @@
+-%MATDAMAGEICE class definition
+-%
+-%   Usage:
+-%      matdamageice=matdamageice();
+-
+-classdef matdamageice
+-	properties (SetAccess=public)  
+-	% {{{
+-		rho_ice                    = 0.;
+-		rho_water                  = 0.;
+-		rho_freshwater             = 0.;
+-		mu_water                   = 0.;
+-		heatcapacity               = 0.;
+-		latentheat                 = 0.;
+-		thermalconductivity        = 0.;
+-		meltingpoint               = 0.;
+-		beta                       = 0.;
+-		mixed_layer_capacity       = 0.;
+-		thermal_exchange_velocity  = 0.;
+-		rheology_B                 = NaN;
+-		rheology_n                 = NaN;
+-		rheology_law = '';
+-		
+-		%damage 
+-		damage_D                   = NaN;
+-		damage_law                 = '';
+-		
+-		%parameters for law 'initial': 
+-		damage_stress_threshold    = NaN;
+-		damage_c1                  = NaN;
+-		damage_c2                  = NaN;
+-		damage_c3                  = NaN;
+-		damage_c4                  = NaN;
+-
+-		%gia: 
+-		lithosphere_shear_modulus  = 0.;
+-		lithosphere_density        = 0.;
+-		mantle_shear_modulus       = 0.;
+-		mantle_density             = 0.;
+-
+-	end % }}}
+-	methods
+-		function obj = matdamageice(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				case 1
+-					inputstruct=varargin{1};
+-					list1 = properties('matdamageice');
+-					list2 = fieldnames(inputstruct);
+-					for i=1:length(list1)
+-						fieldname = list1{i};
+-						if ismember(fieldname,list2),
+-							obj.(fieldname) = inputstruct.(fieldname);
+-						end
+-					end
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-
+-			%ice density (kg/m^3)
+-			obj.rho_ice=917.;
+-
+-			%ocean water density (kg/m^3)
+-			obj.rho_water=1023.;
+-
+-			%fresh water density (kg/m^3)
+-			obj.rho_freshwater=1000.;
+-
+-			%water viscosity (N.s/m^2)
+-			obj.mu_water=0.001787;  
+-
+-			%ice heat capacity cp (J/kg/K)
+-			obj.heatcapacity=2093.;
+-
+-			%ice latent heat of fusion L (J/kg)
+-			obj.latentheat=3.34*10^5;
+-
+-			%ice thermal conductivity (W/m/K)
+-			obj.thermalconductivity=2.4;
+-
+-			%the melting point of ice at 1 atmosphere of pressure in K
+-			obj.meltingpoint=273.15;
+-
+-			%rate of change of melting point with pressure (K/Pa)
+-			obj.beta=9.8*10^-8;
+-
+-			%mixed layer (ice-water interface) heat capacity (J/kg/K)
+-			obj.mixed_layer_capacity=3974.;
+-
+-			%thermal exchange velocity (ice-water interface) (m/s)
+-			obj.thermal_exchange_velocity=1.00*10^-4;
+-
+-			%Rheology law: what is the temperature dependence of B with T
+-			%available: none, paterson and arrhenius
+-			obj.rheology_law='Paterson';
+-
+-			%damage parameters: 
+-			obj.damage_law='initial';
+-			obj.damage_stress_threshold=0;
+-			obj.damage_c1=0;
+-			obj.damage_c2=0;
+-			obj.damage_c3=0;
+-			obj.damage_c4=0;
+-
+-			%GIA: 
+-			obj.lithosphere_shear_modulus  = 6.7*10^10;  % (Pa)
+-			obj.lithosphere_density        = 3.32;       % (g/cm^-3)
+-			obj.mantle_shear_modulus       = 1.45*10^11; % (Pa)
+-			obj.mantle_density             = 3.34;       % (g/cm^-3)
+-
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-			md = checkfield(md,'materials.rho_ice','>',0);
+-			md = checkfield(md,'materials.rho_water','>',0);
+-			md = checkfield(md,'materials.rho_freshwater','>',0);
+-			md = checkfield(md,'materials.mu_water','>',0);
+-			md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]);
+-			md = checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius' 'LliboutryDuval'});
+-			
+-			md = checkfield(md,'damage.D','>',0,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'damage.law','values',{'undamaged' 'pralong'});
+-			if strcmpi(obj.damage_law,'initial'),
+-				md = checkfield(md,'damage.c1','>=',0);
+-				md = checkfield(md,'damage.c2','>=',0);
+-				md = checkfield(md,'damage.c3','>=',0);
+-				md = checkfield(md,'damage.c4','>=',0);
+-				md = checkfield(md,'damage.stress_threshold','>=',0);
+-			end
+-
+-			if ismember(GiaAnalysisEnum(),analyses),
+-				md = checkfield(md,'materials.lithosphere_shear_modulus','>',0,'numel',1);
+-				md = checkfield(md,'materials.lithosphere_density','>',0,'numel',1);
+-				md = checkfield(md,'materials.mantle_shear_modulus','>',0,'numel',1);
+-				md = checkfield(md,'materials.mantle_density','>',0,'numel',1);
+-			end
+-
+-		end % }}}
+-		function disp(obj) % {{{
+-			disp(sprintf('   Materials:\n'));
+-
+-			fielddisplay(obj,'rho_ice','ice density [kg/m^3]');
+-			fielddisplay(obj,'rho_water','ocean water density [kg/m^3]');
+-			fielddisplay(obj,'rho_freshwater','fresh water density [kg/m^3]');
+-			fielddisplay(obj,'mu_water','water viscosity [N s/m^2]');
+-			fielddisplay(obj,'heatcapacity','heat capacity [J/kg/K]');
+-			fielddisplay(obj,'thermalconductivity','ice thermal conductivity [W/m/K]');
+-			fielddisplay(obj,'meltingpoint','melting point of ice at 1atm in K');
+-			fielddisplay(obj,'latentheat','latent heat of fusion [J/m^3]');
+-			fielddisplay(obj,'beta','rate of change of melting point with pressure [K/Pa]');
+-			fielddisplay(obj,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');
+-			fielddisplay(obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');
+-			fielddisplay(obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');
+-			fielddisplay(obj,'rheology_n','Glen''s flow law exponent');
+-			fielddisplay(obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);
+-			fielddisplay(obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');
+-			fielddisplay(obj,'lithosphere_density','Lithosphere density [g/cm^-3]');
+-			fielddisplay(obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');
+-			fielddisplay(obj,'mantle_density','Mantle density [g/cm^-3]');
+-			fielddisplay(obj,'D','damage tensor (scalar)');
+-			fielddisplay(obj,'law','damage law (string) from {''initial''}');
+-			if strcmpi(obj.damage_law,'initial'),
+-				fielddisplay(obj,'c1','damage parameter 1');
+-				fielddisplay(obj,'c2','damage parameter 2');
+-				fielddisplay(obj,'c3','damage parameter 3');
+-				fielddisplay(obj,'c4','damage parameter 4');
+-				fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]');
+-			end
+-
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rho_ice','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rho_water','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rho_freshwater','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','mu_water','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','heatcapacity','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','latentheat','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','thermalconductivity','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','meltingpoint','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','beta','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+-			WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
+-
+-			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+-			WriteData(fid,'object',obj,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+-			WriteData(fid,'object',obj,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+-			
+-			%damage: 
+-			WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','damage','fieldname','law','format','String');
+-			if strcmpi(obj.damage_law,'pralong'),
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c1','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c2','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c3','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c4','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','stress_threshold','format','Double');
+-			end
+-
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16166)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16167)
+@@ -115,7 +115,7 @@
+ 			md = checkfield(md,'inversion.tao','values',[0 1]);
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsDamageDbar' 'Vx' 'Vy' 'Thickness'});
++				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness'});
+ 			md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 16166)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 16167)
+@@ -123,7 +123,7 @@
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+ 		md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
+-		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsDamageDbar','Vx','Vy'])
++		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy'])
+ 		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',1)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16166)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16167)
+@@ -55,8 +55,8 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			
++			md = checkfield(md,'damage.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
+ 			if obj.isdamage,
+-				md = checkfield(md,'damage.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
+ 				md = checkfield(md,'damage.law','values',{'undamaged','pralong'});
+ 			end
+ 			if strcmpi(obj.law,'pralong'),
+@@ -85,8 +85,8 @@
+ 		function marshall(obj,md,fid) % {{{
+ 		
+ 			WriteData(fid,'object',obj,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
+ 			if obj.isdamage,
+-				WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
+ 				WriteData(fid,'object',obj,'class','damage','fieldname','law','format','String');
+ 			end
+ 			if strcmpi(obj.law,'pralong'),
+Index: ../trunk-jpl/src/m/enum/MatdamageiceEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MatdamageiceEnum.m	(revision 16166)
++++ ../trunk-jpl/src/m/enum/MatdamageiceEnum.m	(revision 16167)
+@@ -1,11 +0,0 @@
+-function macro=MatdamageiceEnum()
+-%MATDAMAGEICEENUM - Enum of Matdamageice
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MatdamageiceEnum()
+-
+-macro=StringToEnum('Matdamageice');
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyZbarEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyZbarEnum.m	(revision 16166)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyZbarEnum.m	(revision 16167)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsRheologyZbarEnum()
+-%MATERIALSRHEOLOGYZBARENUM - Enum of MaterialsRheologyZbar
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsRheologyZbarEnum()
+-
+-macro=StringToEnum('MaterialsRheologyZbar');
+Index: ../trunk-jpl/src/m/enum/MaterialsRheologyZEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaterialsRheologyZEnum.m	(revision 16166)
++++ ../trunk-jpl/src/m/enum/MaterialsRheologyZEnum.m	(revision 16167)
+@@ -1,11 +0,0 @@
+-function macro=MaterialsRheologyZEnum()
+-%MATERIALSRHEOLOGYZENUM - Enum of MaterialsRheologyZ
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaterialsRheologyZEnum()
+-
+-macro=StringToEnum('MaterialsRheologyZ');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16166)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16167)
+@@ -151,8 +151,6 @@
+ def MaterialsRheologyBbarEnum(): return StringToEnum("MaterialsRheologyBbar")[0]
+ def MaterialsRheologyLawEnum(): return StringToEnum("MaterialsRheologyLaw")[0]
+ def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
+-def MaterialsRheologyZEnum(): return StringToEnum("MaterialsRheologyZ")[0]
+-def MaterialsRheologyZbarEnum(): return StringToEnum("MaterialsRheologyZbar")[0]
+ def DamageDEnum(): return StringToEnum("DamageD")[0]
+ def DamageDbarEnum(): return StringToEnum("DamageDbar")[0]
+ def DamageIsdamageEnum(): return StringToEnum("DamageIsdamage")[0]
+@@ -364,7 +362,6 @@
+ def SSA2dIceFrontEnum(): return StringToEnum("SSA2dIceFront")[0]
+ def SSA3dIceFrontEnum(): return StringToEnum("SSA3dIceFront")[0]
+ def MaticeEnum(): return StringToEnum("Matice")[0]
+-def MatdamageiceEnum(): return StringToEnum("Matdamageice")[0]
+ def MatparEnum(): return StringToEnum("Matpar")[0]
+ def NodeEnum(): return StringToEnum("Node")[0]
+ def NumericalfluxEnum(): return StringToEnum("Numericalflux")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16167-16168.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16167-16168.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16167-16168.diff	(revision 16556)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/examples/SquareIceShelf/Square.par
+===================================================================
+--- ../trunk-jpl/examples/SquareIceShelf/Square.par	(revision 16167)
++++ ../trunk-jpl/examples/SquareIceShelf/Square.par	(revision 16168)
+@@ -10,9 +10,8 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ disp('      creating drag');
+-pos=find(md.mask.vertexonfloatingice);
+ md.friction.coefficient=200*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(pos)=0;
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+Index: ../trunk-jpl/examples/Jakobshavn/Jks.par
+===================================================================
+--- ../trunk-jpl/examples/Jakobshavn/Jks.par	(revision 16167)
++++ ../trunk-jpl/examples/Jakobshavn/Jks.par	(revision 16168)
+@@ -43,8 +43,7 @@
+ 
+ disp('   Construct basal friction parameters');
+ md.friction.coefficient=30*ones(md.mesh.numberofvertices,1);
+-pos=find(md.mask.vertexonfloatingice);
+-md.friction.coefficient(pos)=0; %no friction applied on floating ice
++md.friction.coefficient(find(md.mask.groundedice_levelset<0.))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16168-16169.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16168-16169.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16168-16169.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16168)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16169)
+@@ -60,7 +60,6 @@
+ /*Object virtual functions definitions:*/
+ 		/*FUNCTION ControlInput::Echo {{{*/
+ void ControlInput::Echo(void){
+-	printf("I'm here\n");
+ 	this->DeepEcho();
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16169-16170.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16169-16170.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16169-16170.diff	(revision 16556)
@@ -0,0 +1,479 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetMarineIceSheetBC import *
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -29,7 +29,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      creating surface mass balance"
+ md.surfaceforcings.mass_balance=0.2*numpy.ones((md.mesh.numberofvertices,1))    #0m/a
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16169)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16170)
+@@ -2,8 +2,8 @@
+ import numpy
+ import copy
+ import inspect
+-from paterson import *
+-from verbose import *
++from paterson import paterson
++from verbose import paterson
+ 
+ #Start defining model parameters here
+ 
+@@ -68,7 +68,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=-10.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16170)
+@@ -1,11 +1,11 @@
+ import os.path
+ import inspect
+ import netCDF4
+-from numpy import *
+-from verbose import *
++import numpy
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetIceShelfBC import *
++from paterson import paterson
++from SetIceShelfBC import SetIceShelfBC
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -38,8 +38,8 @@
+ 
+ [md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
+ [md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
+-md.initialization.vz=zeros((md.mesh.numberofvertices,1))
+-md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #dbg - begin
+ #print '...vx:'
+@@ -59,7 +59,7 @@
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/RoundSheetEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 16169)
++++ ../trunk-jpl/test/Par/RoundSheetEISMINT.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetMarineIceSheetBC import *
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ print "      creating thickness"
+@@ -24,7 +24,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      creating surface mass balance"
+ smb_max=0.5    #m/yr
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16170)
+@@ -2,10 +2,10 @@
+ import netCDF4
+ import numpy
+ import inspect
+-from verbose import *
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetIceShelfBC import *
++from paterson import paterson
++from SetIceShelfBC import SetIceShelfBC
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -40,7 +40,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Surface mass balance and basal melting
+ md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 16170)
+@@ -1,6 +1,6 @@
+ import numpy
+-from paterson import *
+-from SetMarineIceSheetBC import *
++from paterson import paterson
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -31,7 +31,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      creating surface mass balance"
+ md.surfaceforcings.mass_balance=numpy.ones((md.mesh.numberofvertices,1))/md.constants.yts    #1m/a
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 16169)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 16170)
+@@ -1,11 +1,11 @@
+ import os.path
+ import inspect
+ import netCDF4
+-from numpy import *
+-from verbose import *
++import numpy
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetMarineIceSheetBC import *
++from paterson import paterson 
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Start defining model parameters here
+ 
+@@ -27,8 +27,8 @@
+ md.geometry.bed=md.geometry.surface-md.geometry.thickness
+ md.initialization.vx=md.inversion.vx_obs
+ md.initialization.vy=md.inversion.vy_obs
+-md.initialization.vz=zeros((md.mesh.numberofvertices,1))
+-md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Materials
+ md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
+@@ -37,7 +37,7 @@
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 16169)
++++ ../trunk-jpl/test/Par/RoundSheetStaticEISMINT.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetMarineIceSheetBC import *
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ print "      creating thickness"
+ hmin=0.01
+@@ -28,7 +28,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      creating surface mass balance"
+ smb_max=0.5    #m/yr
+Index: ../trunk-jpl/test/Par/ISMIPB.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPB.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPB.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -19,7 +19,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+Index: ../trunk-jpl/test/Par/ISMIPD.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPD.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPD.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -19,7 +19,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+Index: ../trunk-jpl/test/Par/ISMIPF.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPF.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPF.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ md.verbose=2
+@@ -21,7 +21,7 @@
+ md.materials.rheology_law='None'
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 16169)
++++ ../trunk-jpl/test/Par/79North.py	(revision 16170)
+@@ -1,11 +1,11 @@
+ import os.path
+ import inspect
+ import netCDF4
+-from numpy import *
+-from verbose import *
++import numpy
++from verbose import verbose 
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetMarineIceSheetBC import *
++from paterson import paterson 
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Start defining model parameters here
+ 
+@@ -33,7 +33,7 @@
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+ md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
+@@ -42,7 +42,7 @@
+ md.friction.q=ones((md.mesh.numberofelements,1))
+ 
+ #Ice shelf melting and surface mass balance 
+-md.basalforcings.melting_rate=zeros((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ md.basalforcings.melting_rate[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+ md.surfaceforcings.mass_balance=15*numpy.ones((md.mesh.numberofvertices,1))
+ 
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16170)
+@@ -1,11 +1,11 @@
+ import os.path
+ import inspect
+ import netCDF4
+-from numpy import *
+-from verbose import *
++import numpy
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetMarineIceSheetBC import *
++from paterson import paterson 
++from SetMarineIceSheetBC import SetMarineIceSheetBC
+ 
+ #Start defining model parameters here
+ 
+@@ -34,8 +34,8 @@
+ 
+ [md.initialization.vx]  = InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
+ [md.initialization.vy]  = InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
+-md.initialization.vz=zeros((md.mesh.numberofvertices,1))
+-md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Materials
+ md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
+@@ -43,7 +43,7 @@
+ md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Accumulation and melting
+ md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16170)
+@@ -1,11 +1,11 @@
+ import os.path
+ import inspect
+ import netCDF4
+-from numpy import *
+-from verbose import *
++import numpy
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetIceShelfBC import *
++from paterson import paterson
++from SetIceShelfBC import SetIceShelfBC
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -38,8 +38,8 @@
+ 
+ [md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
+ [md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
+-md.initialization.vz=zeros((md.mesh.numberofvertices,1))
+-md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #dbg - begin
+ #print '...vx:'
+@@ -59,7 +59,7 @@
+ md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+ md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/ISMIPA.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPA.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPA.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -19,7 +19,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model"
+ #Create node on boundary first (because we cannot use mesh)
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16169)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16170)
+@@ -2,10 +2,10 @@
+ import netCDF4
+ import numpy
+ import inspect
+-from verbose import *
++from verbose import verbose
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+-from paterson import *
+-from SetIceSheetBC import *
++from paterson import paterson
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Start defining model parameters here
+ 
+@@ -40,7 +40,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+ md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/ISMIPC.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPC.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPC.py	(revision 16170)
+@@ -1,5 +1,5 @@
+ import numpy
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -20,7 +20,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
+Index: ../trunk-jpl/test/Par/ISMIPE.py
+===================================================================
+--- ../trunk-jpl/test/Par/ISMIPE.py	(revision 16169)
++++ ../trunk-jpl/test/Par/ISMIPE.py	(revision 16170)
+@@ -1,6 +1,6 @@
+ import numpy
+ import netCDF4
+-from SetIceSheetBC import *
++from SetIceSheetBC import SetIceSheetBC
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -31,7 +31,7 @@
+ md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+-md.damage.D=zeros((md.mesh.numberofvertices,1))
++md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ print "      boundary conditions for stressbalance model:"
+ #Create node on boundary first (because we can not use mesh)
Index: issm/oecreview/Archive/16133-16554/ISSM-16170-16171.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16170-16171.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16170-16171.diff	(revision 16556)
@@ -0,0 +1,217 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16170)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16171)
+@@ -22,8 +22,8 @@
+ #Initial velocity and pressure
+ iVelF = netCDF4.Dataset('../Data/SquareShelf.nc','r')
+ 
+-x=reshape(iVelF.variables['x'][:],(-1))
+-y=reshape(iVelF.variables['y'][:],(-1))
++x=numpy.reshape(iVelF.variables['x'][:],(-1))
++y=numpy.reshape(iVelF.variables['y'][:],(-1))
+ vx=iVelF.variables['vx'][:]
+ vy=iVelF.variables['vy'][:]
+ index=iVelF.variables['index'][:].astype(int)
+@@ -54,18 +54,18 @@
+ 
+ 
+ #Materials
+-md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
++md.initialization.temperature = (273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n = 3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+ md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient = 20.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+-md.friction.p = ones((md.mesh.numberofelements,1))
+-md.friction.q = ones((md.mesh.numberofelements,1))
++md.friction.p = numpy.ones((md.mesh.numberofelements,1))
++md.friction.q = numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+ md.stressbalance.viscosity_overshoot = 0.3
+@@ -76,7 +76,7 @@
+ md.stressbalance.restol = 0.10
+ md.steadystate.reltol = 0.02
+ md.stressbalance.reltol = 0.02
+-md.stressbalance.abstol = nan
++md.stressbalance.abstol = float('nan')
+ md.timestepping.time_step = 1.
+ md.timestepping.final_time = 3.
+ 
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 16170)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 16171)
+@@ -11,8 +11,8 @@
+ 
+ #Geometry and observation
+ f = netCDF4.Dataset('../Data/Pig.nc','r')
+-x         = reshape(f.variables['x'][:],(-1))
+-y         = reshape(f.variables['y'][:],(-1))
++x         = numpy.reshape(f.variables['x'][:],(-1))
++y         = numpy.reshape(f.variables['y'][:],(-1))
+ vx_obs    = f.variables['vx_obs'][:]
+ vy_obs    = f.variables['vy_obs'][:]
+ index     = f.variables['index'][:]
+@@ -31,19 +31,19 @@
+ md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Materials
+-md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Damage
+ md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient=50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+-md.friction.p=ones((md.mesh.numberofelements,1))
+-md.friction.q=ones((md.mesh.numberofelements,1))
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+ md.stressbalance.viscosity_overshoot=0.3
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 16170)
++++ ../trunk-jpl/test/Par/79North.py	(revision 16171)
+@@ -11,8 +11,8 @@
+ 
+ #Geometry and observation
+ f         = netCDF4.Dataset('../Data/79North.nc','r')
+-x         = reshape(f.variables['x'][:],(-1))
+-y         = reshape(f.variables['y'][:],(-1))
++x         = numpy.reshape(f.variables['x'][:],(-1))
++y         = numpy.reshape(f.variables['y'][:],(-1))
+ vx        = f.variables['vx'][:]
+ vy        = f.variables['vy'][:]
+ index     = f.variables['index'][:]
+@@ -27,19 +27,19 @@
+ md.geometry.bed         = md.geometry.surface-md.geometry.thickness
+ 
+ #Materials
+-md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ md.initialization.temperature=md.initialization.temperature
+ 
+ #Damage
+ md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient=50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+-md.friction.p=ones((md.mesh.numberofelements,1))
+-md.friction.q=ones((md.mesh.numberofelements,1))
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Ice shelf melting and surface mass balance 
+ md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16170)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16171)
+@@ -25,8 +25,8 @@
+ 
+ #Initial velocity 
+ f = netCDF4.Dataset('../Data/SquareSheetShelf.nc','r')
+-x         = reshape(f.variables['x'][:],(-1))
+-y         = reshape(f.variables['y'][:],(-1))
++x         = numpy.reshape(f.variables['x'][:],(-1))
++y         = numpy.reshape(f.variables['y'][:],(-1))
+ vx        = f.variables['vx'][:]
+ vy        = f.variables['vy'][:]
+ index     = f.variables['index'][:]
+@@ -38,9 +38,9 @@
+ md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Materials
+-md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+ md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+@@ -50,10 +50,10 @@
+ md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-md.friction.coefficient=20.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+-md.friction.p=ones((md.mesh.numberofelements,1))
+-md.friction.q=ones((md.mesh.numberofelements,1))
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+ md.stressbalance.viscosity_overshoot=0.0
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16170)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16171)
+@@ -22,8 +22,8 @@
+ #Initial velocity and pressure
+ iVelF = netCDF4.Dataset('../Data/SquareShelf.nc','r')
+ 
+-x=reshape(iVelF.variables['x'][:],(-1))
+-y=reshape(iVelF.variables['y'][:],(-1))
++x=numpy.reshape(iVelF.variables['x'][:],(-1))
++y=numpy.reshape(iVelF.variables['y'][:],(-1))
+ vx=iVelF.variables['vx'][:]
+ vy=iVelF.variables['vy'][:]
+ index=iVelF.variables['index'][:].astype(int)
+@@ -54,18 +54,18 @@
+ 
+ 
+ #Materials
+-md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
++md.initialization.temperature = (273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n = 3.*numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Damage
+ md.damage.D=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #Friction
+-md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient = 20.*numpy.ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[numpy.nonzero(md.mask.groundedice_levelset<0.)[0]]=0.
+-md.friction.p = ones((md.mesh.numberofelements,1))
+-md.friction.q = ones((md.mesh.numberofelements,1))
++md.friction.p = numpy.ones((md.mesh.numberofelements,1))
++md.friction.q = numpy.ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+ md.stressbalance.viscosity_overshoot = 0.3
+@@ -76,7 +76,7 @@
+ md.stressbalance.restol = 0.10
+ md.steadystate.reltol = 0.02
+ md.stressbalance.reltol = 0.02
+-md.stressbalance.abstol = nan
++md.stressbalance.abstol = float('nan')
+ md.timestepping.time_step = 1.
+ md.timestepping.final_time = 3.
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16171-16172.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16171-16172.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16171-16172.diff	(revision 16556)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 16171)
++++ ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 16172)
+@@ -26,7 +26,7 @@
+ 	int my_rank = 0;
+ 	ISSM_MPI_Comm_rank(comm,&my_rank);
+ 	if(!my_rank) printf("\n");
+-	if(!my_rank) printf("Ice Sheet System Model (%s) version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
++	if(!my_rank) printf("%s version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
+ 	if(!my_rank) printf("(website: %s contact: %s)\n",PACKAGE_URL,PACKAGE_BUGREPORT);
+ 	if(!my_rank) printf("\n");
+ 
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16171)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16172)
+@@ -82,6 +82,31 @@
+ 		svalue =xNew<char>(strlen(ISSM_PREFIX)+1);
+ 		xMemCpy<char>(svalue,ISSM_PREFIX,(strlen(ISSM_PREFIX)+1));
+ 	}
++	else if(strcmp(name,"PACKAGE_NAME")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(PACKAGE_NAME)+1);
++		xMemCpy<char>(svalue,PACKAGE_NAME,(strlen(PACKAGE_NAME)+1));
++	}
++	else if(strcmp(name,"PACKAGE_VERSION")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(PACKAGE_VERSION)+1);
++		xMemCpy<char>(svalue,PACKAGE_VERSION,(strlen(PACKAGE_VERSION)+1));
++	}
++	else if(strcmp(name,"PACKAGE_URL")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(PACKAGE_URL)+1);
++		xMemCpy<char>(svalue,PACKAGE_URL,(strlen(PACKAGE_URL)+1));
++	}
++	else if(strcmp(name,"PACKAGE_BUGREPORT")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(PACKAGE_BUGREPORT)+1);
++		xMemCpy<char>(svalue,PACKAGE_BUGREPORT,(strlen(PACKAGE_BUGREPORT)+1));
++	}
++	else if(strcmp(name,"PACKAGE_BUILD_DATE")==0){
++		isstring = true;
++		svalue =xNew<char>(strlen(PACKAGE_BUILD_DATE)+1);
++		xMemCpy<char>(svalue,PACKAGE_BUILD_DATE,(strlen(PACKAGE_BUILD_DATE)+1));
++	}
+ 	else{
+ 		_error_("variable " << name << " not supported yet");
+ 	}
+Index: ../trunk-jpl/src/m/dev/issmversion.m
+===================================================================
+--- ../trunk-jpl/src/m/dev/issmversion.m	(revision 0)
++++ ../trunk-jpl/src/m/dev/issmversion.m	(revision 16172)
+@@ -0,0 +1,20 @@
++function issmversion(),
++%ISSMVERSION - display ISSM version
++%
++%   Usage:
++%      issmversion()
++
++
++if exist('IssmConfig')~=3,
++	error('ISSM not correctly installed. IssmConfig not found');
++end
++
++disp([' ']);
++disp([IssmConfig('PACKAGE_NAME') ' Version ' IssmConfig('PACKAGE_VERSION')]);
++disp(['(website: ' IssmConfig('PACKAGE_URL') ' contact:' IssmConfig('PACKAGE_BUGREPORT') ')']);
++disp([' ']);
++disp(['Build date: ' IssmConfig('PACKAGE_BUILD_DATE')]);
++disp(['Copyright (c) 2009-2013 California Institute of Technology']);
++disp([' ']);
++disp(['    to get started type: issmdoc']);
++disp([' ']);
Index: issm/oecreview/Archive/16133-16554/ISSM-16172-16173.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16172-16173.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16172-16173.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16172)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16173)
+@@ -7,6 +7,18 @@
+ 	AC_MSG_NOTICE(============================================================================)
+ 
+ 	dnl ISSM's internal options
++	dnl Build info{{{
++	AC_PATH_PROGS(DATE, date)
++	AC_MSG_CHECKING(for build date)
++	dnl system checks require uname
++	if test "$DATE" ; then
++		PACKAGE_DATE=`date`
++	else
++		PACKAGE_DATE="unknown date"
++	fi
++	AC_DEFINE_UNQUOTED(PACKAGE_BUILD_DATE,"$PACKAGE_DATE", Build date)
++	AC_MSG_RESULT($PACKAGE_DATE)
++	dnl }}}
+ 	dnl Debugging {{{
+ 	AC_ARG_ENABLE([debugging],                                        dnl feature
+ 		AS_HELP_STRING([--enable-debugging],[turn debug support on]),  dnl help string
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 16172)
++++ ../trunk-jpl/configure.ac	(revision 16173)
+@@ -1,7 +1,7 @@
+ # Process this file with autoconf to produce a configure script.
+ 
+ #AUTOCONF
+-AC_INIT([ISSM],[4.4],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
++AC_INIT([Ice Sheet System Model (ISSM)],[4.4],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
+ AC_CONFIG_AUX_DIR([./aux-config])         #Put config files in aux-config
+ AC_CONFIG_MACRO_DIR([m4])                 #m4 macros are located in m4
+ m4_include([m4/issm_options.m4])
Index: issm/oecreview/Archive/16133-16554/ISSM-16173-16174.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16173-16174.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16173-16174.diff	(revision 16556)
@@ -0,0 +1,1682 @@
+Index: ../trunk-jpl/config.sub
+===================================================================
+--- ../trunk-jpl/config.sub	(revision 16173)
++++ ../trunk-jpl/config.sub	(revision 16174)
+@@ -1,1677 +0,0 @@
+-#! /bin/sh
+-# Configuration validation subroutine script.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+-#   Free Software Foundation, Inc.
+-
+-timestamp='2008-09-08'
+-
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine.  It does not imply ALL GNU software can.
+-#
+-# This file is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
+-#
+-# As a special exception to the GNU General Public License, if you
+-# distribute this file as part of a program that contains a
+-# configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Please send patches to <config-patches@gnu.org>.  Submit a context
+-# diff and a properly formatted ChangeLog entry.
+-#
+-# Configuration subroutine to validate and canonicalize a configuration type.
+-# Supply the specified configuration type as an argument.
+-# If it is invalid, we print an error message on stderr and exit with code 1.
+-# Otherwise, we print the canonical config type on stdout and succeed.
+-
+-# This file is supposed to be the same for all GNU packages
+-# and recognize all the CPU types, system types and aliases
+-# that are meaningful with *any* GNU software.
+-# Each package is responsible for reporting which valid configurations
+-# it does not support.  The user should be able to distinguish
+-# a failure to support a valid configuration from a meaningless
+-# configuration.
+-
+-# The goal of this file is to map all the various variations of a given
+-# machine specification into a single specification in the form:
+-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+-# or in some cases, the newer four-part form:
+-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+-# It is wrong to echo any other type of specification.
+-
+-me=`echo "$0" | sed -e 's,.*/,,'`
+-
+-usage="\
+-Usage: $0 [OPTION] CPU-MFR-OPSYS
+-       $0 [OPTION] ALIAS
+-
+-Canonicalize a configuration name.
+-
+-Operation modes:
+-  -h, --help         print this help, then exit
+-  -t, --time-stamp   print date of last modification, then exit
+-  -v, --version      print version number, then exit
+-
+-Report bugs and patches to <config-patches@gnu.org>."
+-
+-version="\
+-GNU config.sub ($timestamp)
+-
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+-
+-This is free software; see the source for copying conditions.  There is NO
+-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+-
+-help="
+-Try \`$me --help' for more information."
+-
+-# Parse command line
+-while test $# -gt 0 ; do
+-  case $1 in
+-    --time-stamp | --time* | -t )
+-       echo "$timestamp" ; exit ;;
+-    --version | -v )
+-       echo "$version" ; exit ;;
+-    --help | --h* | -h )
+-       echo "$usage"; exit ;;
+-    -- )     # Stop option processing
+-       shift; break ;;
+-    - )	# Use stdin as input.
+-       break ;;
+-    -* )
+-       echo "$me: invalid option $1$help"
+-       exit 1 ;;
+-
+-    *local*)
+-       # First pass through any local machine types.
+-       echo $1
+-       exit ;;
+-
+-    * )
+-       break ;;
+-  esac
+-done
+-
+-case $# in
+- 0) echo "$me: missing argument$help" >&2
+-    exit 1;;
+- 1) ;;
+- *) echo "$me: too many arguments$help" >&2
+-    exit 1;;
+-esac
+-
+-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+-# Here we must recognize all the valid KERNEL-OS combinations.
+-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+-case $maybe_os in
+-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+-  storm-chaos* | os2-emx* | rtmk-nova*)
+-    os=-$maybe_os
+-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+-    ;;
+-  *)
+-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+-    if [ $basic_machine != $1 ]
+-    then os=`echo $1 | sed 's/.*-/-/'`
+-    else os=; fi
+-    ;;
+-esac
+-
+-### Let's recognize common machines as not being operating systems so
+-### that things like config.sub decstation-3100 work.  We also
+-### recognize some manufacturers as not being operating systems, so we
+-### can provide default operating systems below.
+-case $os in
+-	-sun*os*)
+-		# Prevent following clause from handling this invalid input.
+-		;;
+-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+-	-apple | -axis | -knuth | -cray)
+-		os=
+-		basic_machine=$1
+-		;;
+-	-sim | -cisco | -oki | -wec | -winbond)
+-		os=
+-		basic_machine=$1
+-		;;
+-	-scout)
+-		;;
+-	-wrs)
+-		os=-vxworks
+-		basic_machine=$1
+-		;;
+-	-chorusos*)
+-		os=-chorusos
+-		basic_machine=$1
+-		;;
+- 	-chorusrdb)
+- 		os=-chorusrdb
+-		basic_machine=$1
+- 		;;
+-	-hiux*)
+-		os=-hiuxwe2
+-		;;
+-	-sco6)
+-		os=-sco5v6
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco5)
+-		os=-sco3.2v5
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco4)
+-		os=-sco3.2v4
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco3.2.[4-9]*)
+-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco3.2v[4-9]*)
+-		# Don't forget version if it is 3.2v4 or newer.
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco5v6*)
+-		# Don't forget version if it is 3.2v4 or newer.
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-sco*)
+-		os=-sco3.2v2
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-udk*)
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-isc)
+-		os=-isc2.2
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-clix*)
+-		basic_machine=clipper-intergraph
+-		;;
+-	-isc*)
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+-		;;
+-	-lynx*)
+-		os=-lynxos
+-		;;
+-	-ptx*)
+-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+-		;;
+-	-windowsnt*)
+-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+-		;;
+-	-psos*)
+-		os=-psos
+-		;;
+-	-mint | -mint[0-9]*)
+-		basic_machine=m68k-atari
+-		os=-mint
+-		;;
+-esac
+-
+-# Decode aliases for certain CPU-COMPANY combinations.
+-case $basic_machine in
+-	# Recognize the basic CPU types without company name.
+-	# Some are omitted here because they have special meanings below.
+-	1750a | 580 \
+-	| a29k \
+-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+-	| am33_2.0 \
+-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+-	| bfin \
+-	| c4x | clipper \
+-	| d10v | d30v | dlx | dsp16xx \
+-	| fido | fr30 | frv \
+-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+-	| i370 | i860 | i960 | ia64 \
+-	| ip2k | iq2000 \
+-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+-	| maxq | mb | microblaze | mcore | mep | metag \
+-	| mips | mipsbe | mipseb | mipsel | mipsle \
+-	| mips16 \
+-	| mips64 | mips64el \
+-	| mips64octeon | mips64octeonel \
+-	| mips64orion | mips64orionel \
+-	| mips64r5900 | mips64r5900el \
+-	| mips64vr | mips64vrel \
+-	| mips64vr4100 | mips64vr4100el \
+-	| mips64vr4300 | mips64vr4300el \
+-	| mips64vr5000 | mips64vr5000el \
+-	| mips64vr5900 | mips64vr5900el \
+-	| mipsisa32 | mipsisa32el \
+-	| mipsisa32r2 | mipsisa32r2el \
+-	| mipsisa64 | mipsisa64el \
+-	| mipsisa64r2 | mipsisa64r2el \
+-	| mipsisa64sb1 | mipsisa64sb1el \
+-	| mipsisa64sr71k | mipsisa64sr71kel \
+-	| mipstx39 | mipstx39el \
+-	| mn10200 | mn10300 \
+-	| mt \
+-	| msp430 \
+-	| nios | nios2 \
+-	| ns16k | ns32k \
+-	| or32 \
+-	| pdp10 | pdp11 | pj | pjl \
+-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+-	| pyramid \
+-	| score \
+-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+-	| sh64 | sh64le \
+-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+-	| spu | strongarm \
+-	| tahoe | thumb | tic4x | tic80 | tron \
+-	| v850 | v850e \
+-	| we32k \
+-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+-	| z8k | z80)
+-		basic_machine=$basic_machine-unknown
+-		;;
+-	m6811 | m68hc11 | m6812 | m68hc12)
+-		# Motorola 68HC11/12.
+-		basic_machine=$basic_machine-unknown
+-		os=-none
+-		;;
+-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+-		;;
+-	ms1)
+-		basic_machine=mt-unknown
+-		;;
+-
+-	# We use `pc' rather than `unknown'
+-	# because (1) that's what they normally are, and
+-	# (2) the word "unknown" tends to confuse beginning users.
+-	i*86 | x86_64)
+-	  basic_machine=$basic_machine-pc
+-	  ;;
+-	# Object if more than one company name word.
+-	*-*-*)
+-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+-		exit 1
+-		;;
+-	# Recognize the basic CPU types with company name.
+-	580-* \
+-	| a29k-* \
+-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+-	| avr-* | avr32-* \
+-	| bfin-* | bs2000-* \
+-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+-	| clipper-* | craynv-* | cydra-* \
+-	| d10v-* | d30v-* | dlx-* \
+-	| elxsi-* \
+-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+-	| h8300-* | h8500-* \
+-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+-	| i*86-* | i860-* | i960-* | ia64-* \
+-	| ip2k-* | iq2000-* \
+-	| m32c-* | m32r-* | m32rle-* \
+-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+-	| mips16-* \
+-	| mips64-* | mips64el-* \
+-	| mips64octeon-* | mips64octeonel-* \
+-	| mips64orion-* | mips64orionel-* \
+-	| mips64r5900-* | mips64r5900el-* \
+-	| mips64vr-* | mips64vrel-* \
+-	| mips64vr4100-* | mips64vr4100el-* \
+-	| mips64vr4300-* | mips64vr4300el-* \
+-	| mips64vr5000-* | mips64vr5000el-* \
+-	| mips64vr5900-* | mips64vr5900el-* \
+-	| mipsisa32-* | mipsisa32el-* \
+-	| mipsisa32r2-* | mipsisa32r2el-* \
+-	| mipsisa64-* | mipsisa64el-* \
+-	| mipsisa64r2-* | mipsisa64r2el-* \
+-	| mipsisa64sb1-* | mipsisa64sb1el-* \
+-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+-	| mipstx39-* | mipstx39el-* \
+-	| mmix-* \
+-	| mt-* \
+-	| msp430-* \
+-	| nios-* | nios2-* \
+-	| none-* | np1-* | ns16k-* | ns32k-* \
+-	| orion-* \
+-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+-	| pyramid-* \
+-	| romp-* | rs6000-* \
+-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+-	| sparclite-* \
+-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+-	| tahoe-* | thumb-* \
+-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+-	| tron-* \
+-	| v850-* | v850e-* | vax-* \
+-	| we32k-* \
+-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+-	| xstormy16-* | xtensa*-* \
+-	| ymp-* \
+-	| z8k-* | z80-*)
+-		;;
+-	# Recognize the basic CPU types without company name, with glob match.
+-	xtensa*)
+-		basic_machine=$basic_machine-unknown
+-		;;
+-	# Recognize the various machine names and aliases which stand
+-	# for a CPU type and a company and sometimes even an OS.
+-	386bsd)
+-		basic_machine=i386-unknown
+-		os=-bsd
+-		;;
+-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+-		basic_machine=m68000-att
+-		;;
+-	3b*)
+-		basic_machine=we32k-att
+-		;;
+-	a29khif)
+-		basic_machine=a29k-amd
+-		os=-udi
+-		;;
+-    	abacus)
+-		basic_machine=abacus-unknown
+-		;;
+-	adobe68k)
+-		basic_machine=m68010-adobe
+-		os=-scout
+-		;;
+-	alliant | fx80)
+-		basic_machine=fx80-alliant
+-		;;
+-	altos | altos3068)
+-		basic_machine=m68k-altos
+-		;;
+-	am29k)
+-		basic_machine=a29k-none
+-		os=-bsd
+-		;;
+-	amd64)
+-		basic_machine=x86_64-pc
+-		;;
+-	amd64-*)
+-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	amdahl)
+-		basic_machine=580-amdahl
+-		os=-sysv
+-		;;
+-	amiga | amiga-*)
+-		basic_machine=m68k-unknown
+-		;;
+-	amigaos | amigados)
+-		basic_machine=m68k-unknown
+-		os=-amigaos
+-		;;
+-	amigaunix | amix)
+-		basic_machine=m68k-unknown
+-		os=-sysv4
+-		;;
+-	apollo68)
+-		basic_machine=m68k-apollo
+-		os=-sysv
+-		;;
+-	apollo68bsd)
+-		basic_machine=m68k-apollo
+-		os=-bsd
+-		;;
+-	aux)
+-		basic_machine=m68k-apple
+-		os=-aux
+-		;;
+-	balance)
+-		basic_machine=ns32k-sequent
+-		os=-dynix
+-		;;
+-	blackfin)
+-		basic_machine=bfin-unknown
+-		os=-linux
+-		;;
+-	blackfin-*)
+-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		os=-linux
+-		;;
+-	c90)
+-		basic_machine=c90-cray
+-		os=-unicos
+-		;;
+-        cegcc)
+-		basic_machine=arm-unknown
+-		os=-cegcc
+-		;;
+-	convex-c1)
+-		basic_machine=c1-convex
+-		os=-bsd
+-		;;
+-	convex-c2)
+-		basic_machine=c2-convex
+-		os=-bsd
+-		;;
+-	convex-c32)
+-		basic_machine=c32-convex
+-		os=-bsd
+-		;;
+-	convex-c34)
+-		basic_machine=c34-convex
+-		os=-bsd
+-		;;
+-	convex-c38)
+-		basic_machine=c38-convex
+-		os=-bsd
+-		;;
+-	cray | j90)
+-		basic_machine=j90-cray
+-		os=-unicos
+-		;;
+-	craynv)
+-		basic_machine=craynv-cray
+-		os=-unicosmp
+-		;;
+-	cr16)
+-		basic_machine=cr16-unknown
+-		os=-elf
+-		;;
+-	crds | unos)
+-		basic_machine=m68k-crds
+-		;;
+-	crisv32 | crisv32-* | etraxfs*)
+-		basic_machine=crisv32-axis
+-		;;
+-	cris | cris-* | etrax*)
+-		basic_machine=cris-axis
+-		;;
+-	crx)
+-		basic_machine=crx-unknown
+-		os=-elf
+-		;;
+-	da30 | da30-*)
+-		basic_machine=m68k-da30
+-		;;
+-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+-		basic_machine=mips-dec
+-		;;
+-	decsystem10* | dec10*)
+-		basic_machine=pdp10-dec
+-		os=-tops10
+-		;;
+-	decsystem20* | dec20*)
+-		basic_machine=pdp10-dec
+-		os=-tops20
+-		;;
+-	delta | 3300 | motorola-3300 | motorola-delta \
+-	      | 3300-motorola | delta-motorola)
+-		basic_machine=m68k-motorola
+-		;;
+-	delta88)
+-		basic_machine=m88k-motorola
+-		os=-sysv3
+-		;;
+-	dicos)
+-		basic_machine=i686-pc
+-		os=-dicos
+-		;;
+-	djgpp)
+-		basic_machine=i586-pc
+-		os=-msdosdjgpp
+-		;;
+-	dpx20 | dpx20-*)
+-		basic_machine=rs6000-bull
+-		os=-bosx
+-		;;
+-	dpx2* | dpx2*-bull)
+-		basic_machine=m68k-bull
+-		os=-sysv3
+-		;;
+-	ebmon29k)
+-		basic_machine=a29k-amd
+-		os=-ebmon
+-		;;
+-	elxsi)
+-		basic_machine=elxsi-elxsi
+-		os=-bsd
+-		;;
+-	encore | umax | mmax)
+-		basic_machine=ns32k-encore
+-		;;
+-	es1800 | OSE68k | ose68k | ose | OSE)
+-		basic_machine=m68k-ericsson
+-		os=-ose
+-		;;
+-	fx2800)
+-		basic_machine=i860-alliant
+-		;;
+-	genix)
+-		basic_machine=ns32k-ns
+-		;;
+-	gmicro)
+-		basic_machine=tron-gmicro
+-		os=-sysv
+-		;;
+-	go32)
+-		basic_machine=i386-pc
+-		os=-go32
+-		;;
+-	h3050r* | hiux*)
+-		basic_machine=hppa1.1-hitachi
+-		os=-hiuxwe2
+-		;;
+-	h8300hms)
+-		basic_machine=h8300-hitachi
+-		os=-hms
+-		;;
+-	h8300xray)
+-		basic_machine=h8300-hitachi
+-		os=-xray
+-		;;
+-	h8500hms)
+-		basic_machine=h8500-hitachi
+-		os=-hms
+-		;;
+-	harris)
+-		basic_machine=m88k-harris
+-		os=-sysv3
+-		;;
+-	hp300-*)
+-		basic_machine=m68k-hp
+-		;;
+-	hp300bsd)
+-		basic_machine=m68k-hp
+-		os=-bsd
+-		;;
+-	hp300hpux)
+-		basic_machine=m68k-hp
+-		os=-hpux
+-		;;
+-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+-		basic_machine=hppa1.0-hp
+-		;;
+-	hp9k2[0-9][0-9] | hp9k31[0-9])
+-		basic_machine=m68000-hp
+-		;;
+-	hp9k3[2-9][0-9])
+-		basic_machine=m68k-hp
+-		;;
+-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+-		basic_machine=hppa1.0-hp
+-		;;
+-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+-		basic_machine=hppa1.1-hp
+-		;;
+-	hp9k78[0-9] | hp78[0-9])
+-		# FIXME: really hppa2.0-hp
+-		basic_machine=hppa1.1-hp
+-		;;
+-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+-		# FIXME: really hppa2.0-hp
+-		basic_machine=hppa1.1-hp
+-		;;
+-	hp9k8[0-9][13679] | hp8[0-9][13679])
+-		basic_machine=hppa1.1-hp
+-		;;
+-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+-		basic_machine=hppa1.0-hp
+-		;;
+-	hppa-next)
+-		os=-nextstep3
+-		;;
+-	hppaosf)
+-		basic_machine=hppa1.1-hp
+-		os=-osf
+-		;;
+-	hppro)
+-		basic_machine=hppa1.1-hp
+-		os=-proelf
+-		;;
+-	i370-ibm* | ibm*)
+-		basic_machine=i370-ibm
+-		;;
+-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+-	i*86v32)
+-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+-		os=-sysv32
+-		;;
+-	i*86v4*)
+-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+-		os=-sysv4
+-		;;
+-	i*86v)
+-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+-		os=-sysv
+-		;;
+-	i*86sol2)
+-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+-		os=-solaris2
+-		;;
+-	i386mach)
+-		basic_machine=i386-mach
+-		os=-mach
+-		;;
+-	i386-vsta | vsta)
+-		basic_machine=i386-unknown
+-		os=-vsta
+-		;;
+-	iris | iris4d)
+-		basic_machine=mips-sgi
+-		case $os in
+-		    -irix*)
+-			;;
+-		    *)
+-			os=-irix4
+-			;;
+-		esac
+-		;;
+-	isi68 | isi)
+-		basic_machine=m68k-isi
+-		os=-sysv
+-		;;
+-	m68knommu)
+-		basic_machine=m68k-unknown
+-		os=-linux
+-		;;
+-	m68knommu-*)
+-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		os=-linux
+-		;;
+-	m88k-omron*)
+-		basic_machine=m88k-omron
+-		;;
+-	magnum | m3230)
+-		basic_machine=mips-mips
+-		os=-sysv
+-		;;
+-	merlin)
+-		basic_machine=ns32k-utek
+-		os=-sysv
+-		;;
+-	mingw32)
+-		basic_machine=i386-pc
+-		os=-mingw32
+-		;;
+-	mingw32ce)
+-		basic_machine=arm-unknown
+-		os=-mingw32ce
+-		;;
+-	miniframe)
+-		basic_machine=m68000-convergent
+-		;;
+-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+-		basic_machine=m68k-atari
+-		os=-mint
+-		;;
+-	mips3*-*)
+-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+-		;;
+-	mips3*)
+-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+-		;;
+-	monitor)
+-		basic_machine=m68k-rom68k
+-		os=-coff
+-		;;
+-	morphos)
+-		basic_machine=powerpc-unknown
+-		os=-morphos
+-		;;
+-	msdos)
+-		basic_machine=i386-pc
+-		os=-msdos
+-		;;
+-	ms1-*)
+-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+-		;;
+-	mvs)
+-		basic_machine=i370-ibm
+-		os=-mvs
+-		;;
+-	ncr3000)
+-		basic_machine=i486-ncr
+-		os=-sysv4
+-		;;
+-	netbsd386)
+-		basic_machine=i386-unknown
+-		os=-netbsd
+-		;;
+-	netwinder)
+-		basic_machine=armv4l-rebel
+-		os=-linux
+-		;;
+-	news | news700 | news800 | news900)
+-		basic_machine=m68k-sony
+-		os=-newsos
+-		;;
+-	news1000)
+-		basic_machine=m68030-sony
+-		os=-newsos
+-		;;
+-	news-3600 | risc-news)
+-		basic_machine=mips-sony
+-		os=-newsos
+-		;;
+-	necv70)
+-		basic_machine=v70-nec
+-		os=-sysv
+-		;;
+-	next | m*-next )
+-		basic_machine=m68k-next
+-		case $os in
+-		    -nextstep* )
+-			;;
+-		    -ns2*)
+-		      os=-nextstep2
+-			;;
+-		    *)
+-		      os=-nextstep3
+-			;;
+-		esac
+-		;;
+-	nh3000)
+-		basic_machine=m68k-harris
+-		os=-cxux
+-		;;
+-	nh[45]000)
+-		basic_machine=m88k-harris
+-		os=-cxux
+-		;;
+-	nindy960)
+-		basic_machine=i960-intel
+-		os=-nindy
+-		;;
+-	mon960)
+-		basic_machine=i960-intel
+-		os=-mon960
+-		;;
+-	nonstopux)
+-		basic_machine=mips-compaq
+-		os=-nonstopux
+-		;;
+-	np1)
+-		basic_machine=np1-gould
+-		;;
+-	nsr-tandem)
+-		basic_machine=nsr-tandem
+-		;;
+-	op50n-* | op60c-*)
+-		basic_machine=hppa1.1-oki
+-		os=-proelf
+-		;;
+-	openrisc | openrisc-*)
+-		basic_machine=or32-unknown
+-		;;
+-	os400)
+-		basic_machine=powerpc-ibm
+-		os=-os400
+-		;;
+-	OSE68000 | ose68000)
+-		basic_machine=m68000-ericsson
+-		os=-ose
+-		;;
+-	os68k)
+-		basic_machine=m68k-none
+-		os=-os68k
+-		;;
+-	pa-hitachi)
+-		basic_machine=hppa1.1-hitachi
+-		os=-hiuxwe2
+-		;;
+-	paragon)
+-		basic_machine=i860-intel
+-		os=-osf
+-		;;
+-	parisc)
+-		basic_machine=hppa-unknown
+-		os=-linux
+-		;;
+-	parisc-*)
+-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		os=-linux
+-		;;
+-	pbd)
+-		basic_machine=sparc-tti
+-		;;
+-	pbb)
+-		basic_machine=m68k-tti
+-		;;
+-	pc532 | pc532-*)
+-		basic_machine=ns32k-pc532
+-		;;
+-	pc98)
+-		basic_machine=i386-pc
+-		;;
+-	pc98-*)
+-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	pentium | p5 | k5 | k6 | nexgen | viac3)
+-		basic_machine=i586-pc
+-		;;
+-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+-		basic_machine=i686-pc
+-		;;
+-	pentiumii | pentium2 | pentiumiii | pentium3)
+-		basic_machine=i686-pc
+-		;;
+-	pentium4)
+-		basic_machine=i786-pc
+-		;;
+-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	pentium4-*)
+-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	pn)
+-		basic_machine=pn-gould
+-		;;
+-	power)	basic_machine=power-ibm
+-		;;
+-	ppc)	basic_machine=powerpc-unknown
+-		;;
+-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	ppcle | powerpclittle | ppc-le | powerpc-little)
+-		basic_machine=powerpcle-unknown
+-		;;
+-	ppcle-* | powerpclittle-*)
+-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	ppc64)	basic_machine=powerpc64-unknown
+-		;;
+-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+-		basic_machine=powerpc64le-unknown
+-		;;
+-	ppc64le-* | powerpc64little-*)
+-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+-		;;
+-	ps2)
+-		basic_machine=i386-ibm
+-		;;
+-	pw32)
+-		basic_machine=i586-unknown
+-		os=-pw32
+-		;;
+-	rdos)
+-		basic_machine=i386-pc
+-		os=-rdos
+-		;;
+-	rom68k)
+-		basic_machine=m68k-rom68k
+-		os=-coff
+-		;;
+-	rm[46]00)
+-		basic_machine=mips-siemens
+-		;;
+-	rtpc | rtpc-*)
+-		basic_machine=romp-ibm
+-		;;
+-	s390 | s390-*)
+-		basic_machine=s390-ibm
+-		;;
+-	s390x | s390x-*)
+-		basic_machine=s390x-ibm
+-		;;
+-	sa29200)
+-		basic_machine=a29k-amd
+-		os=-udi
+-		;;
+-	sb1)
+-		basic_machine=mipsisa64sb1-unknown
+-		;;
+-	sb1el)
+-		basic_machine=mipsisa64sb1el-unknown
+-		;;
+-	sde)
+-		basic_machine=mipsisa32-sde
+-		os=-elf
+-		;;
+-	sei)
+-		basic_machine=mips-sei
+-		os=-seiux
+-		;;
+-	sequent)
+-		basic_machine=i386-sequent
+-		;;
+-	sh)
+-		basic_machine=sh-hitachi
+-		os=-hms
+-		;;
+-	sh5el)
+-		basic_machine=sh5le-unknown
+-		;;
+-	sh64)
+-		basic_machine=sh64-unknown
+-		;;
+-	sparclite-wrs | simso-wrs)
+-		basic_machine=sparclite-wrs
+-		os=-vxworks
+-		;;
+-	sps7)
+-		basic_machine=m68k-bull
+-		os=-sysv2
+-		;;
+-	spur)
+-		basic_machine=spur-unknown
+-		;;
+-	st2000)
+-		basic_machine=m68k-tandem
+-		;;
+-	stratus)
+-		basic_machine=i860-stratus
+-		os=-sysv4
+-		;;
+-	sun2)
+-		basic_machine=m68000-sun
+-		;;
+-	sun2os3)
+-		basic_machine=m68000-sun
+-		os=-sunos3
+-		;;
+-	sun2os4)
+-		basic_machine=m68000-sun
+-		os=-sunos4
+-		;;
+-	sun3os3)
+-		basic_machine=m68k-sun
+-		os=-sunos3
+-		;;
+-	sun3os4)
+-		basic_machine=m68k-sun
+-		os=-sunos4
+-		;;
+-	sun4os3)
+-		basic_machine=sparc-sun
+-		os=-sunos3
+-		;;
+-	sun4os4)
+-		basic_machine=sparc-sun
+-		os=-sunos4
+-		;;
+-	sun4sol2)
+-		basic_machine=sparc-sun
+-		os=-solaris2
+-		;;
+-	sun3 | sun3-*)
+-		basic_machine=m68k-sun
+-		;;
+-	sun4)
+-		basic_machine=sparc-sun
+-		;;
+-	sun386 | sun386i | roadrunner)
+-		basic_machine=i386-sun
+-		;;
+-	sv1)
+-		basic_machine=sv1-cray
+-		os=-unicos
+-		;;
+-	symmetry)
+-		basic_machine=i386-sequent
+-		os=-dynix
+-		;;
+-	t3e)
+-		basic_machine=alphaev5-cray
+-		os=-unicos
+-		;;
+-	t90)
+-		basic_machine=t90-cray
+-		os=-unicos
+-		;;
+-	tic54x | c54x*)
+-		basic_machine=tic54x-unknown
+-		os=-coff
+-		;;
+-	tic55x | c55x*)
+-		basic_machine=tic55x-unknown
+-		os=-coff
+-		;;
+-	tic6x | c6x*)
+-		basic_machine=tic6x-unknown
+-		os=-coff
+-		;;
+-	tile*)
+-		basic_machine=tile-unknown
+-		os=-linux-gnu
+-		;;
+-	tx39)
+-		basic_machine=mipstx39-unknown
+-		;;
+-	tx39el)
+-		basic_machine=mipstx39el-unknown
+-		;;
+-	toad1)
+-		basic_machine=pdp10-xkl
+-		os=-tops20
+-		;;
+-	tower | tower-32)
+-		basic_machine=m68k-ncr
+-		;;
+-	tpf)
+-		basic_machine=s390x-ibm
+-		os=-tpf
+-		;;
+-	udi29k)
+-		basic_machine=a29k-amd
+-		os=-udi
+-		;;
+-	ultra3)
+-		basic_machine=a29k-nyu
+-		os=-sym1
+-		;;
+-	v810 | necv810)
+-		basic_machine=v810-nec
+-		os=-none
+-		;;
+-	vaxv)
+-		basic_machine=vax-dec
+-		os=-sysv
+-		;;
+-	vms)
+-		basic_machine=vax-dec
+-		os=-vms
+-		;;
+-	vpp*|vx|vx-*)
+-		basic_machine=f301-fujitsu
+-		;;
+-	vxworks960)
+-		basic_machine=i960-wrs
+-		os=-vxworks
+-		;;
+-	vxworks68)
+-		basic_machine=m68k-wrs
+-		os=-vxworks
+-		;;
+-	vxworks29k)
+-		basic_machine=a29k-wrs
+-		os=-vxworks
+-		;;
+-	w65*)
+-		basic_machine=w65-wdc
+-		os=-none
+-		;;
+-	w89k-*)
+-		basic_machine=hppa1.1-winbond
+-		os=-proelf
+-		;;
+-	xbox)
+-		basic_machine=i686-pc
+-		os=-mingw32
+-		;;
+-	xps | xps100)
+-		basic_machine=xps100-honeywell
+-		;;
+-	ymp)
+-		basic_machine=ymp-cray
+-		os=-unicos
+-		;;
+-	z8k-*-coff)
+-		basic_machine=z8k-unknown
+-		os=-sim
+-		;;
+-	z80-*-coff)
+-		basic_machine=z80-unknown
+-		os=-sim
+-		;;
+-	none)
+-		basic_machine=none-none
+-		os=-none
+-		;;
+-
+-# Here we handle the default manufacturer of certain CPU types.  It is in
+-# some cases the only manufacturer, in others, it is the most popular.
+-	w89k)
+-		basic_machine=hppa1.1-winbond
+-		;;
+-	op50n)
+-		basic_machine=hppa1.1-oki
+-		;;
+-	op60c)
+-		basic_machine=hppa1.1-oki
+-		;;
+-	romp)
+-		basic_machine=romp-ibm
+-		;;
+-	mmix)
+-		basic_machine=mmix-knuth
+-		;;
+-	rs6000)
+-		basic_machine=rs6000-ibm
+-		;;
+-	vax)
+-		basic_machine=vax-dec
+-		;;
+-	pdp10)
+-		# there are many clones, so DEC is not a safe bet
+-		basic_machine=pdp10-unknown
+-		;;
+-	pdp11)
+-		basic_machine=pdp11-dec
+-		;;
+-	we32k)
+-		basic_machine=we32k-att
+-		;;
+-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+-		basic_machine=sh-unknown
+-		;;
+-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+-		basic_machine=sparc-sun
+-		;;
+-	cydra)
+-		basic_machine=cydra-cydrome
+-		;;
+-	orion)
+-		basic_machine=orion-highlevel
+-		;;
+-	orion105)
+-		basic_machine=clipper-highlevel
+-		;;
+-	mac | mpw | mac-mpw)
+-		basic_machine=m68k-apple
+-		;;
+-	pmac | pmac-mpw)
+-		basic_machine=powerpc-apple
+-		;;
+-	*-unknown)
+-		# Make sure to match an already-canonicalized machine name.
+-		;;
+-	*)
+-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+-		exit 1
+-		;;
+-esac
+-
+-# Here we canonicalize certain aliases for manufacturers.
+-case $basic_machine in
+-	*-digital*)
+-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+-		;;
+-	*-commodore*)
+-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+-		;;
+-	*)
+-		;;
+-esac
+-
+-# Decode manufacturer-specific aliases for certain operating systems.
+-
+-if [ x"$os" != x"" ]
+-then
+-case $os in
+-        # First match some system type aliases
+-        # that might get confused with valid system types.
+-	# -solaris* is a basic system type, with this one exception.
+-	-solaris1 | -solaris1.*)
+-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+-		;;
+-	-solaris)
+-		os=-solaris2
+-		;;
+-	-svr4*)
+-		os=-sysv4
+-		;;
+-	-unixware*)
+-		os=-sysv4.2uw
+-		;;
+-	-gnu/linux*)
+-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+-		;;
+-	# First accept the basic system types.
+-	# The portable systems comes first.
+-	# Each alternative MUST END IN A *, to match a version number.
+-	# -sysv* is not here because it comes later, after sysvr4.
+-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+-	      | -aos* \
+-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+-	      | -openbsd* | -solidbsd* \
+-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+-	      | -chorusos* | -chorusrdb* | -cegcc* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+-	      | -uxpv* | -beos* | -mpeix* | -udk* \
+-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+-	# Remember, each alternative MUST END IN *, to match a version number.
+-		;;
+-	-qnx*)
+-		case $basic_machine in
+-		    x86-* | i*86-*)
+-			;;
+-		    *)
+-			os=-nto$os
+-			;;
+-		esac
+-		;;
+-	-nto-qnx*)
+-		;;
+-	-nto*)
+-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+-		;;
+-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+-		;;
+-	-mac*)
+-		os=`echo $os | sed -e 's|mac|macos|'`
+-		;;
+-	-linux-dietlibc)
+-		os=-linux-dietlibc
+-		;;
+-	-linux*)
+-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+-		;;
+-	-sunos5*)
+-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+-		;;
+-	-sunos6*)
+-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+-		;;
+-	-opened*)
+-		os=-openedition
+-		;;
+-        -os400*)
+-		os=-os400
+-		;;
+-	-wince*)
+-		os=-wince
+-		;;
+-	-osfrose*)
+-		os=-osfrose
+-		;;
+-	-osf*)
+-		os=-osf
+-		;;
+-	-utek*)
+-		os=-bsd
+-		;;
+-	-dynix*)
+-		os=-bsd
+-		;;
+-	-acis*)
+-		os=-aos
+-		;;
+-	-atheos*)
+-		os=-atheos
+-		;;
+-	-syllable*)
+-		os=-syllable
+-		;;
+-	-386bsd)
+-		os=-bsd
+-		;;
+-	-ctix* | -uts*)
+-		os=-sysv
+-		;;
+-	-nova*)
+-		os=-rtmk-nova
+-		;;
+-	-ns2 )
+-		os=-nextstep2
+-		;;
+-	-nsk*)
+-		os=-nsk
+-		;;
+-	# Preserve the version number of sinix5.
+-	-sinix5.*)
+-		os=`echo $os | sed -e 's|sinix|sysv|'`
+-		;;
+-	-sinix*)
+-		os=-sysv4
+-		;;
+-        -tpf*)
+-		os=-tpf
+-		;;
+-	-triton*)
+-		os=-sysv3
+-		;;
+-	-oss*)
+-		os=-sysv3
+-		;;
+-	-svr4)
+-		os=-sysv4
+-		;;
+-	-svr3)
+-		os=-sysv3
+-		;;
+-	-sysvr4)
+-		os=-sysv4
+-		;;
+-	# This must come after -sysvr4.
+-	-sysv*)
+-		;;
+-	-ose*)
+-		os=-ose
+-		;;
+-	-es1800*)
+-		os=-ose
+-		;;
+-	-xenix)
+-		os=-xenix
+-		;;
+-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+-		os=-mint
+-		;;
+-	-aros*)
+-		os=-aros
+-		;;
+-	-kaos*)
+-		os=-kaos
+-		;;
+-	-zvmoe)
+-		os=-zvmoe
+-		;;
+-	-dicos*)
+-		os=-dicos
+-		;;
+-	-none)
+-		;;
+-	*)
+-		# Get rid of the `-' at the beginning of $os.
+-		os=`echo $os | sed 's/[^-]*-//'`
+-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+-		exit 1
+-		;;
+-esac
+-else
+-
+-# Here we handle the default operating systems that come with various machines.
+-# The value should be what the vendor currently ships out the door with their
+-# machine or put another way, the most popular os provided with the machine.
+-
+-# Note that if you're going to try to match "-MANUFACTURER" here (say,
+-# "-sun"), then you have to tell the case statement up towards the top
+-# that MANUFACTURER isn't an operating system.  Otherwise, code above
+-# will signal an error saying that MANUFACTURER isn't an operating
+-# system, and we'll never get to this point.
+-
+-case $basic_machine in
+-        score-*)
+-		os=-elf
+-		;;
+-        spu-*)
+-		os=-elf
+-		;;
+-	*-acorn)
+-		os=-riscix1.2
+-		;;
+-	arm*-rebel)
+-		os=-linux
+-		;;
+-	arm*-semi)
+-		os=-aout
+-		;;
+-        c4x-* | tic4x-*)
+-        	os=-coff
+-		;;
+-	# This must come before the *-dec entry.
+-	pdp10-*)
+-		os=-tops20
+-		;;
+-	pdp11-*)
+-		os=-none
+-		;;
+-	*-dec | vax-*)
+-		os=-ultrix4.2
+-		;;
+-	m68*-apollo)
+-		os=-domain
+-		;;
+-	i386-sun)
+-		os=-sunos4.0.2
+-		;;
+-	m68000-sun)
+-		os=-sunos3
+-		# This also exists in the configure program, but was not the
+-		# default.
+-		# os=-sunos4
+-		;;
+-	m68*-cisco)
+-		os=-aout
+-		;;
+-        mep-*)
+-		os=-elf
+-		;;
+-	mips*-cisco)
+-		os=-elf
+-		;;
+-	mips*-*)
+-		os=-elf
+-		;;
+-	or32-*)
+-		os=-coff
+-		;;
+-	*-tti)	# must be before sparc entry or we get the wrong os.
+-		os=-sysv3
+-		;;
+-	sparc-* | *-sun)
+-		os=-sunos4.1.1
+-		;;
+-	*-be)
+-		os=-beos
+-		;;
+-	*-haiku)
+-		os=-haiku
+-		;;
+-	*-ibm)
+-		os=-aix
+-		;;
+-    	*-knuth)
+-		os=-mmixware
+-		;;
+-	*-wec)
+-		os=-proelf
+-		;;
+-	*-winbond)
+-		os=-proelf
+-		;;
+-	*-oki)
+-		os=-proelf
+-		;;
+-	*-hp)
+-		os=-hpux
+-		;;
+-	*-hitachi)
+-		os=-hiux
+-		;;
+-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+-		os=-sysv
+-		;;
+-	*-cbm)
+-		os=-amigaos
+-		;;
+-	*-dg)
+-		os=-dgux
+-		;;
+-	*-dolphin)
+-		os=-sysv3
+-		;;
+-	m68k-ccur)
+-		os=-rtu
+-		;;
+-	m88k-omron*)
+-		os=-luna
+-		;;
+-	*-next )
+-		os=-nextstep
+-		;;
+-	*-sequent)
+-		os=-ptx
+-		;;
+-	*-crds)
+-		os=-unos
+-		;;
+-	*-ns)
+-		os=-genix
+-		;;
+-	i370-*)
+-		os=-mvs
+-		;;
+-	*-next)
+-		os=-nextstep3
+-		;;
+-	*-gould)
+-		os=-sysv
+-		;;
+-	*-highlevel)
+-		os=-bsd
+-		;;
+-	*-encore)
+-		os=-bsd
+-		;;
+-	*-sgi)
+-		os=-irix
+-		;;
+-	*-siemens)
+-		os=-sysv4
+-		;;
+-	*-masscomp)
+-		os=-rtu
+-		;;
+-	f30[01]-fujitsu | f700-fujitsu)
+-		os=-uxpv
+-		;;
+-	*-rom68k)
+-		os=-coff
+-		;;
+-	*-*bug)
+-		os=-coff
+-		;;
+-	*-apple)
+-		os=-macos
+-		;;
+-	*-atari*)
+-		os=-mint
+-		;;
+-	*)
+-		os=-none
+-		;;
+-esac
+-fi
+-
+-# Here we handle the case where we know the os, and the CPU type, but not the
+-# manufacturer.  We pick the logical manufacturer.
+-vendor=unknown
+-case $basic_machine in
+-	*-unknown)
+-		case $os in
+-			-riscix*)
+-				vendor=acorn
+-				;;
+-			-sunos*)
+-				vendor=sun
+-				;;
+-			-aix*)
+-				vendor=ibm
+-				;;
+-			-beos*)
+-				vendor=be
+-				;;
+-			-hpux*)
+-				vendor=hp
+-				;;
+-			-mpeix*)
+-				vendor=hp
+-				;;
+-			-hiux*)
+-				vendor=hitachi
+-				;;
+-			-unos*)
+-				vendor=crds
+-				;;
+-			-dgux*)
+-				vendor=dg
+-				;;
+-			-luna*)
+-				vendor=omron
+-				;;
+-			-genix*)
+-				vendor=ns
+-				;;
+-			-mvs* | -opened*)
+-				vendor=ibm
+-				;;
+-			-os400*)
+-				vendor=ibm
+-				;;
+-			-ptx*)
+-				vendor=sequent
+-				;;
+-			-tpf*)
+-				vendor=ibm
+-				;;
+-			-vxsim* | -vxworks* | -windiss*)
+-				vendor=wrs
+-				;;
+-			-aux*)
+-				vendor=apple
+-				;;
+-			-hms*)
+-				vendor=hitachi
+-				;;
+-			-mpw* | -macos*)
+-				vendor=apple
+-				;;
+-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+-				vendor=atari
+-				;;
+-			-vos*)
+-				vendor=stratus
+-				;;
+-		esac
+-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+-		;;
+-esac
+-
+-echo $basic_machine$os
+-exit
+-
+-# Local variables:
+-# eval: (add-hook 'write-file-hooks 'time-stamp)
+-# time-stamp-start: "timestamp='"
+-# time-stamp-format: "%:y-%02m-%02d"
+-# time-stamp-end: "'"
+-# End:
Index: issm/oecreview/Archive/16133-16554/ISSM-16174-16175.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16174-16175.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16174-16175.diff	(revision 16556)
@@ -0,0 +1,1547 @@
+Index: ../trunk-jpl/config.guess
+===================================================================
+--- ../trunk-jpl/config.guess	(revision 16174)
++++ ../trunk-jpl/config.guess	(revision 16175)
+@@ -1,1542 +0,0 @@
+-#! /bin/sh
+-# Attempt to guess a canonical system name.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+-#   Free Software Foundation, Inc.
+-
+-timestamp='2008-11-15'
+-
+-# This file is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
+-# (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful, but
+-# WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-# General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+-# 02110-1301, USA.
+-#
+-# As a special exception to the GNU General Public License, if you
+-# distribute this file as part of a program that contains a
+-# configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Originally written by Per Bothner <per@bothner.com>.
+-# Please send patches to <config-patches@gnu.org>.  Submit a context
+-# diff and a properly formatted ChangeLog entry.
+-#
+-# This script attempts to guess a canonical system name similar to
+-# config.sub.  If it succeeds, it prints the system name on stdout, and
+-# exits with 0.  Otherwise, it exits with 1.
+-#
+-# The plan is that this can be called by configure scripts if you
+-# don't specify an explicit build system type.
+-
+-me=`echo "$0" | sed -e 's,.*/,,'`
+-
+-usage="\
+-Usage: $0 [OPTION]
+-
+-Output the configuration name of the system \`$me' is run on.
+-
+-Operation modes:
+-  -h, --help         print this help, then exit
+-  -t, --time-stamp   print date of last modification, then exit
+-  -v, --version      print version number, then exit
+-
+-Report bugs and patches to <config-patches@gnu.org>."
+-
+-version="\
+-GNU config.guess ($timestamp)
+-
+-Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+-
+-This is free software; see the source for copying conditions.  There is NO
+-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+-
+-help="
+-Try \`$me --help' for more information."
+-
+-# Parse command line
+-while test $# -gt 0 ; do
+-  case $1 in
+-    --time-stamp | --time* | -t )
+-       echo "$timestamp" ; exit ;;
+-    --version | -v )
+-       echo "$version" ; exit ;;
+-    --help | --h* | -h )
+-       echo "$usage"; exit ;;
+-    -- )     # Stop option processing
+-       shift; break ;;
+-    - )	# Use stdin as input.
+-       break ;;
+-    -* )
+-       echo "$me: invalid option $1$help" >&2
+-       exit 1 ;;
+-    * )
+-       break ;;
+-  esac
+-done
+-
+-if test $# != 0; then
+-  echo "$me: too many arguments$help" >&2
+-  exit 1
+-fi
+-
+-trap 'exit 1' 1 2 15
+-
+-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+-# compiler to aid in system detection is discouraged as it requires
+-# temporary files to be created and, as you can see below, it is a
+-# headache to deal with in a portable fashion.
+-
+-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+-# use `HOST_CC' if defined, but it is deprecated.
+-
+-# Portable tmp directory creation inspired by the Autoconf team.
+-
+-set_cc_for_build='
+-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+-: ${TMPDIR=/tmp} ;
+- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+-dummy=$tmp/dummy ;
+-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+-case $CC_FOR_BUILD,$HOST_CC,$CC in
+- ,,)    echo "int x;" > $dummy.c ;
+-	for c in cc gcc c89 c99 ; do
+-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+-	     CC_FOR_BUILD="$c"; break ;
+-	  fi ;
+-	done ;
+-	if test x"$CC_FOR_BUILD" = x ; then
+-	  CC_FOR_BUILD=no_compiler_found ;
+-	fi
+-	;;
+- ,,*)   CC_FOR_BUILD=$CC ;;
+- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+-esac ; set_cc_for_build= ;'
+-
+-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+-# (ghazi@noc.rutgers.edu 1994-08-24)
+-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+-	PATH=$PATH:/.attbin ; export PATH
+-fi
+-
+-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+-
+-# Note: order is significant - the case branches are not exclusive.
+-
+-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+-    *:NetBSD:*:*)
+-	# NetBSD (nbsd) targets should (where applicable) match one or
+-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+-	# switched to ELF, *-*-netbsd* would select the old
+-	# object file format.  This provides both forward
+-	# compatibility and a consistent mechanism for selecting the
+-	# object file format.
+-	#
+-	# Note: NetBSD doesn't particularly care about the vendor
+-	# portion of the name.  We always set it to "unknown".
+-	sysctl="sysctl -n hw.machine_arch"
+-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+-	case "${UNAME_MACHINE_ARCH}" in
+-	    armeb) machine=armeb-unknown ;;
+-	    arm*) machine=arm-unknown ;;
+-	    sh3el) machine=shl-unknown ;;
+-	    sh3eb) machine=sh-unknown ;;
+-	    sh5el) machine=sh5le-unknown ;;
+-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+-	esac
+-	# The Operating System including object format, if it has switched
+-	# to ELF recently, or will in the future.
+-	case "${UNAME_MACHINE_ARCH}" in
+-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+-		eval $set_cc_for_build
+-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+-			| grep __ELF__ >/dev/null
+-		then
+-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+-		    # Return netbsd for either.  FIX?
+-		    os=netbsd
+-		else
+-		    os=netbsdelf
+-		fi
+-		;;
+-	    *)
+-	        os=netbsd
+-		;;
+-	esac
+-	# The OS release
+-	# Debian GNU/NetBSD machines have a different userland, and
+-	# thus, need a distinct triplet. However, they do not need
+-	# kernel version information, so it can be replaced with a
+-	# suitable tag, in the style of linux-gnu.
+-	case "${UNAME_VERSION}" in
+-	    Debian*)
+-		release='-gnu'
+-		;;
+-	    *)
+-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+-		;;
+-	esac
+-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+-	# contains redundant information, the shorter form:
+-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+-	echo "${machine}-${os}${release}"
+-	exit ;;
+-    *:OpenBSD:*:*)
+-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+-	exit ;;
+-    *:ekkoBSD:*:*)
+-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+-	exit ;;
+-    *:SolidBSD:*:*)
+-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+-	exit ;;
+-    macppc:MirBSD:*:*)
+-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+-	exit ;;
+-    *:MirBSD:*:*)
+-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+-	exit ;;
+-    alpha:OSF1:*:*)
+-	case $UNAME_RELEASE in
+-	*4.0)
+-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+-		;;
+-	*5.*)
+-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+-		;;
+-	esac
+-	# According to Compaq, /usr/sbin/psrinfo has been available on
+-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+-	# covers most systems running today.  This code pipes the CPU
+-	# types through head -n 1, so we only detect the type of CPU 0.
+-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+-	case "$ALPHA_CPU_TYPE" in
+-	    "EV4 (21064)")
+-		UNAME_MACHINE="alpha" ;;
+-	    "EV4.5 (21064)")
+-		UNAME_MACHINE="alpha" ;;
+-	    "LCA4 (21066/21068)")
+-		UNAME_MACHINE="alpha" ;;
+-	    "EV5 (21164)")
+-		UNAME_MACHINE="alphaev5" ;;
+-	    "EV5.6 (21164A)")
+-		UNAME_MACHINE="alphaev56" ;;
+-	    "EV5.6 (21164PC)")
+-		UNAME_MACHINE="alphapca56" ;;
+-	    "EV5.7 (21164PC)")
+-		UNAME_MACHINE="alphapca57" ;;
+-	    "EV6 (21264)")
+-		UNAME_MACHINE="alphaev6" ;;
+-	    "EV6.7 (21264A)")
+-		UNAME_MACHINE="alphaev67" ;;
+-	    "EV6.8CB (21264C)")
+-		UNAME_MACHINE="alphaev68" ;;
+-	    "EV6.8AL (21264B)")
+-		UNAME_MACHINE="alphaev68" ;;
+-	    "EV6.8CX (21264D)")
+-		UNAME_MACHINE="alphaev68" ;;
+-	    "EV6.9A (21264/EV69A)")
+-		UNAME_MACHINE="alphaev69" ;;
+-	    "EV7 (21364)")
+-		UNAME_MACHINE="alphaev7" ;;
+-	    "EV7.9 (21364A)")
+-		UNAME_MACHINE="alphaev79" ;;
+-	esac
+-	# A Pn.n version is a patched version.
+-	# A Vn.n version is a released version.
+-	# A Tn.n version is a released field test version.
+-	# A Xn.n version is an unreleased experimental baselevel.
+-	# 1.2 uses "1.2" for uname -r.
+-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+-	exit ;;
+-    Alpha\ *:Windows_NT*:*)
+-	# How do we know it's Interix rather than the generic POSIX subsystem?
+-	# Should we change UNAME_MACHINE based on the output of uname instead
+-	# of the specific Alpha model?
+-	echo alpha-pc-interix
+-	exit ;;
+-    21064:Windows_NT:50:3)
+-	echo alpha-dec-winnt3.5
+-	exit ;;
+-    Amiga*:UNIX_System_V:4.0:*)
+-	echo m68k-unknown-sysv4
+-	exit ;;
+-    *:[Aa]miga[Oo][Ss]:*:*)
+-	echo ${UNAME_MACHINE}-unknown-amigaos
+-	exit ;;
+-    *:[Mm]orph[Oo][Ss]:*:*)
+-	echo ${UNAME_MACHINE}-unknown-morphos
+-	exit ;;
+-    *:OS/390:*:*)
+-	echo i370-ibm-openedition
+-	exit ;;
+-    *:z/VM:*:*)
+-	echo s390-ibm-zvmoe
+-	exit ;;
+-    *:OS400:*:*)
+-        echo powerpc-ibm-os400
+-	exit ;;
+-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+-	echo arm-acorn-riscix${UNAME_RELEASE}
+-	exit ;;
+-    arm:riscos:*:*|arm:RISCOS:*:*)
+-	echo arm-unknown-riscos
+-	exit ;;
+-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+-	echo hppa1.1-hitachi-hiuxmpp
+-	exit ;;
+-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+-		echo pyramid-pyramid-sysv3
+-	else
+-		echo pyramid-pyramid-bsd
+-	fi
+-	exit ;;
+-    NILE*:*:*:dcosx)
+-	echo pyramid-pyramid-svr4
+-	exit ;;
+-    DRS?6000:unix:4.0:6*)
+-	echo sparc-icl-nx6
+-	exit ;;
+-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+-	case `/usr/bin/uname -p` in
+-	    sparc) echo sparc-icl-nx7; exit ;;
+-	esac ;;
+-    sun4H:SunOS:5.*:*)
+-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+-	exit ;;
+-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+-	exit ;;
+-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+-	eval $set_cc_for_build
+-	SUN_ARCH="i386"
+-	# If there is a compiler, see if it is configured for 64-bit objects.
+-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+-	# This test works for both compilers.
+-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+-	    if echo '\n#ifdef __amd64\nIS_64BIT_ARCH\n#endif' | \
+-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+-		grep IS_64BIT_ARCH >/dev/null
+-	    then
+-		SUN_ARCH="x86_64"
+-	    fi
+-	fi
+-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+-	exit ;;
+-    sun4*:SunOS:6*:*)
+-	# According to config.sub, this is the proper way to canonicalize
+-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+-	# it's likely to be more like Solaris than SunOS4.
+-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+-	exit ;;
+-    sun4*:SunOS:*:*)
+-	case "`/usr/bin/arch -k`" in
+-	    Series*|S4*)
+-		UNAME_RELEASE=`uname -v`
+-		;;
+-	esac
+-	# Japanese Language versions have a version number like `4.1.3-JL'.
+-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+-	exit ;;
+-    sun3*:SunOS:*:*)
+-	echo m68k-sun-sunos${UNAME_RELEASE}
+-	exit ;;
+-    sun*:*:4.2BSD:*)
+-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+-	case "`/bin/arch`" in
+-	    sun3)
+-		echo m68k-sun-sunos${UNAME_RELEASE}
+-		;;
+-	    sun4)
+-		echo sparc-sun-sunos${UNAME_RELEASE}
+-		;;
+-	esac
+-	exit ;;
+-    aushp:SunOS:*:*)
+-	echo sparc-auspex-sunos${UNAME_RELEASE}
+-	exit ;;
+-    # The situation for MiNT is a little confusing.  The machine name
+-    # can be virtually everything (everything which is not
+-    # "atarist" or "atariste" at least should have a processor
+-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+-    # to the lowercase version "mint" (or "freemint").  Finally
+-    # the system name "TOS" denotes a system which is actually not
+-    # MiNT.  But MiNT is downward compatible to TOS, so this should
+-    # be no problem.
+-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+-        echo m68k-atari-mint${UNAME_RELEASE}
+-	exit ;;
+-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+-	echo m68k-atari-mint${UNAME_RELEASE}
+-        exit ;;
+-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+-        echo m68k-atari-mint${UNAME_RELEASE}
+-	exit ;;
+-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+-        echo m68k-milan-mint${UNAME_RELEASE}
+-        exit ;;
+-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+-        echo m68k-hades-mint${UNAME_RELEASE}
+-        exit ;;
+-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+-        echo m68k-unknown-mint${UNAME_RELEASE}
+-        exit ;;
+-    m68k:machten:*:*)
+-	echo m68k-apple-machten${UNAME_RELEASE}
+-	exit ;;
+-    powerpc:machten:*:*)
+-	echo powerpc-apple-machten${UNAME_RELEASE}
+-	exit ;;
+-    RISC*:Mach:*:*)
+-	echo mips-dec-mach_bsd4.3
+-	exit ;;
+-    RISC*:ULTRIX:*:*)
+-	echo mips-dec-ultrix${UNAME_RELEASE}
+-	exit ;;
+-    VAX*:ULTRIX*:*:*)
+-	echo vax-dec-ultrix${UNAME_RELEASE}
+-	exit ;;
+-    2020:CLIX:*:* | 2430:CLIX:*:*)
+-	echo clipper-intergraph-clix${UNAME_RELEASE}
+-	exit ;;
+-    mips:*:*:UMIPS | mips:*:*:RISCos)
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-#ifdef __cplusplus
+-#include <stdio.h>  /* for printf() prototype */
+-	int main (int argc, char *argv[]) {
+-#else
+-	int main (argc, argv) int argc; char *argv[]; {
+-#endif
+-	#if defined (host_mips) && defined (MIPSEB)
+-	#if defined (SYSTYPE_SYSV)
+-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+-	#endif
+-	#if defined (SYSTYPE_SVR4)
+-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+-	#endif
+-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+-	#endif
+-	#endif
+-	  exit (-1);
+-	}
+-EOF
+-	$CC_FOR_BUILD -o $dummy $dummy.c &&
+-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+-	  SYSTEM_NAME=`$dummy $dummyarg` &&
+-	    { echo "$SYSTEM_NAME"; exit; }
+-	echo mips-mips-riscos${UNAME_RELEASE}
+-	exit ;;
+-    Motorola:PowerMAX_OS:*:*)
+-	echo powerpc-motorola-powermax
+-	exit ;;
+-    Motorola:*:4.3:PL8-*)
+-	echo powerpc-harris-powermax
+-	exit ;;
+-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+-	echo powerpc-harris-powermax
+-	exit ;;
+-    Night_Hawk:Power_UNIX:*:*)
+-	echo powerpc-harris-powerunix
+-	exit ;;
+-    m88k:CX/UX:7*:*)
+-	echo m88k-harris-cxux7
+-	exit ;;
+-    m88k:*:4*:R4*)
+-	echo m88k-motorola-sysv4
+-	exit ;;
+-    m88k:*:3*:R3*)
+-	echo m88k-motorola-sysv3
+-	exit ;;
+-    AViiON:dgux:*:*)
+-        # DG/UX returns AViiON for all architectures
+-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+-	then
+-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+-	    then
+-		echo m88k-dg-dgux${UNAME_RELEASE}
+-	    else
+-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+-	    fi
+-	else
+-	    echo i586-dg-dgux${UNAME_RELEASE}
+-	fi
+- 	exit ;;
+-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+-	echo m88k-dolphin-sysv3
+-	exit ;;
+-    M88*:*:R3*:*)
+-	# Delta 88k system running SVR3
+-	echo m88k-motorola-sysv3
+-	exit ;;
+-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+-	echo m88k-tektronix-sysv3
+-	exit ;;
+-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+-	echo m68k-tektronix-bsd
+-	exit ;;
+-    *:IRIX*:*:*)
+-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+-	exit ;;
+-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+-    i*86:AIX:*:*)
+-	echo i386-ibm-aix
+-	exit ;;
+-    ia64:AIX:*:*)
+-	if [ -x /usr/bin/oslevel ] ; then
+-		IBM_REV=`/usr/bin/oslevel`
+-	else
+-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+-	fi
+-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+-	exit ;;
+-    *:AIX:2:3)
+-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+-		eval $set_cc_for_build
+-		sed 's/^		//' << EOF >$dummy.c
+-		#include <sys/systemcfg.h>
+-
+-		main()
+-			{
+-			if (!__power_pc())
+-				exit(1);
+-			puts("powerpc-ibm-aix3.2.5");
+-			exit(0);
+-			}
+-EOF
+-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+-		then
+-			echo "$SYSTEM_NAME"
+-		else
+-			echo rs6000-ibm-aix3.2.5
+-		fi
+-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+-		echo rs6000-ibm-aix3.2.4
+-	else
+-		echo rs6000-ibm-aix3.2
+-	fi
+-	exit ;;
+-    *:AIX:*:[456])
+-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+-		IBM_ARCH=rs6000
+-	else
+-		IBM_ARCH=powerpc
+-	fi
+-	if [ -x /usr/bin/oslevel ] ; then
+-		IBM_REV=`/usr/bin/oslevel`
+-	else
+-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+-	fi
+-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+-	exit ;;
+-    *:AIX:*:*)
+-	echo rs6000-ibm-aix
+-	exit ;;
+-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+-	echo romp-ibm-bsd4.4
+-	exit ;;
+-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+-	exit ;;                             # report: romp-ibm BSD 4.3
+-    *:BOSX:*:*)
+-	echo rs6000-bull-bosx
+-	exit ;;
+-    DPX/2?00:B.O.S.:*:*)
+-	echo m68k-bull-sysv3
+-	exit ;;
+-    9000/[34]??:4.3bsd:1.*:*)
+-	echo m68k-hp-bsd
+-	exit ;;
+-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+-	echo m68k-hp-bsd4.4
+-	exit ;;
+-    9000/[34678]??:HP-UX:*:*)
+-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+-	case "${UNAME_MACHINE}" in
+-	    9000/31? )            HP_ARCH=m68000 ;;
+-	    9000/[34]?? )         HP_ARCH=m68k ;;
+-	    9000/[678][0-9][0-9])
+-		if [ -x /usr/bin/getconf ]; then
+-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+-                    case "${sc_cpu_version}" in
+-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+-                      532)                      # CPU_PA_RISC2_0
+-                        case "${sc_kernel_bits}" in
+-                          32) HP_ARCH="hppa2.0n" ;;
+-                          64) HP_ARCH="hppa2.0w" ;;
+-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+-                        esac ;;
+-                    esac
+-		fi
+-		if [ "${HP_ARCH}" = "" ]; then
+-		    eval $set_cc_for_build
+-		    sed 's/^              //' << EOF >$dummy.c
+-
+-              #define _HPUX_SOURCE
+-              #include <stdlib.h>
+-              #include <unistd.h>
+-
+-              int main ()
+-              {
+-              #if defined(_SC_KERNEL_BITS)
+-                  long bits = sysconf(_SC_KERNEL_BITS);
+-              #endif
+-                  long cpu  = sysconf (_SC_CPU_VERSION);
+-
+-                  switch (cpu)
+-              	{
+-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+-              	case CPU_PA_RISC2_0:
+-              #if defined(_SC_KERNEL_BITS)
+-              	    switch (bits)
+-              		{
+-              		case 64: puts ("hppa2.0w"); break;
+-              		case 32: puts ("hppa2.0n"); break;
+-              		default: puts ("hppa2.0"); break;
+-              		} break;
+-              #else  /* !defined(_SC_KERNEL_BITS) */
+-              	    puts ("hppa2.0"); break;
+-              #endif
+-              	default: puts ("hppa1.0"); break;
+-              	}
+-                  exit (0);
+-              }
+-EOF
+-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+-		    test -z "$HP_ARCH" && HP_ARCH=hppa
+-		fi ;;
+-	esac
+-	if [ ${HP_ARCH} = "hppa2.0w" ]
+-	then
+-	    eval $set_cc_for_build
+-
+-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+-	    # generating 64-bit code.  GNU and HP use different nomenclature:
+-	    #
+-	    # $ CC_FOR_BUILD=cc ./config.guess
+-	    # => hppa2.0w-hp-hpux11.23
+-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+-	    # => hppa64-hp-hpux11.23
+-
+-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+-		grep __LP64__ >/dev/null
+-	    then
+-		HP_ARCH="hppa2.0w"
+-	    else
+-		HP_ARCH="hppa64"
+-	    fi
+-	fi
+-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+-	exit ;;
+-    ia64:HP-UX:*:*)
+-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+-	echo ia64-hp-hpux${HPUX_REV}
+-	exit ;;
+-    3050*:HI-UX:*:*)
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-	#include <unistd.h>
+-	int
+-	main ()
+-	{
+-	  long cpu = sysconf (_SC_CPU_VERSION);
+-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+-	     results, however.  */
+-	  if (CPU_IS_PA_RISC (cpu))
+-	    {
+-	      switch (cpu)
+-		{
+-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+-		}
+-	    }
+-	  else if (CPU_IS_HP_MC68K (cpu))
+-	    puts ("m68k-hitachi-hiuxwe2");
+-	  else puts ("unknown-hitachi-hiuxwe2");
+-	  exit (0);
+-	}
+-EOF
+-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+-		{ echo "$SYSTEM_NAME"; exit; }
+-	echo unknown-hitachi-hiuxwe2
+-	exit ;;
+-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+-	echo hppa1.1-hp-bsd
+-	exit ;;
+-    9000/8??:4.3bsd:*:*)
+-	echo hppa1.0-hp-bsd
+-	exit ;;
+-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+-	echo hppa1.0-hp-mpeix
+-	exit ;;
+-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+-	echo hppa1.1-hp-osf
+-	exit ;;
+-    hp8??:OSF1:*:*)
+-	echo hppa1.0-hp-osf
+-	exit ;;
+-    i*86:OSF1:*:*)
+-	if [ -x /usr/sbin/sysversion ] ; then
+-	    echo ${UNAME_MACHINE}-unknown-osf1mk
+-	else
+-	    echo ${UNAME_MACHINE}-unknown-osf1
+-	fi
+-	exit ;;
+-    parisc*:Lites*:*:*)
+-	echo hppa1.1-hp-lites
+-	exit ;;
+-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+-	echo c1-convex-bsd
+-        exit ;;
+-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+-	if getsysinfo -f scalar_acc
+-	then echo c32-convex-bsd
+-	else echo c2-convex-bsd
+-	fi
+-        exit ;;
+-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+-	echo c34-convex-bsd
+-        exit ;;
+-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+-	echo c38-convex-bsd
+-        exit ;;
+-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+-	echo c4-convex-bsd
+-        exit ;;
+-    CRAY*Y-MP:*:*:*)
+-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    CRAY*[A-Z]90:*:*:*)
+-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+-	      -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    CRAY*TS:*:*:*)
+-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    CRAY*T3E:*:*:*)
+-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    CRAY*SV1:*:*:*)
+-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    *:UNICOS/mp:*:*)
+-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+-	exit ;;
+-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+-        exit ;;
+-    5000:UNIX_System_V:4.*:*)
+-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+-	exit ;;
+-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+-	exit ;;
+-    sparc*:BSD/OS:*:*)
+-	echo sparc-unknown-bsdi${UNAME_RELEASE}
+-	exit ;;
+-    *:BSD/OS:*:*)
+-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+-	exit ;;
+-    *:FreeBSD:*:*)
+-	case ${UNAME_MACHINE} in
+-	    pc98)
+-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+-	    amd64)
+-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+-	    *)
+-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+-	esac
+-	exit ;;
+-    i*:CYGWIN*:*)
+-	echo ${UNAME_MACHINE}-pc-cygwin
+-	exit ;;
+-    *:MINGW*:*)
+-	echo ${UNAME_MACHINE}-pc-mingw32
+-	exit ;;
+-    i*:windows32*:*)
+-    	# uname -m includes "-pc" on this system.
+-    	echo ${UNAME_MACHINE}-mingw32
+-	exit ;;
+-    i*:PW*:*)
+-	echo ${UNAME_MACHINE}-pc-pw32
+-	exit ;;
+-    *:Interix*:[3456]*)
+-    	case ${UNAME_MACHINE} in
+-	    x86)
+-		echo i586-pc-interix${UNAME_RELEASE}
+-		exit ;;
+-	    EM64T | authenticamd | genuineintel)
+-		echo x86_64-unknown-interix${UNAME_RELEASE}
+-		exit ;;
+-	    IA64)
+-		echo ia64-unknown-interix${UNAME_RELEASE}
+-		exit ;;
+-	esac ;;
+-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+-	echo i${UNAME_MACHINE}-pc-mks
+-	exit ;;
+-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+-	# How do we know it's Interix rather than the generic POSIX subsystem?
+-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+-	# UNAME_MACHINE based on the output of uname instead of i386?
+-	echo i586-pc-interix
+-	exit ;;
+-    i*:UWIN*:*)
+-	echo ${UNAME_MACHINE}-pc-uwin
+-	exit ;;
+-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+-	echo x86_64-unknown-cygwin
+-	exit ;;
+-    p*:CYGWIN*:*)
+-	echo powerpcle-unknown-cygwin
+-	exit ;;
+-    prep*:SunOS:5.*:*)
+-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+-	exit ;;
+-    *:GNU:*:*)
+-	# the GNU system
+-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+-	exit ;;
+-    *:GNU/*:*:*)
+-	# other systems with GNU libc and userland
+-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+-	exit ;;
+-    i*86:Minix:*:*)
+-	echo ${UNAME_MACHINE}-pc-minix
+-	exit ;;
+-    arm*:Linux:*:*)
+-	eval $set_cc_for_build
+-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+-	    | grep -q __ARM_EABI__
+-	then
+-	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	else
+-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+-	fi
+-	exit ;;
+-    avr32*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    cris:Linux:*:*)
+-	echo cris-axis-linux-gnu
+-	exit ;;
+-    crisv32:Linux:*:*)
+-	echo crisv32-axis-linux-gnu
+-	exit ;;
+-    frv:Linux:*:*)
+-    	echo frv-unknown-linux-gnu
+-	exit ;;
+-    ia64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    m32r*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    m68*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    mips:Linux:*:*)
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-	#undef CPU
+-	#undef mips
+-	#undef mipsel
+-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+-	CPU=mipsel
+-	#else
+-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+-	CPU=mips
+-	#else
+-	CPU=
+-	#endif
+-	#endif
+-EOF
+-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+-	    /^CPU/{
+-		s: ::g
+-		p
+-	    }'`"
+-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+-	;;
+-    mips64:Linux:*:*)
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-	#undef CPU
+-	#undef mips64
+-	#undef mips64el
+-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+-	CPU=mips64el
+-	#else
+-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+-	CPU=mips64
+-	#else
+-	CPU=
+-	#endif
+-	#endif
+-EOF
+-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+-	    /^CPU/{
+-		s: ::g
+-		p
+-	    }'`"
+-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+-	;;
+-    or32:Linux:*:*)
+-	echo or32-unknown-linux-gnu
+-	exit ;;
+-    ppc:Linux:*:*)
+-	echo powerpc-unknown-linux-gnu
+-	exit ;;
+-    ppc64:Linux:*:*)
+-	echo powerpc64-unknown-linux-gnu
+-	exit ;;
+-    alpha:Linux:*:*)
+-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+-	  EV5)   UNAME_MACHINE=alphaev5 ;;
+-	  EV56)  UNAME_MACHINE=alphaev56 ;;
+-	  PCA56) UNAME_MACHINE=alphapca56 ;;
+-	  PCA57) UNAME_MACHINE=alphapca56 ;;
+-	  EV6)   UNAME_MACHINE=alphaev6 ;;
+-	  EV67)  UNAME_MACHINE=alphaev67 ;;
+-	  EV68*) UNAME_MACHINE=alphaev68 ;;
+-        esac
+-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+-	exit ;;
+-    padre:Linux:*:*)
+-	echo sparc-unknown-linux-gnu
+-	exit ;;
+-    parisc:Linux:*:* | hppa:Linux:*:*)
+-	# Look for CPU level
+-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+-	  *)    echo hppa-unknown-linux-gnu ;;
+-	esac
+-	exit ;;
+-    parisc64:Linux:*:* | hppa64:Linux:*:*)
+-	echo hppa64-unknown-linux-gnu
+-	exit ;;
+-    s390:Linux:*:* | s390x:Linux:*:*)
+-	echo ${UNAME_MACHINE}-ibm-linux
+-	exit ;;
+-    sh64*:Linux:*:*)
+-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    sh*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    sparc:Linux:*:* | sparc64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    vax:Linux:*:*)
+-	echo ${UNAME_MACHINE}-dec-linux-gnu
+-	exit ;;
+-    x86_64:Linux:*:*)
+-	echo x86_64-unknown-linux-gnu
+-	exit ;;
+-    xtensa*:Linux:*:*)
+-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+-	exit ;;
+-    i*86:Linux:*:*)
+-	# The BFD linker knows what the default object file format is, so
+-	# first see if it will tell us. cd to the root directory to prevent
+-	# problems with other programs or directories called `ld' in the path.
+-	# Set LC_ALL=C to ensure ld outputs messages in English.
+-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+-			 | sed -ne '/supported targets:/!d
+-				    s/[ 	][ 	]*/ /g
+-				    s/.*supported targets: *//
+-				    s/ .*//
+-				    p'`
+-        case "$ld_supported_targets" in
+-	  elf32-i386)
+-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+-		;;
+-	  a.out-i386-linux)
+-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+-		exit ;;
+-	  "")
+-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+-		# one that does not give us useful --help.
+-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+-		exit ;;
+-	esac
+-	# Determine whether the default compiler is a.out or elf
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-	#include <features.h>
+-	#ifdef __ELF__
+-	# ifdef __GLIBC__
+-	#  if __GLIBC__ >= 2
+-	LIBC=gnu
+-	#  else
+-	LIBC=gnulibc1
+-	#  endif
+-	# else
+-	LIBC=gnulibc1
+-	# endif
+-	#else
+-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+-	LIBC=gnu
+-	#else
+-	LIBC=gnuaout
+-	#endif
+-	#endif
+-	#ifdef __dietlibc__
+-	LIBC=dietlibc
+-	#endif
+-EOF
+-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+-	    /^LIBC/{
+-		s: ::g
+-		p
+-	    }'`"
+-	test x"${LIBC}" != x && {
+-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+-		exit
+-	}
+-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+-	;;
+-    i*86:DYNIX/ptx:4*:*)
+-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+-	# earlier versions are messed up and put the nodename in both
+-	# sysname and nodename.
+-	echo i386-sequent-sysv4
+-	exit ;;
+-    i*86:UNIX_SV:4.2MP:2.*)
+-        # Unixware is an offshoot of SVR4, but it has its own version
+-        # number series starting with 2...
+-        # I am not positive that other SVR4 systems won't match this,
+-	# I just have to hope.  -- rms.
+-        # Use sysv4.2uw... so that sysv4* matches it.
+-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+-	exit ;;
+-    i*86:OS/2:*:*)
+-	# If we were able to find `uname', then EMX Unix compatibility
+-	# is probably installed.
+-	echo ${UNAME_MACHINE}-pc-os2-emx
+-	exit ;;
+-    i*86:XTS-300:*:STOP)
+-	echo ${UNAME_MACHINE}-unknown-stop
+-	exit ;;
+-    i*86:atheos:*:*)
+-	echo ${UNAME_MACHINE}-unknown-atheos
+-	exit ;;
+-    i*86:syllable:*:*)
+-	echo ${UNAME_MACHINE}-pc-syllable
+-	exit ;;
+-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+-	echo i386-unknown-lynxos${UNAME_RELEASE}
+-	exit ;;
+-    i*86:*DOS:*:*)
+-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+-	exit ;;
+-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+-	else
+-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+-	fi
+-	exit ;;
+-    i*86:*:5:[678]*)
+-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+-	case `/bin/uname -X | grep "^Machine"` in
+-	    *486*)	     UNAME_MACHINE=i486 ;;
+-	    *Pentium)	     UNAME_MACHINE=i586 ;;
+-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+-	esac
+-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+-	exit ;;
+-    i*86:*:3.2:*)
+-	if test -f /usr/options/cb.name; then
+-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+-			&& UNAME_MACHINE=i586
+-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+-			&& UNAME_MACHINE=i686
+-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+-			&& UNAME_MACHINE=i686
+-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+-	else
+-		echo ${UNAME_MACHINE}-pc-sysv32
+-	fi
+-	exit ;;
+-    pc:*:*:*)
+-	# Left here for compatibility:
+-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+-        # the processor, so we play safe by assuming i386.
+-	echo i386-pc-msdosdjgpp
+-        exit ;;
+-    Intel:Mach:3*:*)
+-	echo i386-pc-mach3
+-	exit ;;
+-    paragon:*:*:*)
+-	echo i860-intel-osf1
+-	exit ;;
+-    i860:*:4.*:*) # i860-SVR4
+-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+-	else # Add other i860-SVR4 vendors below as they are discovered.
+-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+-	fi
+-	exit ;;
+-    mini*:CTIX:SYS*5:*)
+-	# "miniframe"
+-	echo m68010-convergent-sysv
+-	exit ;;
+-    mc68k:UNIX:SYSTEM5:3.51m)
+-	echo m68k-convergent-sysv
+-	exit ;;
+-    M680?0:D-NIX:5.3:*)
+-	echo m68k-diab-dnix
+-	exit ;;
+-    M68*:*:R3V[5678]*:*)
+-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+-	OS_REL=''
+-	test -r /etc/.relid \
+-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+-          && { echo i486-ncr-sysv4; exit; } ;;
+-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+-	echo m68k-unknown-lynxos${UNAME_RELEASE}
+-	exit ;;
+-    mc68030:UNIX_System_V:4.*:*)
+-	echo m68k-atari-sysv4
+-	exit ;;
+-    TSUNAMI:LynxOS:2.*:*)
+-	echo sparc-unknown-lynxos${UNAME_RELEASE}
+-	exit ;;
+-    rs6000:LynxOS:2.*:*)
+-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+-	exit ;;
+-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+-	exit ;;
+-    SM[BE]S:UNIX_SV:*:*)
+-	echo mips-dde-sysv${UNAME_RELEASE}
+-	exit ;;
+-    RM*:ReliantUNIX-*:*:*)
+-	echo mips-sni-sysv4
+-	exit ;;
+-    RM*:SINIX-*:*:*)
+-	echo mips-sni-sysv4
+-	exit ;;
+-    *:SINIX-*:*:*)
+-	if uname -p 2>/dev/null >/dev/null ; then
+-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+-		echo ${UNAME_MACHINE}-sni-sysv4
+-	else
+-		echo ns32k-sni-sysv
+-	fi
+-	exit ;;
+-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+-        echo i586-unisys-sysv4
+-        exit ;;
+-    *:UNIX_System_V:4*:FTX*)
+-	# From Gerald Hewes <hewes@openmarket.com>.
+-	# How about differentiating between stratus architectures? -djm
+-	echo hppa1.1-stratus-sysv4
+-	exit ;;
+-    *:*:*:FTX*)
+-	# From seanf@swdc.stratus.com.
+-	echo i860-stratus-sysv4
+-	exit ;;
+-    i*86:VOS:*:*)
+-	# From Paul.Green@stratus.com.
+-	echo ${UNAME_MACHINE}-stratus-vos
+-	exit ;;
+-    *:VOS:*:*)
+-	# From Paul.Green@stratus.com.
+-	echo hppa1.1-stratus-vos
+-	exit ;;
+-    mc68*:A/UX:*:*)
+-	echo m68k-apple-aux${UNAME_RELEASE}
+-	exit ;;
+-    news*:NEWS-OS:6*:*)
+-	echo mips-sony-newsos6
+-	exit ;;
+-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+-	if [ -d /usr/nec ]; then
+-	        echo mips-nec-sysv${UNAME_RELEASE}
+-	else
+-	        echo mips-unknown-sysv${UNAME_RELEASE}
+-	fi
+-        exit ;;
+-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+-	echo powerpc-be-beos
+-	exit ;;
+-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+-	echo powerpc-apple-beos
+-	exit ;;
+-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+-	echo i586-pc-beos
+-	exit ;;
+-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+-	echo i586-pc-haiku
+-	exit ;;
+-    SX-4:SUPER-UX:*:*)
+-	echo sx4-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    SX-5:SUPER-UX:*:*)
+-	echo sx5-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    SX-6:SUPER-UX:*:*)
+-	echo sx6-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    SX-7:SUPER-UX:*:*)
+-	echo sx7-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    SX-8:SUPER-UX:*:*)
+-	echo sx8-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    SX-8R:SUPER-UX:*:*)
+-	echo sx8r-nec-superux${UNAME_RELEASE}
+-	exit ;;
+-    Power*:Rhapsody:*:*)
+-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+-	exit ;;
+-    *:Rhapsody:*:*)
+-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+-	exit ;;
+-    *:Darwin:*:*)
+-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+-	case $UNAME_PROCESSOR in
+-	    unknown) UNAME_PROCESSOR=powerpc ;;
+-	esac
+-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+-	exit ;;
+-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+-	UNAME_PROCESSOR=`uname -p`
+-	if test "$UNAME_PROCESSOR" = "x86"; then
+-		UNAME_PROCESSOR=i386
+-		UNAME_MACHINE=pc
+-	fi
+-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+-	exit ;;
+-    *:QNX:*:4*)
+-	echo i386-pc-qnx
+-	exit ;;
+-    NSE-?:NONSTOP_KERNEL:*:*)
+-	echo nse-tandem-nsk${UNAME_RELEASE}
+-	exit ;;
+-    NSR-?:NONSTOP_KERNEL:*:*)
+-	echo nsr-tandem-nsk${UNAME_RELEASE}
+-	exit ;;
+-    *:NonStop-UX:*:*)
+-	echo mips-compaq-nonstopux
+-	exit ;;
+-    BS2000:POSIX*:*:*)
+-	echo bs2000-siemens-sysv
+-	exit ;;
+-    DS/*:UNIX_System_V:*:*)
+-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+-	exit ;;
+-    *:Plan9:*:*)
+-	# "uname -m" is not consistent, so use $cputype instead. 386
+-	# is converted to i386 for consistency with other x86
+-	# operating systems.
+-	if test "$cputype" = "386"; then
+-	    UNAME_MACHINE=i386
+-	else
+-	    UNAME_MACHINE="$cputype"
+-	fi
+-	echo ${UNAME_MACHINE}-unknown-plan9
+-	exit ;;
+-    *:TOPS-10:*:*)
+-	echo pdp10-unknown-tops10
+-	exit ;;
+-    *:TENEX:*:*)
+-	echo pdp10-unknown-tenex
+-	exit ;;
+-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+-	echo pdp10-dec-tops20
+-	exit ;;
+-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+-	echo pdp10-xkl-tops20
+-	exit ;;
+-    *:TOPS-20:*:*)
+-	echo pdp10-unknown-tops20
+-	exit ;;
+-    *:ITS:*:*)
+-	echo pdp10-unknown-its
+-	exit ;;
+-    SEI:*:*:SEIUX)
+-        echo mips-sei-seiux${UNAME_RELEASE}
+-	exit ;;
+-    *:DragonFly:*:*)
+-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+-	exit ;;
+-    *:*VMS:*:*)
+-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+-	case "${UNAME_MACHINE}" in
+-	    A*) echo alpha-dec-vms ; exit ;;
+-	    I*) echo ia64-dec-vms ; exit ;;
+-	    V*) echo vax-dec-vms ; exit ;;
+-	esac ;;
+-    *:XENIX:*:SysV)
+-	echo i386-pc-xenix
+-	exit ;;
+-    i*86:skyos:*:*)
+-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+-	exit ;;
+-    i*86:rdos:*:*)
+-	echo ${UNAME_MACHINE}-pc-rdos
+-	exit ;;
+-esac
+-
+-#echo '(No uname command or uname output not recognized.)' 1>&2
+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+-
+-eval $set_cc_for_build
+-cat >$dummy.c <<EOF
+-#ifdef _SEQUENT_
+-# include <sys/types.h>
+-# include <sys/utsname.h>
+-#endif
+-main ()
+-{
+-#if defined (sony)
+-#if defined (MIPSEB)
+-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+-     I don't know....  */
+-  printf ("mips-sony-bsd\n"); exit (0);
+-#else
+-#include <sys/param.h>
+-  printf ("m68k-sony-newsos%s\n",
+-#ifdef NEWSOS4
+-          "4"
+-#else
+-	  ""
+-#endif
+-         ); exit (0);
+-#endif
+-#endif
+-
+-#if defined (__arm) && defined (__acorn) && defined (__unix)
+-  printf ("arm-acorn-riscix\n"); exit (0);
+-#endif
+-
+-#if defined (hp300) && !defined (hpux)
+-  printf ("m68k-hp-bsd\n"); exit (0);
+-#endif
+-
+-#if defined (NeXT)
+-#if !defined (__ARCHITECTURE__)
+-#define __ARCHITECTURE__ "m68k"
+-#endif
+-  int version;
+-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+-  if (version < 4)
+-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+-  else
+-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+-  exit (0);
+-#endif
+-
+-#if defined (MULTIMAX) || defined (n16)
+-#if defined (UMAXV)
+-  printf ("ns32k-encore-sysv\n"); exit (0);
+-#else
+-#if defined (CMU)
+-  printf ("ns32k-encore-mach\n"); exit (0);
+-#else
+-  printf ("ns32k-encore-bsd\n"); exit (0);
+-#endif
+-#endif
+-#endif
+-
+-#if defined (__386BSD__)
+-  printf ("i386-pc-bsd\n"); exit (0);
+-#endif
+-
+-#if defined (sequent)
+-#if defined (i386)
+-  printf ("i386-sequent-dynix\n"); exit (0);
+-#endif
+-#if defined (ns32000)
+-  printf ("ns32k-sequent-dynix\n"); exit (0);
+-#endif
+-#endif
+-
+-#if defined (_SEQUENT_)
+-    struct utsname un;
+-
+-    uname(&un);
+-
+-    if (strncmp(un.version, "V2", 2) == 0) {
+-	printf ("i386-sequent-ptx2\n"); exit (0);
+-    }
+-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+-	printf ("i386-sequent-ptx1\n"); exit (0);
+-    }
+-    printf ("i386-sequent-ptx\n"); exit (0);
+-
+-#endif
+-
+-#if defined (vax)
+-# if !defined (ultrix)
+-#  include <sys/param.h>
+-#  if defined (BSD)
+-#   if BSD == 43
+-      printf ("vax-dec-bsd4.3\n"); exit (0);
+-#   else
+-#    if BSD == 199006
+-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+-#    else
+-      printf ("vax-dec-bsd\n"); exit (0);
+-#    endif
+-#   endif
+-#  else
+-    printf ("vax-dec-bsd\n"); exit (0);
+-#  endif
+-# else
+-    printf ("vax-dec-ultrix\n"); exit (0);
+-# endif
+-#endif
+-
+-#if defined (alliant) && defined (i860)
+-  printf ("i860-alliant-bsd\n"); exit (0);
+-#endif
+-
+-  exit (1);
+-}
+-EOF
+-
+-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+-	{ echo "$SYSTEM_NAME"; exit; }
+-
+-# Apollos put the system type in the environment.
+-
+-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+-
+-# Convex versions that predate uname can use getsysinfo(1)
+-
+-if [ -x /usr/convex/getsysinfo ]
+-then
+-    case `getsysinfo -f cpu_type` in
+-    c1*)
+-	echo c1-convex-bsd
+-	exit ;;
+-    c2*)
+-	if getsysinfo -f scalar_acc
+-	then echo c32-convex-bsd
+-	else echo c2-convex-bsd
+-	fi
+-	exit ;;
+-    c34*)
+-	echo c34-convex-bsd
+-	exit ;;
+-    c38*)
+-	echo c38-convex-bsd
+-	exit ;;
+-    c4*)
+-	echo c4-convex-bsd
+-	exit ;;
+-    esac
+-fi
+-
+-cat >&2 <<EOF
+-$0: unable to guess system type
+-
+-This script, last modified $timestamp, has failed to recognize
+-the operating system you are using. It is advised that you
+-download the most up to date version of the config scripts from
+-
+-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+-and
+-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+-
+-If the version you run ($0) is already up to date, please
+-send the following data and any information you think might be
+-pertinent to <config-patches@gnu.org> in order to provide the needed
+-information to handle your system.
+-
+-config.guess timestamp = $timestamp
+-
+-uname -m = `(uname -m) 2>/dev/null || echo unknown`
+-uname -r = `(uname -r) 2>/dev/null || echo unknown`
+-uname -s = `(uname -s) 2>/dev/null || echo unknown`
+-uname -v = `(uname -v) 2>/dev/null || echo unknown`
+-
+-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+-
+-hostinfo               = `(hostinfo) 2>/dev/null`
+-/bin/universe          = `(/bin/universe) 2>/dev/null`
+-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+-/bin/arch              = `(/bin/arch) 2>/dev/null`
+-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+-
+-UNAME_MACHINE = ${UNAME_MACHINE}
+-UNAME_RELEASE = ${UNAME_RELEASE}
+-UNAME_SYSTEM  = ${UNAME_SYSTEM}
+-UNAME_VERSION = ${UNAME_VERSION}
+-EOF
+-
+-exit 1
+-
+-# Local variables:
+-# eval: (add-hook 'write-file-hooks 'time-stamp)
+-# time-stamp-start: "timestamp='"
+-# time-stamp-format: "%:y-%02m-%02d"
+-# time-stamp-end: "'"
+-# End:
Index: issm/oecreview/Archive/16133-16554/ISSM-16175-16176.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16175-16176.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16175-16176.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/dev/issmversion.py
+===================================================================
+--- ../trunk-jpl/src/m/dev/issmversion.py	(revision 0)
++++ ../trunk-jpl/src/m/dev/issmversion.py	(revision 16176)
+@@ -0,0 +1,20 @@
++from IssmConfig import IssmConfig
++
++def issmversion():
++	"""
++	ISSMVERSION - display ISSM version
++
++		Usage:
++			issmversion()
++	"""
++
++
++print ' '
++print IssmConfig('PACKAGE_NAME')[0]+' Version '+IssmConfig('PACKAGE_VERSION')[0]
++print '(website: '+IssmConfig('PACKAGE_URL')[0]+' contact:'+IssmConfig('PACKAGE_BUGREPORT')[0]+')'
++print ' '
++print 'Build date: '+IssmConfig('PACKAGE_BUILD_DATE')[0]
++print 'Copyright (c) 2009-2013 California Institute of Technology'
++print ' '
++print '    to get started type: issmdoc'
++print ' '
Index: issm/oecreview/Archive/16133-16554/ISSM-16176-16177.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16176-16177.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16176-16177.diff	(revision 16556)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16176)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16177)
+@@ -12,6 +12,7 @@
+ #include "./exceptions.h"
+ #include "../io/Print/Print.h"
+ #include "../io/Comm/IssmComm.h"
++#include "../MemOps/MemOps.h"
+ 
+ ErrorException::ErrorException(const string & what_arg){/*{{{*/
+ 
+@@ -79,35 +80,39 @@
+ 
+ 	/*Output*/
+ 	std::ostringstream buffer;
++	char *message = NULL;
+ 
+ 	/*WINDOWS*/
+ 	if(!function_name || file_line==0){ 
+ 		buffer << " error message: " << this->what_str;
+-		const string buffer2 = buffer.str();
+-		return buffer2.c_str();
+ 	}
++	else{
++		buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
++		buffer << this->function_name << " error message: " << this->what_str;
++	}
+ 
+-	buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
+-	buffer << this->function_name << " error message: " << this->what_str;
+-
+-	const string buffer2 = buffer.str();
+-	return buffer2.c_str();
++	/*Convert std::ostringstream to std::string and then create char* */
++	std::string buffer2 = buffer.str();
++	message = xNew<char>(strlen(buffer2.c_str())+1); sprintf(message,"%s",buffer2.c_str());
++	return message;
+ }/*}}}*/
+ const char* ErrorException::PythonReport() const{/*{{{*/
+ 
+ 	/*Output*/
+ 	std::ostringstream buffer;
++	char *message = NULL;
+ 
+ 	/*WINDOWS*/
+ 	if(!function_name || file_line==0){ 
+ 		buffer << " error message: " << this->what_str;
+-		const string buffer2 = buffer.str();
+-		return buffer2.c_str();
+ 	}
++	else{
++		buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
++		buffer << this->function_name << " error message: " << this->what_str;
++	}
+ 
+-	buffer << "\nError in ==> " << this->file_name << ":" << file_line << "\n";
+-	buffer << this->function_name << " error message: " << this->what_str;
+-
+-	const string buffer2 = buffer.str();
+-	return buffer2.c_str();
++	/*Convert std::ostringstream to std::string and then create char* */
++	std::string buffer2 = buffer.str();
++	message = xNew<char>(strlen(buffer2.c_str())+1); sprintf(message,"%s",buffer2.c_str());
++	return message;
+ }/*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16177-16178.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16177-16178.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16177-16178.diff	(revision 16556)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/damage.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.py	(revision 16177)
++++ ../trunk-jpl/src/m/classes/damage.py	(revision 16178)
+@@ -62,8 +62,8 @@
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
++		md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
+ 		if self.isdamage:
+-			md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'damage.law','values',['undamaged','pralong'])
+ 		if self.law == 'pralong':
+ 			md = checkfield(md,'damage.c1','>=',0)
+@@ -77,8 +77,8 @@
+ 	def marshall(self,md,fid):    # {{{
+ 
+ 		WriteData(fid,'object',self,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
+ 		if self.isdamage:
+-			WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
+ 			WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
+ 		if self.law=='pralong':
+ 			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
Index: issm/oecreview/Archive/16133-16554/ISSM-16178-16179.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16178-16179.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16178-16179.diff	(revision 16556)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/m/classes/damage.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.py	(revision 16178)
++++ ../trunk-jpl/src/m/classes/damage.py	(revision 16179)
+@@ -76,14 +76,14 @@
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 
+-		WriteData(fid,'object',self,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','damage','fieldname','D','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','isdamage','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
+ 		if self.isdamage:
+-			WriteData(fid,'object',self,'class','damage','fieldname','law','format','String')
++			WriteData(fid,'object',self,'fieldname','law','format','String')
+ 		if self.law=='pralong':
+-			WriteData(fid,'object',self,'class','damage','fieldname','c1','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c2','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c3','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','c4','format','Double')
+-			WriteData(fid,'object',self,'class','damage','fieldname','stress_threshold','format','Double')
++			WriteData(fid,'object',self,'fieldname','c1','format','Double')
++			WriteData(fid,'object',self,'fieldname','c2','format','Double')
++			WriteData(fid,'object',self,'fieldname','c3','format','Double')
++			WriteData(fid,'object',self,'fieldname','c4','format','Double')
++			WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16178)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16179)
+@@ -84,17 +84,17 @@
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 		
+-			WriteData(fid,'object',obj,'class','damage','fieldname','isdamage','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','damage','fieldname','D','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','isdamage','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','D','format','DoubleMat','mattype',1);
+ 			if obj.isdamage,
+-				WriteData(fid,'object',obj,'class','damage','fieldname','law','format','String');
++				WriteData(fid,'object',obj,'fieldname','law','format','String');
+ 			end
+ 			if strcmpi(obj.law,'pralong'),
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c1','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c2','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c3','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','c4','format','Double');
+-				WriteData(fid,'object',obj,'class','damage','fieldname','stress_threshold','format','Double');
++				WriteData(fid,'object',obj,'fieldname','c1','format','Double');
++				WriteData(fid,'object',obj,'fieldname','c2','format','Double');
++				WriteData(fid,'object',obj,'fieldname','c3','format','Double');
++				WriteData(fid,'object',obj,'fieldname','c4','format','Double');
++				WriteData(fid,'object',obj,'fieldname','stress_threshold','format','Double');
+ 			end
+ 
+ 		end % }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16179-16180.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16179-16180.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16179-16180.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16179)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16180)
+@@ -3,7 +3,7 @@
+ import copy
+ import inspect
+ from paterson import paterson
+-from verbose import paterson
++from verbose import verbose
+ 
+ #Start defining model parameters here
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16180-16181.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16180-16181.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16180-16181.diff	(revision 16556)
@@ -0,0 +1,13327 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16180)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16181)
+@@ -65,6 +65,7 @@
+ 	case 236, name='SquareShelfTranIspddIsdeltaSSA2d';
+ 	case 237, name='SquareShelfTranIspddIsdeltaSSA3d';
+ 	case 270, name='SquareShelfStressSSA2dDamage';
++	case 271, name='SquareShelfStressSSA2dDamageTran';
+ 	case 272, name='SquareShelfCMZSSA2dDamage';
+ 	case 274, name='SquareShelfStressSSA2dDamageRift';
+ 	case 280, name='SquareShelfStressSSA2dHigherOrder';
+Index: ../trunk-jpl/test/NightlyRun/test271.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test271.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test271.m	(revision 16181)
+@@ -0,0 +1,29 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelf.par');
++md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
++
++%boundary conditions for damage, to be put in SquareShelf.par
++boundary=zeros(md.mesh.numberofvertices,1);
++boundary(md.mesh.segments(:,1:2))=1;
++pos=find(~md.mask.ice_levelset==0 & boundary==1);
++md.damage.spcdamage(pos)=0;
++
++md.verbose=verbose('11111111');
++
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,DamageEvolutionSolutionEnum());
++
++return;
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	};
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16180)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16181)
+@@ -1710,6 +1710,24 @@
+ 	AM_CONDITIONAL([BALANCED], [test x$HAVE_BALANCED = xyes])
+ 	AC_MSG_RESULT($HAVE_BALANCED)
+ 	dnl }}}
++	dnl with-damage{{{
++	AC_ARG_WITH([damage],
++		AS_HELP_STRING([--with-damage = YES], [compile with damage capabilities (default is yes)]),
++		[DAMAGE=$withval],[DAMAGE=yes]) 
++	AC_MSG_CHECKING(for damage capability compilation)
++
++	if test "x$DAMAGE" = "xyes"; then
++
++		dnl defaults
++		HAVE_DAMAGE=yes
++
++		AC_DEFINE([_HAVE_DAMAGE_],[1],[with damage capability])
++	else
++		HAVE_DAMAGE=no
++	fi
++	AM_CONDITIONAL([DAMAGE], [test x$HAVE_DAMAGE = xyes])
++	AC_MSG_RESULT($HAVE_DAMAGE)
++	dnl }}}
+ 	dnl with-responses{{{
+ 	AC_ARG_WITH([responses],
+ 		AS_HELP_STRING([--with-responses = YES], [compile with responses capabilities (default is yes)]),
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16181)
+@@ -114,6 +114,13 @@
+ 			_error_("ISSM was not compiled with gia capabilities. Exiting");
+ 			#endif
+ 			break;
++		case DamageEvolutionSolutionEnum:
++			#ifdef _HAVE_DAMAGE_
++			solutioncore=&damage_core;
++			#else
++			_error_("ISSM was not compiled with damage evolution capabilities. Exiting");
++			#endif
++			break;
+ 
+ 		default:
+ 			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16181)
+@@ -0,0 +1,74 @@
++/*!\file: damage_core.cpp
++ * \brief: core of the damage solution 
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void damage_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool  save_results;
++	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface;
++	int   solution_type;
++	int  *requested_outputs = NULL;
++	int   numoutputs        = 0;
++
++	/*activate configuration*/
++	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
++	  
++	if(VerboseSolution())_printf_("	call damage core\n\n");
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
++	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
++
++	if(issmbgradients){
++	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
++	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++	if(ispdd){
++		if(isdelta18o){
++			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
++			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		} 
++		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
++		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++
++	if(isFS && isfreesurface){
++		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
++		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++	else{
++		if(VerboseSolution()) _printf0_("   call computational core\n");
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		InputToResultx(femmodel,ThicknessEnum);
++		InputToResultx(femmodel,BedEnum);
++		InputToResultx(femmodel,SurfaceEnum);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++	}
++
++	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/
++	xDelete<int>(requested_outputs);
++}
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16181)
+@@ -112,6 +112,12 @@
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=GiaAnalysisEnum;
+ 			break;
++		
++		case DamageEvolutionSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=DamageEvolutionAnalysisEnum;
++			break;
+ 
+ 		case TransientSolutionEnum:
+ 			numanalyses=11;
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16180)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16181)
+@@ -37,6 +37,7 @@
+ void ad_core(FemModel* femmodel);
+ void dummy_core(FemModel* femmodel);
+ void gia_core(FemModel* femmodel);
++void damage_core(FemModel* femmodel);
+ IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
+ 
+ //optimization
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16180)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16181)
+@@ -152,14 +152,17 @@
+ 	MaterialsRheologyLawEnum,
+ 	MaterialsRheologyNEnum,
+ 	DamageDEnum,
++	QmuDamageDEnum,
+ 	DamageDbarEnum,
+-	DamageIsdamageEnum,
+ 	DamageLawEnum,
+ 	DamageC1Enum,
+ 	DamageC2Enum,
+ 	DamageC3Enum,
+ 	DamageC4Enum,
++	DamageHealingEnum,
+ 	DamageStressThresholdEnum,
++	DamageStabilizationEnum,
++	DamageSpcdamageEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+@@ -263,6 +266,7 @@
+ 	TransientIsmasstransportEnum,
+ 	TransientIsthermalEnum,
+ 	TransientIsgiaEnum,
++	TransientIsdamageEnum,
+ 	TransientNumRequestedOutputsEnum,
+ 	TransientRequestedOutputsEnum,
+ 	/*}}}*/
+@@ -286,6 +290,8 @@
+ 	BedSlopeSolutionEnum,
+ 	BedSlopeXAnalysisEnum,
+ 	BedSlopeYAnalysisEnum,
++	DamageEvolutionSolutionEnum,
++	DamageEvolutionAnalysisEnum,
+ 	StressbalanceAnalysisEnum,
+ 	StressbalanceSIAAnalysisEnum,
+ 	StressbalanceSolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16181)
+@@ -160,14 +160,17 @@
+ 		case MaterialsRheologyLawEnum : return "MaterialsRheologyLaw";
+ 		case MaterialsRheologyNEnum : return "MaterialsRheologyN";
+ 		case DamageDEnum : return "DamageD";
++		case QmuDamageDEnum : return "QmuDamageD";
+ 		case DamageDbarEnum : return "DamageDbar";
+-		case DamageIsdamageEnum : return "DamageIsdamage";
+ 		case DamageLawEnum : return "DamageLaw";
+ 		case DamageC1Enum : return "DamageC1";
+ 		case DamageC2Enum : return "DamageC2";
+ 		case DamageC3Enum : return "DamageC3";
+ 		case DamageC4Enum : return "DamageC4";
++		case DamageHealingEnum : return "DamageHealing";
+ 		case DamageStressThresholdEnum : return "DamageStressThreshold";
++		case DamageStabilizationEnum : return "DamageStabilization";
++		case DamageSpcdamageEnum : return "DamageSpcdamage";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+@@ -271,6 +274,7 @@
+ 		case TransientIsmasstransportEnum : return "TransientIsmasstransport";
+ 		case TransientIsthermalEnum : return "TransientIsthermal";
+ 		case TransientIsgiaEnum : return "TransientIsgia";
++		case TransientIsdamageEnum : return "TransientIsdamage";
+ 		case TransientNumRequestedOutputsEnum : return "TransientNumRequestedOutputs";
+ 		case TransientRequestedOutputsEnum : return "TransientRequestedOutputs";
+ 		case SolutionTypeEnum : return "SolutionType";
+@@ -292,6 +296,8 @@
+ 		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+ 		case BedSlopeXAnalysisEnum : return "BedSlopeXAnalysis";
+ 		case BedSlopeYAnalysisEnum : return "BedSlopeYAnalysis";
++		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
++		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
+ 		case StressbalanceAnalysisEnum : return "StressbalanceAnalysis";
+ 		case StressbalanceSIAAnalysisEnum : return "StressbalanceSIAAnalysis";
+ 		case StressbalanceSolutionEnum : return "StressbalanceSolution";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16181)
+@@ -163,14 +163,17 @@
+ 	      else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
+ 	      else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
+ 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
++	      else if (strcmp(name,"QmuDamageD")==0) return QmuDamageDEnum;
+ 	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+-	      else if (strcmp(name,"DamageIsdamage")==0) return DamageIsdamageEnum;
+ 	      else if (strcmp(name,"DamageLaw")==0) return DamageLawEnum;
+ 	      else if (strcmp(name,"DamageC1")==0) return DamageC1Enum;
+ 	      else if (strcmp(name,"DamageC2")==0) return DamageC2Enum;
+ 	      else if (strcmp(name,"DamageC3")==0) return DamageC3Enum;
+ 	      else if (strcmp(name,"DamageC4")==0) return DamageC4Enum;
++	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
++	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
++	      else if (strcmp(name,"DamageSpcdamage")==0) return DamageSpcdamageEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+@@ -256,13 +259,13 @@
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+-	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+-	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+-	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
++	      if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
++	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
++	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
++	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+@@ -277,6 +280,7 @@
+ 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
+ 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
+ 	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
++	      else if (strcmp(name,"TransientIsdamage")==0) return TransientIsdamageEnum;
+ 	      else if (strcmp(name,"TransientNumRequestedOutputs")==0) return TransientNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
+ 	      else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
+@@ -298,6 +302,8 @@
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+ 	      else if (strcmp(name,"BedSlopeXAnalysis")==0) return BedSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeYAnalysis")==0) return BedSlopeYAnalysisEnum;
++	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
++	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+@@ -376,16 +382,16 @@
+ 	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
+ 	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
++	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+@@ -499,16 +505,16 @@
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+ 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+ 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+-	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16180)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16181)
+@@ -52,6 +52,15 @@
+ void UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ #endif
+ 
++#ifdef _HAVE_DAMAGE_
++/*damage*/
++void CreateNodesDamage(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsDamage(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsDamage(Loads** ploads, IoModel* iomodel);
++void UpdateElementsDamage(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++#endif
++
+ /*bed slope*/
+ void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
+ void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16181)
+@@ -111,6 +111,9 @@
+ 		case GiaAnalysisEnum:
+ 			numdofs=1;
+ 			break;
++		case DamageEvolutionAnalysisEnum:
++			numdofs=1;
++			break;
+ 		case BalancethicknessAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16181)
+@@ -108,7 +108,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
+-
++	
+ 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+ 	if(ispdd){
+ 
+@@ -236,6 +236,10 @@
+ 	CreateParametersHydrologyDCInefficient(&parameters,iomodel,solution_type,analysis_type);
+ 	CreateParametersHydrologyDCEfficient(&parameters,iomodel,solution_type,analysis_type);
+ 	#endif
++	
++	#ifdef _HAVE_DAMAGE_
++	CreateParametersDamage(&parameters,iomodel,solution_type,analysis_type);
++	#endif
+ 
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16181)
+@@ -130,6 +130,16 @@
+ 			break;
+ 		#endif
+ 
++		#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			CreateNodesDamage(pnodes, iomodel);
++			CreateConstraintsDamage(pconstraints,iomodel);
++			CreateLoadsDamage(ploads,iomodel);
++			UpdateElementsDamage(elements,iomodel,analysis_counter,analysis_type);
++			break;
++		#endif
++
++
+ 		#ifdef _HAVE_SLOPE_
+ 		case BedSlopeAnalysisEnum:
+ 			CreateNodesBedSlope(pnodes, iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 16181)
+@@ -0,0 +1,34 @@
++/*
++ * UpdateElementsDamage:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsDamage(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	/*What input do I need to run my damage evolution model?*/
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	iomodel->FetchDataToInput(elements,DamageDEnum);
++
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	if(dakota_analysis){
++		elements->InputDuplicate(DamageDEnum, QmuDamageDEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.dirstamp
+===================================================================
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16181)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsDamage.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsDamage(Loads** ploads, IoModel* iomodel){
++	
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16181)
+@@ -0,0 +1,36 @@
++/*!\file: CreateParametersDamage.cpp
++ * \brief driver for creating parameters dataset, for damage evolution analysis.
++ */ 
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
++
++	Parameters *parameters = NULL;
++	char*       law;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*retrieve some parameters: */
++	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
++	
++	iomodel->Constant(&law,DamageLawEnum);
++
++	/*Retrieve law dependent parameters: */
++	if (strcmp(law,"pralong")==0){
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC3Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC4Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum));
++	}
++	
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Damage/libISSMCore_a-CreateConstraintsDamage.o: \
++ modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp \
++ modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Damage/../../../classes/././classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Damage/../../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../ModelProcessorx.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/IoModelToConstraintsx.h \
++ modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/../../classes/classes.h
++
++modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Damage/../../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/IoModelToConstraintsx.h:
++
++modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Damage/libISSMCore_a-CreateNodesDamage.o: \
++ modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
++ modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Damage/../../../classes/././classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Damage/../../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h \
++ modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../ModelProcessorx.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h
++
++modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Damage/../../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h:
++
++modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateConstraintsMasstransport.o: \
++ modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
++ modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/IoModelToConstraintsx.h \
++ modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/../../classes/classes.h
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
++
++modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/IoModelToConstraintsx.h:
++
++modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateNodesMasstransport.o: \
++ modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h \
++ modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h:
++
++modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/.dirstamp
+===================================================================
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Damage/libISSMCore_a-UpdateElementsDamage.o: \
++ modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp \
++ modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Damage/../../../classes/././classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Damage/../../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h \
++ modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../ModelProcessorx.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h
++
++modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Damage/../../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h:
++
++modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po	(revision 16181)
+@@ -0,0 +1,1355 @@
++modules/ModelProcessorx/Masstransport/libISSMCore_a-UpdateElementsMasstransport.o: \
++ modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h \
++ modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h:
++
++modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po	(revision 16181)
+@@ -0,0 +1,1349 @@
++modules/ModelProcessorx/Damage/libISSMCore_a-CreateLoadsDamage.o: \
++ modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp \
++ modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Damage/../../../classes/././classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Damage/../../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../ModelProcessorx.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h
++
++modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Damage/../../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po	(revision 16181)
+@@ -0,0 +1,1349 @@
++modules/ModelProcessorx/Damage/libISSMCore_a-CreateParametersDamage.o: \
++ modules/ModelProcessorx/Damage/CreateParametersDamage.cpp \
++ modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Damage/../../../classes/././classes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/././Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Damage/../../../classes/./Update.h \
++ modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Damage/../../../shared/shared.h \
++ modules/ModelProcessorx/Damage/../ModelProcessorx.h \
++ modules/ModelProcessorx/Damage/../../../classes/classes.h
++
++modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Damage/../../../shared/shared.h:
++
++modules/ModelProcessorx/Damage/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po	(revision 16181)
+@@ -0,0 +1,1349 @@
++modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateLoadsMasstransport.o: \
++ modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
++ ../.././config.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
++ /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/x86_64-linux-gnu/bits/predefs.h \
++ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
++ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
++ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
++ /usr/include/x86_64-linux-gnu/bits/types.h \
++ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio.h \
++ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
++ /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
++ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
++ /usr/include/x86_64-linux-gnu/bits/inf.h \
++ /usr/include/x86_64-linux-gnu/bits/nan.h \
++ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
++ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
++ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
++ /usr/include/x86_64-linux-gnu/bits/math-finite.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
++ /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
++ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
++ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
++ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/endian.h \
++ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
++ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
++ /usr/include/x86_64-linux-gnu/sys/select.h \
++ /usr/include/x86_64-linux-gnu/bits/select.h \
++ /usr/include/x86_64-linux-gnu/bits/sigset.h \
++ /usr/include/x86_64-linux-gnu/bits/time.h \
++ /usr/include/x86_64-linux-gnu/bits/select2.h \
++ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
++ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
++ /usr/include/x86_64-linux-gnu/bits/wchar.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
++ /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
++ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
++ /usr/include/linux/limits.h \
++ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
++ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
++ /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
++ /usr/include/x86_64-linux-gnu/asm/param.h \
++ /usr/include/asm-generic/param.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
++ /usr/include/c++/4.6/cstddef \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
++ /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
++ /usr/include/inttypes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
++ /usr/include/c++/4.6/cstring \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
++ /usr/include/c++/4.6/cassert /usr/include/assert.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
++ /usr/include/c++/4.6/cstdlib \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
++ /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
++ /usr/include/c++/4.6/bits/stringfwd.h \
++ /usr/include/c++/4.6/bits/char_traits.h \
++ /usr/include/c++/4.6/bits/stl_algobase.h \
++ /usr/include/c++/4.6/bits/functexcept.h \
++ /usr/include/c++/4.6/bits/exception_defines.h \
++ /usr/include/c++/4.6/bits/cpp_type_traits.h \
++ /usr/include/c++/4.6/ext/type_traits.h \
++ /usr/include/c++/4.6/ext/numeric_traits.h \
++ /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
++ /usr/include/c++/4.6/bits/concept_check.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
++ /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
++ /usr/include/c++/4.6/bits/stl_iterator.h \
++ /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
++ /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
++ /usr/include/c++/4.6/bits/allocator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
++ /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
++ /usr/include/c++/4.6/bits/localefwd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
++ /usr/include/c++/4.6/clocale /usr/include/locale.h \
++ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
++ /usr/include/c++/4.6/cctype /usr/include/ctype.h \
++ /usr/include/c++/4.6/bits/ostream_insert.h \
++ /usr/include/c++/4.6/bits/cxxabi_forced.h \
++ /usr/include/c++/4.6/bits/stl_function.h \
++ /usr/include/c++/4.6/backward/binders.h \
++ /usr/include/c++/4.6/bits/range_access.h \
++ /usr/include/c++/4.6/bits/basic_string.h \
++ /usr/include/c++/4.6/ext/atomicity.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
++ /usr/include/pthread.h /usr/include/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/sched.h \
++ /usr/include/x86_64-linux-gnu/bits/timex.h \
++ /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
++ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
++ /usr/include/x86_64-linux-gnu/bits/environments.h \
++ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
++ /usr/include/x86_64-linux-gnu/bits/unistd.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
++ /usr/include/c++/4.6/initializer_list \
++ /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
++ /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
++ /usr/include/c++/4.6/bits/ios_base.h \
++ /usr/include/c++/4.6/bits/locale_classes.h \
++ /usr/include/c++/4.6/bits/locale_classes.tcc \
++ /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.h \
++ /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
++ /usr/include/wctype.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
++ /usr/include/c++/4.6/bits/streambuf_iterator.h \
++ /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
++ /usr/include/c++/4.6/bits/locale_facets.tcc \
++ /usr/include/c++/4.6/bits/basic_ios.tcc \
++ /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
++ /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
++ /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
++ /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
++ /usr/include/c++/4.6/bits/stl_uninitialized.h \
++ /usr/include/c++/4.6/bits/stl_vector.h \
++ /usr/include/c++/4.6/bits/stl_bvector.h \
++ /usr/include/c++/4.6/bits/vector.tcc \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
++ modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
++ modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
++ modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
++ modules/ModelProcessorx/Masstransport/../../../classes/classes.h
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
++
++../.././config.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/x86_64-linux-gnu/bits/predefs.h:
++
++/usr/include/x86_64-linux-gnu/sys/cdefs.h:
++
++/usr/include/x86_64-linux-gnu/bits/wordsize.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs.h:
++
++/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
++
++/usr/include/x86_64-linux-gnu/bits/types.h:
++
++/usr/include/x86_64-linux-gnu/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdio2.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
++
++/usr/include/math.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_val.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
++
++/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
++
++/usr/include/x86_64-linux-gnu/bits/inf.h:
++
++/usr/include/x86_64-linux-gnu/bits/nan.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathdef.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
++
++/usr/include/x86_64-linux-gnu/bits/mathinline.h:
++
++/usr/include/x86_64-linux-gnu/bits/math-finite.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
++
++/usr/include/memory.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/x86_64-linux-gnu/bits/string3.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitflags.h:
++
++/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/endian.h:
++
++/usr/include/x86_64-linux-gnu/bits/byteswap.h:
++
++/usr/include/x86_64-linux-gnu/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/x86_64-linux-gnu/sys/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/select.h:
++
++/usr/include/x86_64-linux-gnu/bits/sigset.h:
++
++/usr/include/x86_64-linux-gnu/bits/time.h:
++
++/usr/include/x86_64-linux-gnu/bits/select2.h:
++
++/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
++
++/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/x86_64-linux-gnu/bits/stdlib.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
++
++/usr/include/stdint.h:
++
++/usr/include/x86_64-linux-gnu/bits/wchar.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
++
++/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
++
++/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
++
++/usr/include/x86_64-linux-gnu/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/x86_64-linux-gnu/asm/param.h:
++
++/usr/include/asm-generic/param.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
++
++/usr/include/c++/4.6/cstddef:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
++
++/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
++
++/usr/include/inttypes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
++
++/usr/include/c++/4.6/cstring:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
++
++/usr/include/c++/4.6/cassert:
++
++/usr/include/assert.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
++
++/usr/include/c++/4.6/cstdlib:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
++
++/usr/include/c++/4.6/exception:
++
++/usr/include/c++/4.6/string:
++
++/usr/include/c++/4.6/bits/stringfwd.h:
++
++/usr/include/c++/4.6/bits/char_traits.h:
++
++/usr/include/c++/4.6/bits/stl_algobase.h:
++
++/usr/include/c++/4.6/bits/functexcept.h:
++
++/usr/include/c++/4.6/bits/exception_defines.h:
++
++/usr/include/c++/4.6/bits/cpp_type_traits.h:
++
++/usr/include/c++/4.6/ext/type_traits.h:
++
++/usr/include/c++/4.6/ext/numeric_traits.h:
++
++/usr/include/c++/4.6/bits/stl_pair.h:
++
++/usr/include/c++/4.6/bits/move.h:
++
++/usr/include/c++/4.6/bits/concept_check.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
++
++/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
++
++/usr/include/c++/4.6/bits/stl_iterator.h:
++
++/usr/include/c++/4.6/debug/debug.h:
++
++/usr/include/c++/4.6/bits/postypes.h:
++
++/usr/include/c++/4.6/cwchar:
++
++/usr/include/x86_64-linux-gnu/bits/wchar2.h:
++
++/usr/include/c++/4.6/bits/allocator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
++
++/usr/include/c++/4.6/ext/new_allocator.h:
++
++/usr/include/c++/4.6/new:
++
++/usr/include/c++/4.6/bits/localefwd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
++
++/usr/include/c++/4.6/clocale:
++
++/usr/include/locale.h:
++
++/usr/include/x86_64-linux-gnu/bits/locale.h:
++
++/usr/include/c++/4.6/iosfwd:
++
++/usr/include/c++/4.6/cctype:
++
++/usr/include/ctype.h:
++
++/usr/include/c++/4.6/bits/ostream_insert.h:
++
++/usr/include/c++/4.6/bits/cxxabi_forced.h:
++
++/usr/include/c++/4.6/bits/stl_function.h:
++
++/usr/include/c++/4.6/backward/binders.h:
++
++/usr/include/c++/4.6/bits/range_access.h:
++
++/usr/include/c++/4.6/bits/basic_string.h:
++
++/usr/include/c++/4.6/ext/atomicity.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
++
++/usr/include/pthread.h:
++
++/usr/include/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/sched.h:
++
++/usr/include/x86_64-linux-gnu/bits/timex.h:
++
++/usr/include/x86_64-linux-gnu/bits/setjmp.h:
++
++/usr/include/unistd.h:
++
++/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
++
++/usr/include/x86_64-linux-gnu/bits/environments.h:
++
++/usr/include/x86_64-linux-gnu/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/x86_64-linux-gnu/bits/unistd.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
++
++/usr/include/c++/4.6/initializer_list:
++
++/usr/include/c++/4.6/bits/basic_string.tcc:
++
++/usr/include/c++/4.6/iostream:
++
++/usr/include/c++/4.6/ostream:
++
++/usr/include/c++/4.6/ios:
++
++/usr/include/c++/4.6/bits/ios_base.h:
++
++/usr/include/c++/4.6/bits/locale_classes.h:
++
++/usr/include/c++/4.6/bits/locale_classes.tcc:
++
++/usr/include/c++/4.6/streambuf:
++
++/usr/include/c++/4.6/bits/streambuf.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.h:
++
++/usr/include/c++/4.6/bits/locale_facets.h:
++
++/usr/include/c++/4.6/cwctype:
++
++/usr/include/wctype.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
++
++/usr/include/c++/4.6/bits/streambuf_iterator.h:
++
++/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
++
++/usr/include/c++/4.6/bits/locale_facets.tcc:
++
++/usr/include/c++/4.6/bits/basic_ios.tcc:
++
++/usr/include/c++/4.6/bits/ostream.tcc:
++
++/usr/include/c++/4.6/istream:
++
++/usr/include/c++/4.6/bits/istream.tcc:
++
++/usr/include/c++/4.6/sstream:
++
++/usr/include/c++/4.6/bits/sstream.tcc:
++
++/usr/include/c++/4.6/iomanip:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
++
++/usr/include/c++/4.6/vector:
++
++/usr/include/c++/4.6/bits/stl_construct.h:
++
++/usr/include/c++/4.6/bits/stl_uninitialized.h:
++
++/usr/include/c++/4.6/bits/stl_vector.h:
++
++/usr/include/c++/4.6/bits/stl_bvector.h:
++
++/usr/include/c++/4.6/bits/vector.tcc:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
++
++modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
++
++modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
++
++modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
++
++modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo	(revision 16181)
+@@ -0,0 +1 @@
++# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp	(revision 16181)
+@@ -0,0 +1,20 @@
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
++
++void	CreateConstraintsDamage(Constraints** pconstraints, IoModel* iomodel){
++
++	/*Fetch parameters: */
++	int stabilization;
++	iomodel->Constant(&stabilization,DamageStabilizationEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	IoModelToConstraintsx(constraints,iomodel,DamageSpcdamageEnum,DamageEvolutionAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp	(revision 16181)
+@@ -0,0 +1,17 @@
++/*
++ * CreateNodesDamage.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesDamage(Nodes** pnodes, IoModel* iomodel){
++
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++	CreateNodes(pnodes,iomodel,DamageEvolutionAnalysisEnum,P1Enum);
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16180)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16181)
+@@ -545,6 +545,15 @@
+ 					./classes/GiaDeflectionCoreArgs.h
+ 
+ #}}}
++#Damage sources  {{{
++damage_sources =  ./analyses/damage_core.cpp\
++					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
++					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
++					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
++					./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
++					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
++
++#}}}
+ #Groundingline sources  {{{
+ groundingline_sources= ./modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp\
+ 					        ./modules/GroundinglineMigrationx/GroundinglineMigrationx.h
+@@ -949,6 +958,11 @@
+ if KRIGING
+ issm_sources +=  $(pkriging_sources)
+ endif
++
++if DAMAGE
++issm_sources +=  $(damage_sources)
++endif
++
+ #}}}
+ #Library flags and sources {{{
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16180)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16181)
+@@ -91,6 +91,7 @@
+ 				analysis_type==SurfaceSlopeAnalysisEnum || 
+ 				analysis_type==BalancethicknessAnalysisEnum ||
+ 				analysis_type==HydrologyDCInefficientAnalysisEnum ||
++				analysis_type==DamageEvolutionAnalysisEnum || 
+ 				analysis_type==HydrologyDCEfficientAnalysisEnum
+ 				){
+ 		if(iomodel->dim==3){
+Index: ../trunk-jpl/src/m/solve/process_solve_options.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16180)
++++ ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16181)
+@@ -12,7 +12,7 @@
+ 		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
+ 		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),...
+ 		BalancevelocitySolutionEnum(),BedSlopeSolutionEnum(),...
+-		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()]),
++		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum(),DamageEvolutionSolutionEnum()]),
+ 	error(['process_solve_options error message: solution_type ' EnumToString(solution_type) ' not supported yet!']);
+ end
+ outoptions.solution_type=solution_type;
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 16180)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 16181)
+@@ -10,6 +10,7 @@
+ 		isthermal         = 0;
+ 		isgroundingline   = 0;
+ 		isgia             = 0;
++		isdamage             = 0;
+ 		requested_outputs = NaN;
+ 	end
+ 	methods
+@@ -29,6 +30,7 @@
+ 			obj.isthermal=1;
+ 			obj.isgroundingline=0;
+ 			obj.isgia=0;
++			obj.isdamage=0;
+ 
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+@@ -41,17 +43,19 @@
+ 			md = checkfield(md,'transient.isthermal','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgia','numel',[1],'values',[0 1]);
++			md = checkfield(md,'transient.isdamage','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.requested_outputs','size',[NaN 1]);
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   transient solution parameters:'));
+ 
+-			fielddisplay(obj,'ismasstransport','indicates if a masstransport solution is used in the transient');
+-			fielddisplay(obj,'isstressbalance','indicates if a stressbalance solution is used in the transient');
+-			fielddisplay(obj,'isthermal','indicates if a thermal solution is used in the transient');
+-			fielddisplay(obj,'isgroundingline','indicates if a groundingline migration is used in the transient');
+-			fielddisplay(obj,'isgia','indicates if a postglacial rebound model is used in the transient');
++			fielddisplay(obj,'ismasstransport','indicates whether a masstransport solution is used in the transient');
++			fielddisplay(obj,'isstressbalance','indicates whether a stressbalance solution is used in the transient');
++			fielddisplay(obj,'isthermal','indicates whether a thermal solution is used in the transient');
++			fielddisplay(obj,'isgroundingline','indicates whether a groundingline migration is used in the transient');
++			fielddisplay(obj,'isgia','indicates whether a postglacial rebound model is used in the transient');
++			fielddisplay(obj,'isdamage','indicates whether damage evolution is used in the transient');
+ 			fielddisplay(obj,'requested_outputs','list of additional outputs requested');
+ 
+ 		end % }}}
+@@ -61,6 +65,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','isthermal','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgroundingline','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgia','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isdamage','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16180)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16181)
+@@ -7,9 +7,10 @@
+ 	properties (SetAccess=public)  
+ 	% {{{
+ 		%damage 
+-		isdamage            = NaN;
+ 		D                   = NaN;
+ 		law                 = '';
++		spcdamage           = NaN; 
++		stabilization       = NaN;
+ 		
+ 		%parameters for law 'initial': 
+ 		stress_threshold    = NaN;
+@@ -17,6 +18,7 @@
+ 		c2                  = NaN;
+ 		c3                  = NaN;
+ 		c4                  = NaN;
++		healing             = NaN;
+ 
+ 	end % }}}
+ 	methods
+@@ -41,12 +43,15 @@
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+ 			%damage parameters: 
+-			obj.isdamage=0;
+ 			obj.D=0;
+ 			obj.law='undamaged';
+-			
++		
++			%Type of stabilization used
++			obj.stabilization=2;
++	
+ 			%damage parameters for 'initial' law of damage propagation
+ 			obj.stress_threshold=0;
++			obj.healing=0;
+ 			obj.c1=0;
+ 			obj.c2=0;
+ 			obj.c3=0;
+@@ -56,10 +61,11 @@
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			
+ 			md = checkfield(md,'damage.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
+-			if obj.isdamage,
+-				md = checkfield(md,'damage.law','values',{'undamaged','pralong'});
+-			end
++			md = checkfield(md,'damage.law','values',{'undamaged','pralong'});
++			md = checkfield(md,'damage.spcdamage','forcing',1);
++			md = checkfield(md,'damage.stabilization','numel',[1],'values',[0 1 2]);
+ 			if strcmpi(obj.law,'pralong'),
++				md = checkfield(md,'damage.healing','>=',0);
+ 				md = checkfield(md,'damage.c1','>=',0);
+ 				md = checkfield(md,'damage.c2','>=',0);
+ 				md = checkfield(md,'damage.c3','>=',0);
+@@ -73,28 +79,31 @@
+ 
+ 			fielddisplay(obj,'D','damage tensor (scalar)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
++			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
+ 			if strcmpi(obj.law,'pralong'),
+ 				fielddisplay(obj,'c1','damage parameter 1');
+ 				fielddisplay(obj,'c2','damage parameter 2');
+ 				fielddisplay(obj,'c3','damage parameter 3');
+ 				fielddisplay(obj,'c4','damage parameter 4');
++				fielddisplay(obj,'healing','damage healing parameter 1');
+ 				fielddisplay(obj,'stress_threshold','damage stress threshold [Pa]');
+ 			end
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 		
+-			WriteData(fid,'object',obj,'fieldname','isdamage','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','D','format','DoubleMat','mattype',1);
+-			if obj.isdamage,
+-				WriteData(fid,'object',obj,'fieldname','law','format','String');
+-			end
++			WriteData(fid,'object',obj,'fieldname','law','format','String');
++			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
+ 			if strcmpi(obj.law,'pralong'),
+ 				WriteData(fid,'object',obj,'fieldname','c1','format','Double');
+ 				WriteData(fid,'object',obj,'fieldname','c2','format','Double');
+ 				WriteData(fid,'object',obj,'fieldname','c3','format','Double');
+ 				WriteData(fid,'object',obj,'fieldname','c4','format','Double');
+ 				WriteData(fid,'object',obj,'fieldname','stress_threshold','format','Double');
++				WriteData(fid,'object',obj,'fieldname','healing','format','Double');
+ 			end
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16180)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16181)
+@@ -99,6 +99,10 @@
+ 	case HydrologySolutionEnum(),
+ 		numanalyses=3; 
+ 		analyses=[BedSlopeAnalysisEnum();SurfaceSlopeAnalysisEnum();HydrologyShreveAnalysisEnum();HydrologyDCInefficientAnalysisEnum();HydrologyDCEfficientAnalysisEnum()];
++	
++	case DamageEvolutionSolutionEnum(),
++		numanalyses=1; 
++		analyses=[DamageEvolutionAnalysisEnum()];
+ 
+ 	otherwise
+ 		error('%s%s%s',' solution type: ',EnumToString(solutiontype),' not supported yet!');
+Index: ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m	(revision 16180)
++++ ../trunk-jpl/src/m/enum/DamageIsdamageEnum.m	(revision 16181)
+@@ -1,11 +0,0 @@
+-function macro=DamageIsdamageEnum()
+-%DAMAGEISDAMAGEENUM - Enum of DamageIsdamage
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DamageIsdamageEnum()
+-
+-macro=StringToEnum('DamageIsdamage');
+Index: ../trunk-jpl/src/m/enum/QmuDamageDEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuDamageDEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuDamageDEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=QmuDamageDEnum()
++%QMUDAMAGEDENUM - Enum of QmuDamageD
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuDamageDEnum()
++
++macro=StringToEnum('QmuDamageD');
+Index: ../trunk-jpl/src/m/enum/DamageHealingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageHealingEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageHealingEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=DamageHealingEnum()
++%DAMAGEHEALINGENUM - Enum of DamageHealing
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageHealingEnum()
++
++macro=StringToEnum('DamageHealing');
+Index: ../trunk-jpl/src/m/enum/DamageEvolutionSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageEvolutionSolutionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageEvolutionSolutionEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=DamageEvolutionSolutionEnum()
++%DAMAGEEVOLUTIONSOLUTIONENUM - Enum of DamageEvolutionSolution
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageEvolutionSolutionEnum()
++
++macro=StringToEnum('DamageEvolutionSolution');
+Index: ../trunk-jpl/src/m/enum/DamageSpcdamageEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageSpcdamageEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageSpcdamageEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=DamageSpcdamageEnum()
++%DAMAGESPCDAMAGEENUM - Enum of DamageSpcdamage
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageSpcdamageEnum()
++
++macro=StringToEnum('DamageSpcdamage');
+Index: ../trunk-jpl/src/m/enum/TransientIsdamageEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TransientIsdamageEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/TransientIsdamageEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=TransientIsdamageEnum()
++%TRANSIENTISDAMAGEENUM - Enum of TransientIsdamage
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=TransientIsdamageEnum()
++
++macro=StringToEnum('TransientIsdamage');
+Index: ../trunk-jpl/src/m/enum/DamageEvolutionAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageEvolutionAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageEvolutionAnalysisEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=DamageEvolutionAnalysisEnum()
++%DAMAGEEVOLUTIONANALYSISENUM - Enum of DamageEvolutionAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageEvolutionAnalysisEnum()
++
++macro=StringToEnum('DamageEvolutionAnalysis');
+Index: ../trunk-jpl/src/m/enum/DamageStabilizationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageStabilizationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageStabilizationEnum.m	(revision 16181)
+@@ -0,0 +1,11 @@
++function macro=DamageStabilizationEnum()
++%DAMAGESTABILIZATIONENUM - Enum of DamageStabilization
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageStabilizationEnum()
++
++macro=StringToEnum('DamageStabilization');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16180)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16181)
+@@ -152,14 +152,17 @@
+ def MaterialsRheologyLawEnum(): return StringToEnum("MaterialsRheologyLaw")[0]
+ def MaterialsRheologyNEnum(): return StringToEnum("MaterialsRheologyN")[0]
+ def DamageDEnum(): return StringToEnum("DamageD")[0]
++def QmuDamageDEnum(): return StringToEnum("QmuDamageD")[0]
+ def DamageDbarEnum(): return StringToEnum("DamageDbar")[0]
+-def DamageIsdamageEnum(): return StringToEnum("DamageIsdamage")[0]
+ def DamageLawEnum(): return StringToEnum("DamageLaw")[0]
+ def DamageC1Enum(): return StringToEnum("DamageC1")[0]
+ def DamageC2Enum(): return StringToEnum("DamageC2")[0]
+ def DamageC3Enum(): return StringToEnum("DamageC3")[0]
+ def DamageC4Enum(): return StringToEnum("DamageC4")[0]
++def DamageHealingEnum(): return StringToEnum("DamageHealing")[0]
+ def DamageStressThresholdEnum(): return StringToEnum("DamageStressThreshold")[0]
++def DamageStabilizationEnum(): return StringToEnum("DamageStabilization")[0]
++def DamageSpcdamageEnum(): return StringToEnum("DamageSpcdamage")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
+@@ -263,6 +266,7 @@
+ def TransientIsmasstransportEnum(): return StringToEnum("TransientIsmasstransport")[0]
+ def TransientIsthermalEnum(): return StringToEnum("TransientIsthermal")[0]
+ def TransientIsgiaEnum(): return StringToEnum("TransientIsgia")[0]
++def TransientIsdamageEnum(): return StringToEnum("TransientIsdamage")[0]
+ def TransientNumRequestedOutputsEnum(): return StringToEnum("TransientNumRequestedOutputs")[0]
+ def TransientRequestedOutputsEnum(): return StringToEnum("TransientRequestedOutputs")[0]
+ def SolutionTypeEnum(): return StringToEnum("SolutionType")[0]
+@@ -284,6 +288,8 @@
+ def BedSlopeSolutionEnum(): return StringToEnum("BedSlopeSolution")[0]
+ def BedSlopeXAnalysisEnum(): return StringToEnum("BedSlopeXAnalysis")[0]
+ def BedSlopeYAnalysisEnum(): return StringToEnum("BedSlopeYAnalysis")[0]
++def DamageEvolutionSolutionEnum(): return StringToEnum("DamageEvolutionSolution")[0]
++def DamageEvolutionAnalysisEnum(): return StringToEnum("DamageEvolutionAnalysis")[0]
+ def StressbalanceAnalysisEnum(): return StringToEnum("StressbalanceAnalysis")[0]
+ def StressbalanceSIAAnalysisEnum(): return StringToEnum("StressbalanceSIAAnalysis")[0]
+ def StressbalanceSolutionEnum(): return StringToEnum("StressbalanceSolution")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16181-16182.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16181-16182.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16181-16182.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16181)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16182)
+@@ -1,4 +1,4 @@
+-/*!\file: UpdateCounter.cpp
++/*!\file: UpdateCounters.cpp
+  * \brief update counters after adding objects to a dataset.
+  */ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16182-16183.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16182-16183.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16182-16183.diff	(revision 16556)
@@ -0,0 +1,12341 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsDamage.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Damage/libISSMCore_a-UpdateElementsDamage.o: \
+- modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp \
+- modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Damage/../../../classes/././classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Damage/../../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h \
+- modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../ModelProcessorx.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Damage/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h:
+-
+-modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-UpdateElementsMasstransport.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Masstransport/libISSMCore_a-UpdateElementsMasstransport.o: \
+- modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h \
+- modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsDamage.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-UpdateElementsMasstransport.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsDamage.Po	(revision 16183)
+@@ -1,1349 +0,0 @@
+-modules/ModelProcessorx/Damage/libISSMCore_a-CreateLoadsDamage.o: \
+- modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp \
+- modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Damage/../../../classes/././classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Damage/../../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../ModelProcessorx.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Damage/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateParametersDamage.Po	(revision 16183)
+@@ -1,1349 +0,0 @@
+-modules/ModelProcessorx/Damage/libISSMCore_a-CreateParametersDamage.o: \
+- modules/ModelProcessorx/Damage/CreateParametersDamage.cpp \
+- modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Damage/../../../classes/././classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Damage/../../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../ModelProcessorx.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Damage/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateLoadsMasstransport.Po	(revision 16183)
+@@ -1,1349 +0,0 @@
+-modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateLoadsMasstransport.o: \
+- modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsDamage.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsDamage.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Damage/libISSMCore_a-CreateConstraintsDamage.o: \
+- modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp \
+- modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Damage/../../../classes/././classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Damage/../../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../ModelProcessorx.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/IoModelToConstraintsx.h \
+- modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/../../classes/classes.h
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Damage/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/IoModelToConstraintsx.h:
+-
+-modules/ModelProcessorx/Damage/../../IoModelToConstraintsx/../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateParametersDamage.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesDamage.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Damage/libISSMCore_a-CreateNodesDamage.o: \
+- modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+- modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Damage/../../../classes/././classes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/././Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Damage/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Damage/../../../classes/./Update.h \
+- modules/ModelProcessorx/Damage/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Damage/../../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h \
+- modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h \
+- modules/ModelProcessorx/Damage/../ModelProcessorx.h \
+- modules/ModelProcessorx/Damage/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Damage/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Damage/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../../MeshPartitionx/MeshPartitionx.h:
+-
+-modules/ModelProcessorx/Damage/../../MeshPartitionx/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Damage/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Damage/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateConstraintsMasstransport.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateConstraintsMasstransport.o: \
+- modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
+- modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/IoModelToConstraintsx.h \
+- modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/../../classes/classes.h
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/IoModelToConstraintsx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../IoModelToConstraintsx/../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateLoadsMasstransport.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore_a-CreateNodesMasstransport.Po	(revision 16183)
+@@ -1,1355 +0,0 @@
+-modules/ModelProcessorx/Masstransport/libISSMCore_a-CreateNodesMasstransport.o: \
+- modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h \
+- ../.././config.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h \
+- /usr/include/stdio.h /usr/include/features.h \
+- /usr/include/x86_64-linux-gnu/bits/predefs.h \
+- /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+- /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+- /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \
+- /usr/include/x86_64-linux-gnu/bits/types.h \
+- /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+- /usr/include/_G_config.h /usr/include/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio.h \
+- /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h \
+- /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+- /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+- /usr/include/x86_64-linux-gnu/bits/inf.h \
+- /usr/include/x86_64-linux-gnu/bits/nan.h \
+- /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+- /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+- /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+- /usr/include/x86_64-linux-gnu/bits/math-finite.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h \
+- /usr/include/memory.h /usr/include/string.h /usr/include/xlocale.h \
+- /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdlib.h \
+- /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+- /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/endian.h \
+- /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+- /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+- /usr/include/x86_64-linux-gnu/sys/select.h \
+- /usr/include/x86_64-linux-gnu/bits/select.h \
+- /usr/include/x86_64-linux-gnu/bits/sigset.h \
+- /usr/include/x86_64-linux-gnu/bits/time.h \
+- /usr/include/x86_64-linux-gnu/bits/select2.h \
+- /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+- /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+- /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \
+- /usr/include/x86_64-linux-gnu/bits/wchar.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \
+- /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \
+- /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+- /usr/include/linux/limits.h \
+- /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+- /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+- /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \
+- /usr/include/x86_64-linux-gnu/asm/param.h \
+- /usr/include/asm-generic/param.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h \
+- /usr/include/c++/4.6/cstddef \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h \
+- /proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h \
+- /usr/include/inttypes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h \
+- /usr/include/c++/4.6/cstring \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h \
+- /usr/include/c++/4.6/cassert /usr/include/assert.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h \
+- /usr/include/c++/4.6/cstdlib \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h \
+- /usr/include/c++/4.6/exception /usr/include/c++/4.6/string \
+- /usr/include/c++/4.6/bits/stringfwd.h \
+- /usr/include/c++/4.6/bits/char_traits.h \
+- /usr/include/c++/4.6/bits/stl_algobase.h \
+- /usr/include/c++/4.6/bits/functexcept.h \
+- /usr/include/c++/4.6/bits/exception_defines.h \
+- /usr/include/c++/4.6/bits/cpp_type_traits.h \
+- /usr/include/c++/4.6/ext/type_traits.h \
+- /usr/include/c++/4.6/ext/numeric_traits.h \
+- /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \
+- /usr/include/c++/4.6/bits/concept_check.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_types.h \
+- /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \
+- /usr/include/c++/4.6/bits/stl_iterator.h \
+- /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \
+- /usr/include/c++/4.6/cwchar /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+- /usr/include/c++/4.6/bits/allocator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \
+- /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \
+- /usr/include/c++/4.6/bits/localefwd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \
+- /usr/include/c++/4.6/clocale /usr/include/locale.h \
+- /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \
+- /usr/include/c++/4.6/cctype /usr/include/ctype.h \
+- /usr/include/c++/4.6/bits/ostream_insert.h \
+- /usr/include/c++/4.6/bits/cxxabi_forced.h \
+- /usr/include/c++/4.6/bits/stl_function.h \
+- /usr/include/c++/4.6/backward/binders.h \
+- /usr/include/c++/4.6/bits/range_access.h \
+- /usr/include/c++/4.6/bits/basic_string.h \
+- /usr/include/c++/4.6/ext/atomicity.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \
+- /usr/include/pthread.h /usr/include/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/sched.h \
+- /usr/include/x86_64-linux-gnu/bits/timex.h \
+- /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \
+- /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+- /usr/include/x86_64-linux-gnu/bits/environments.h \
+- /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+- /usr/include/x86_64-linux-gnu/bits/unistd.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \
+- /usr/include/c++/4.6/initializer_list \
+- /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/iostream \
+- /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \
+- /usr/include/c++/4.6/bits/ios_base.h \
+- /usr/include/c++/4.6/bits/locale_classes.h \
+- /usr/include/c++/4.6/bits/locale_classes.tcc \
+- /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.h \
+- /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \
+- /usr/include/wctype.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \
+- /usr/include/c++/4.6/bits/streambuf_iterator.h \
+- /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \
+- /usr/include/c++/4.6/bits/locale_facets.tcc \
+- /usr/include/c++/4.6/bits/basic_ios.tcc \
+- /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \
+- /usr/include/c++/4.6/bits/istream.tcc /usr/include/c++/4.6/sstream \
+- /usr/include/c++/4.6/bits/sstream.tcc /usr/include/c++/4.6/iomanip \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h \
+- /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_construct.h \
+- /usr/include/c++/4.6/bits/stl_uninitialized.h \
+- /usr/include/c++/4.6/bits/stl_vector.h \
+- /usr/include/c++/4.6/bits/stl_bvector.h \
+- /usr/include/c++/4.6/bits/vector.tcc \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h \
+- modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././classes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./Update.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h \
+- modules/ModelProcessorx/Masstransport/../../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h \
+- modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h \
+- modules/ModelProcessorx/Masstransport/../ModelProcessorx.h \
+- modules/ModelProcessorx/Masstransport/../../../classes/classes.h
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/toolkits.h:
+-
+-../.././config.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/petscincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmat.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscvec.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscis.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscconf.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscfix.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscversion.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpio.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/mpich/install/include/mpi.h:
+-
+-/usr/include/stdio.h:
+-
+-/usr/include/features.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/predefs.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+-
+-/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/types.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+-
+-/usr/include/libio.h:
+-
+-/usr/include/_G_config.h:
+-
+-/usr/include/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscmath.h:
+-
+-/usr/include/math.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/inf.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/nan.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/math-finite.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscerror.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewertypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscoptions.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petsclog.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsys.h:
+-
+-/usr/include/memory.h:
+-
+-/usr/include/string.h:
+-
+-/usr/include/xlocale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/string3.h:
+-
+-/usr/include/stdlib.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+-
+-/usr/include/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/endian.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/types.h:
+-
+-/usr/include/time.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sigset.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/time.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/select2.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+-
+-/usr/include/alloca.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/xmmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/mm_malloc.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h:
+-
+-/usr/include/stdint.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h:
+-
+-/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h:
+-
+-/usr/include/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+-
+-/usr/include/linux/limits.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+-
+-/usr/include/x86_64-linux-gnu/sys/param.h:
+-
+-/usr/include/linux/param.h:
+-
+-/usr/include/x86_64-linux-gnu/asm/param.h:
+-
+-/usr/include/asm-generic/param.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscsftypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscviewer.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscksp.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscpc.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdmtypes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/petscdrawtypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/petscpatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/./SolverEnum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/issmmpi.h:
+-
+-/usr/include/c++/4.6/cstddef:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/commops.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../../shared/io/Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/patches/../../../shared/io/Comm/../../../toolkits/mpi/./commops/../../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/petscobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../petscincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./../../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./petsc/objects/./PetscSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/metisincludes.h:
+-
+-/proj/ice/larour2/issm-uci-damage/trunk-jpl/externalpackages/petsc/install/include/metis.h:
+-
+-/usr/include/inttypes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./metis/patches/metispatches.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./triangle/triangleincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/toolkitobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Vector.h:
+-
+-/usr/include/c++/4.6/cstring:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../../shared/Enum/./EnumDefinitions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmAbsVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./MemOps/MemOps.h:
+-
+-/usr/include/c++/4.6/cassert:
+-
+-/usr/include/assert.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Abs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BigPrimeNumber.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/BinaryRand.h:
+-
+-/usr/include/c++/4.6/cstdlib:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/Exchange.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/extrema.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/HeapSort.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/OppositeAngle.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Bamg/../Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Elements/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exceptions/exceptions.h:
+-
+-/usr/include/c++/4.6/exception:
+-
+-/usr/include/c++/4.6/string:
+-
+-/usr/include/c++/4.6/bits/stringfwd.h:
+-
+-/usr/include/c++/4.6/bits/char_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_algobase.h:
+-
+-/usr/include/c++/4.6/bits/functexcept.h:
+-
+-/usr/include/c++/4.6/bits/exception_defines.h:
+-
+-/usr/include/c++/4.6/bits/cpp_type_traits.h:
+-
+-/usr/include/c++/4.6/ext/type_traits.h:
+-
+-/usr/include/c++/4.6/ext/numeric_traits.h:
+-
+-/usr/include/c++/4.6/bits/stl_pair.h:
+-
+-/usr/include/c++/4.6/bits/move.h:
+-
+-/usr/include/c++/4.6/bits/concept_check.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_types.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h:
+-
+-/usr/include/c++/4.6/bits/stl_iterator.h:
+-
+-/usr/include/c++/4.6/debug/debug.h:
+-
+-/usr/include/c++/4.6/bits/postypes.h:
+-
+-/usr/include/c++/4.6/cwchar:
+-
+-/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+-
+-/usr/include/c++/4.6/bits/allocator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:
+-
+-/usr/include/c++/4.6/ext/new_allocator.h:
+-
+-/usr/include/c++/4.6/new:
+-
+-/usr/include/c++/4.6/bits/localefwd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
+-
+-/usr/include/c++/4.6/clocale:
+-
+-/usr/include/locale.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/locale.h:
+-
+-/usr/include/c++/4.6/iosfwd:
+-
+-/usr/include/c++/4.6/cctype:
+-
+-/usr/include/ctype.h:
+-
+-/usr/include/c++/4.6/bits/ostream_insert.h:
+-
+-/usr/include/c++/4.6/bits/cxxabi_forced.h:
+-
+-/usr/include/c++/4.6/bits/stl_function.h:
+-
+-/usr/include/c++/4.6/backward/binders.h:
+-
+-/usr/include/c++/4.6/bits/range_access.h:
+-
+-/usr/include/c++/4.6/bits/basic_string.h:
+-
+-/usr/include/c++/4.6/ext/atomicity.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h:
+-
+-/usr/include/pthread.h:
+-
+-/usr/include/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/sched.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/timex.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+-
+-/usr/include/unistd.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/environments.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/confname.h:
+-
+-/usr/include/getopt.h:
+-
+-/usr/include/x86_64-linux-gnu/bits/unistd.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h:
+-
+-/usr/include/c++/4.6/initializer_list:
+-
+-/usr/include/c++/4.6/bits/basic_string.tcc:
+-
+-/usr/include/c++/4.6/iostream:
+-
+-/usr/include/c++/4.6/ostream:
+-
+-/usr/include/c++/4.6/ios:
+-
+-/usr/include/c++/4.6/bits/ios_base.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.h:
+-
+-/usr/include/c++/4.6/bits/locale_classes.tcc:
+-
+-/usr/include/c++/4.6/streambuf:
+-
+-/usr/include/c++/4.6/bits/streambuf.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.h:
+-
+-/usr/include/c++/4.6/cwctype:
+-
+-/usr/include/wctype.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h:
+-
+-/usr/include/c++/4.6/bits/streambuf_iterator.h:
+-
+-/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h:
+-
+-/usr/include/c++/4.6/bits/locale_facets.tcc:
+-
+-/usr/include/c++/4.6/bits/basic_ios.tcc:
+-
+-/usr/include/c++/4.6/bits/ostream.tcc:
+-
+-/usr/include/c++/4.6/istream:
+-
+-/usr/include/c++/4.6/bits/istream.tcc:
+-
+-/usr/include/c++/4.6/sstream:
+-
+-/usr/include/c++/4.6/bits/sstream.tcc:
+-
+-/usr/include/c++/4.6/iomanip:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Disk/diskio.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Print/Print.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./io/./Comm/IssmComm.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/exp.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Numerics/recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Exp/../MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Matrix/../Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/numerics.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./Verbosity.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./GaussPoints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./isnan.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./recast.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/./OptPars.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Numerics/././types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Sorting/sorting.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./String/sharedstring.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./Threads/issm_threads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./TriMesh/trimesh.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/./LatLong/latlong.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/gslincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../gsl/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmToolkitUtils.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSeqVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmSolver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiDenseMat.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./DataSet.h:
+-
+-/usr/include/c++/4.6/vector:
+-
+-/usr/include/c++/4.6/bits/stl_construct.h:
+-
+-/usr/include/c++/4.6/bits/stl_uninitialized.h:
+-
+-/usr/include/c++/4.6/bits/stl_vector.h:
+-
+-/usr/include/c++/4.6/bits/stl_bvector.h:
+-
+-/usr/include/c++/4.6/bits/vector.tcc:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../../datastructures/./Object.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/mumpsincludes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./../mumps/../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././Bucket.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/MemOps/MemOps.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../../shared/io/io.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/././../mpi/issmmpi.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./../issm/./IssmMpiVec.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/./Solver.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Matrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./objects/././Vector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./toolkitsenums.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./issm/issmtoolkit.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../toolkits/./ToolkitOptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertices.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Vertex.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././classes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Nodes.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Contours.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Contour.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/././../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Profiler.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IndependentObject.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Segment.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Numerics/constants.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraints.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/Constraint.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcStatic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcTransient.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Constraints/SpcDynamic.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Loads.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Friction.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Numericalflux.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/./Load.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Riftfront.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Penpair.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/../Elements/../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Loads/Pengrid.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Elements.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Penta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./Element.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/Tria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/./TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Elements/ElementHook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/Options.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Exceptions/exceptions.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/././../../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/./././Option.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/GenericOption.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Options/OptionUtilities.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Inputs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/BoolInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/./Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DoubleInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/IntInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/PentaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/PentaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TriaInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/../Elements/TriaRef.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/ControlInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/DatasetInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Inputs/TransientInput.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/DoubleElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/../Inputs/Input.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/TriaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/PentaP1ElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ElementResults/BoolElementResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/Results.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/GenericExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/./ExternalResult.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./ExternalResults/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Materials.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matice.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/./Material.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Materials/Matpar.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/GenericParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/./../Node.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/BoolParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleTransientMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleMatArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DoubleVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntVecParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/IntMatParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/FileParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Parameters.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/Param.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/MatrixParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/VectorParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringArrayParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/StringParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/TransientParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Params/DataSetParam.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/matrixobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementMatrix.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../toolkits/toolkits.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./matrix/./ElementVector.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/gaussobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussTria.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./../../shared/Numerics/types.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./gauss/./GaussPenta.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/krigingobjects.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../datastructures/datastructures.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./GaussianVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/././Variogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./ExponentialVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./SphericalVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./PowerVariogram.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Quadtree.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observation.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./Observations.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./kriging/./../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Hook.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./DofIndexing.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./IoModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./../shared/Enum/Enum.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Patch.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./Update.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./FemModel.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./GiaDeflectionCoreArgs.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/./RiftStruct.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../../MeshPartitionx/MeshPartitionx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../MeshPartitionx/../../shared/shared.h:
+-
+-modules/ModelProcessorx/Masstransport/../ModelProcessorx.h:
+-
+-modules/ModelProcessorx/Masstransport/../../../classes/classes.h:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsDamage.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesDamage.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateConstraintsMasstransport.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose_a-CreateNodesMasstransport.r2cpp.Po	(revision 16183)
+@@ -1 +0,0 @@
+-# dummy
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage	(revision 16182)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage	(revision 16183)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
Index: issm/oecreview/Archive/16133-16554/ISSM-16183-16184.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16183-16184.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16183-16184.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16183)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16184)
+@@ -1848,7 +1848,7 @@
+ 		this->inputs->AddInput(new IntInput(name,reCast<int>(scalar)));
+ 	}
+ 	else if ((code==7) || (code==3)){ //IssmDouble
+-		this->inputs->AddInput(new DoubleInput(name,reCast<int>(scalar)));
++		this->inputs->AddInput(new DoubleInput(name,scalar));
+ 	}
+ 	else _error_("could not recognize nature of vector from code " << code);
+ 
+@@ -1878,7 +1878,7 @@
+ 		if(M==iomodel->numberofvertices){
+ 
+ 			/*create input values: */
+-			for(i=0;i<3;i++)nodeinputs[i]=(IssmDouble)vector[tria_vertex_ids[i]-1];
++			for(i=0;i<3;i++)nodeinputs[i]=vector[tria_vertex_ids[i]-1];
+ 
+ 			/*create static input: */
+ 			this->inputs->AddInput(new TriaInput(vector_enum,nodeinputs,P1Enum));
+@@ -1890,11 +1890,11 @@
+ 				/*create input values: */
+ 				for(i=0;i<3;i++){
+ 					row=tria_vertex_ids[i]-1;
+-					nodeinputs[i]=(IssmDouble)vector[N*row+t];
++					nodeinputs[i]=vector[N*row+t];
+ 				}
+ 
+ 				/*time? :*/
+-				time=(IssmDouble)vector[(M-1)*N+t];
++				time=vector[(M-1)*N+t];
+ 
+ 				if(t==0) transientinput=new TransientInput(vector_enum);
+ 				transientinput->AddTimeInput(new TriaInput(vector_enum,nodeinputs,P1Enum),time);
Index: issm/oecreview/Archive/16133-16554/ISSM-16184-16185.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16184-16185.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16184-16185.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/os/issmstssh.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstssh.m	(revision 16184)
++++ ../trunk-jpl/src/m/os/issmstssh.m	(revision 16185)
+@@ -6,3 +6,4 @@
+ 
+ %just use starcluster command to pipe an ssh command through
+ system([starcluster() ' sshmaster ' host ' --user ' login ' ''' command '''']);
++
+Index: ../trunk-jpl/src/m/os/starcluster.m
+===================================================================
+--- ../trunk-jpl/src/m/os/starcluster.m	(revision 16184)
++++ ../trunk-jpl/src/m/os/starcluster.m	(revision 16185)
+@@ -4,4 +4,4 @@
+ %   Usage:
+ %      STARCLUSTER=STARCLUSTER()
+ 
+-STARCLUSTER=[issmdir() '/externalpackages/python/install/bin/starcluster -c ' jplsvn '/projects/CloudComputing/starcluster.config'];
++STARCLUSTER=[issmdir() '/externalpackages/python/install/bin/starcluster -c ' jplsvn '/proj-group/CloudComputing/starcluster.config'];
Index: issm/oecreview/Archive/16133-16554/ISSM-16185-16186.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16185-16186.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16185-16186.diff	(revision 16556)
@@ -0,0 +1,307 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16185)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16186)
+@@ -65,7 +65,6 @@
+ 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
+ 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
+-		virtual void   InputCreate(IssmDouble scalar,int name,int code)=0;
+ 		virtual void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+ 		virtual void   RequestedOutput(int output_enum,int step,IssmDouble time)=0;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16185)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16186)
+@@ -1465,8 +1465,9 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromConstant(int value, int name);{{{*/
+ void  Tria::InputUpdateFromConstant(int constant, int name){
++
+ 	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
++	if(!IsInput(name)) return;
+ 
+ 	/*update input*/
+ 	this->inputs->AddInput(new IntInput(name,constant));
+@@ -1474,8 +1475,9 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromConstant(IssmDouble value, int name);{{{*/
+ void  Tria::InputUpdateFromConstant(IssmDouble constant, int name){
++
+ 	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
++	if(!IsInput(name)) return;
+ 
+ 	/*update input*/
+ 	this->inputs->AddInput(new DoubleInput(name,constant));
+@@ -1483,8 +1485,9 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromConstant(bool value, int name);{{{*/
+ void  Tria::InputUpdateFromConstant(bool constant, int name){
++
+ 	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
++	if(!IsInput(name)) return;
+ 
+ 	/*update input*/
+ 	this->inputs->AddInput(new BoolInput(name,constant));
+@@ -1761,7 +1764,6 @@
+ /*FUNCTION Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+ 
+-
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+ 
+@@ -1835,25 +1837,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputCreate(IssmDouble scalar,int enum,int code);{{{*/
+-void Tria::InputCreate(IssmDouble scalar,int name,int code){
+-
+-	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
+-
+-	if ((code==5) || (code==1)){ //boolean
+-		this->inputs->AddInput(new BoolInput(name,reCast<bool>(scalar)));
+-	}
+-	else if ((code==6) || (code==2)){ //integer
+-		this->inputs->AddInput(new IntInput(name,reCast<int>(scalar)));
+-	}
+-	else if ((code==7) || (code==3)){ //IssmDouble
+-		this->inputs->AddInput(new DoubleInput(name,scalar));
+-	}
+-	else _error_("could not recognize nature of vector from code " << code);
+-
+-}
+-/*}}}*/
+ /*FUNCTION Tria::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+ void Tria::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16185)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16186)
+@@ -90,7 +90,6 @@
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+ 		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
+ 		void        InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+-		void        InputCreate(IssmDouble scalar,int name,int code);
+ 		void        InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void        InputDuplicate(int original_enum,int new_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16185)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16186)
+@@ -1860,25 +1860,6 @@
+ 	input->ArtificialNoise(min,max);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputCreate(IssmDouble scalar,int enum,int code);{{{*/
+-void Penta::InputCreate(IssmDouble scalar,int name,int code){
+-
+-	/*Check that name is an element input*/
+-	if (!IsInput(name)) return;
+-
+-	if ((code==5) || (code==1)){ //boolean
+-		this->inputs->AddInput(new BoolInput(name,reCast<bool,IssmDouble>(scalar)));
+-	}
+-	else if ((code==6) || (code==2)){ //integer
+-		this->inputs->AddInput(new IntInput(name,reCast<int,IssmDouble>(scalar)));
+-	}
+-	else if ((code==7) || (code==3)){ //IssmDouble
+-		this->inputs->AddInput(new DoubleInput(name,scalar));
+-	}
+-	else _error_("could not recognize nature of vector from code " << code);
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+ void Penta::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16185)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16186)
+@@ -93,7 +93,6 @@
+ 
+ 		int    Sid();
+ 		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+-		void   InputCreate(IssmDouble scalar,int name,int code);
+ 		void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void   InputDuplicate(int original_enum,int new_enum);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16185)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16186)
+@@ -1047,7 +1047,7 @@
+ 	int         integer;
+ 	IssmDouble  scalar;
+ 	char       *string           = NULL;
+-	IssmDouble *IssmDoublevector = NULL;
++	IssmDouble *doublearray = NULL;
+ 	int         M,N;
+ 
+ 	/*Fetch parameters: */
+@@ -1059,57 +1059,39 @@
+ 	switch(code){
+ 		case 1: //boolean constant.  {{{
+ 			this->FetchData(&boolean,vector_enum);
+-
+-			/*Add boolean constant input to all elements: */
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					element->InputCreate((IssmDouble)boolean,vector_enum,code);
+-					counter++;
+-				}
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				element->InputUpdateFromConstant(boolean,vector_enum);
+ 			}
+ 			break; /*}}}*/
+ 		case 2: //integer constant.  {{{
+ 			this->FetchData(&integer,vector_enum);
+-
+-			/*Add integer constant input to all elements: */
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					element->InputCreate((IssmDouble)integer,vector_enum,code);
+-					counter++;
+-				}
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				element->InputUpdateFromConstant(integer,vector_enum);
+ 			}
+ 			break; /*}}}*/
+ 		case 3: //IssmDouble constant.  {{{
+ 			this->FetchData(&scalar,vector_enum);
+-
+-			/*Add IssmDouble constant input to all elements: */
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					element->InputCreate(scalar,vector_enum,code); 
+-					counter++;
+-				}
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				element->InputUpdateFromConstant(scalar,vector_enum);
+ 			}
+ 			break; /*}}}*/
+ 		case 5: //boolean vector.  {{{
+ 
+ 			/*Fetch vector:*/
+-			this->FetchData(&IssmDoublevector,&M,&N,vector_enum); //we still have a IssmDoublevector, because it might include times in transient mode
++			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+ 			/*Check we got something, otherwise fetch default: */
+-			if(IssmDoublevector){
++			if(doublearray){
+ 				defaulting=false;  //we are not defaulting, because  we do have a vector
+ 			}
+ 			else{
+ 				/*do we have a default enum to go fetch? */
+ 				if(default_vector_enum!=NoneEnum){
+ 					/*yes. fetch it: */
+-					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+-					if(IssmDoublevector){
++					this->FetchData(&doublearray,&M,&N,default_vector_enum);
++					if(doublearray){
+ 						defaulting=false;  //we are not defaulting, because  we do have a vector
+ 					}
+ 					else{
+@@ -1128,8 +1110,8 @@
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+ 					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+-					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++					if(defaulting) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
++					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+ 				}
+ 			}
+@@ -1137,17 +1119,17 @@
+ 		case 6: //int vector{{{
+ 
+ 			/*Fetch vector:*/
+-			this->FetchData(&IssmDoublevector,&M,&N,vector_enum); //we still have a IssmDoublevector, because it might include times in transient mode
++			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+ 			/*Check we got something, otherwise fetch default: */
+-			if(IssmDoublevector){
++			if(doublearray){
+ 				defaulting=false;  //we are not defaulting, because  we do have a vector
+ 			}
+ 			else{
+ 				/*do we have a default enum to go fetch? */
+ 				if(default_vector_enum!=NoneEnum){
+ 					/*yes. fetch it: */
+-					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+-					if(IssmDoublevector){
++					this->FetchData(&doublearray,&M,&N,default_vector_enum);
++					if(doublearray){
+ 						defaulting=false;  //we are not defaulting, because  we do have a vector
+ 					}
+ 					else{
+@@ -1166,8 +1148,8 @@
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+ 					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+-					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++					if(defaulting) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
++					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+ 				}
+ 			}
+@@ -1175,17 +1157,17 @@
+ 		case 7: //IssmDouble vector{{{
+ 
+ 			/*Fetch vector:*/
+-			this->FetchData(&IssmDoublevector,&M,&N,vector_enum);
++			this->FetchData(&doublearray,&M,&N,vector_enum);
+ 			/*Check we got something, otherwise fetch default: */
+-			if(IssmDoublevector){
++			if(doublearray){
+ 				defaulting=false;  //we are not defaulting, because  we do have a vector
+ 			}
+ 			else{
+ 				/*do we have a default enum to go fetch? */
+ 				if(default_vector_enum!=NoneEnum){
+ 					/*yes. fetch it: */
+-					this->FetchData(&IssmDoublevector,&M,&N,default_vector_enum);
+-					if(IssmDoublevector){
++					this->FetchData(&doublearray,&M,&N,default_vector_enum);
++					if(doublearray){
+ 						defaulting=false;  //we are not defaulting, because  we do have a vector
+ 					}
+ 					else{
+@@ -1204,8 +1186,8 @@
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+ 					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+-					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++					if(defaulting) element->InputUpdateFromConstant(default_value,vector_enum); 
++					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+ 				}
+ 			}
+@@ -1217,7 +1199,7 @@
+ 			/*}}}*/
+ 	}
+ 	/*Free ressources. Pay attention to not freeing an AD mode independent variable though!:*/
+-	if (!this->independents[vector_enum] && !this->independents[default_vector_enum]) xDelete<IssmDouble>(IssmDoublevector);
++	if (!this->independents[vector_enum] && !this->independents[default_vector_enum]) xDelete<IssmDouble>(doublearray);
+ 	xDelete<char>(string);
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16186-16187.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16186-16187.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16186-16187.diff	(revision 16556)
@@ -0,0 +1,72 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 16187)
+@@ -49,6 +49,7 @@
+ 
+ 	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16187)
+@@ -91,6 +91,7 @@
+ 
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 16187)
+@@ -48,6 +48,7 @@
+ 
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 16187)
+@@ -88,6 +88,7 @@
+ 
+ 	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 16187)
+@@ -96,6 +96,7 @@
+ 
+ 	md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 16186)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 16187)
+@@ -79,6 +79,7 @@
+ 
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
Index: issm/oecreview/Archive/16133-16554/ISSM-16187-16188.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16187-16188.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16187-16188.diff	(revision 16556)
@@ -0,0 +1,1753 @@
+Index: ../trunk-jpl/test/NightlyRun/test271.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test271.m	(revision 16187)
++++ ../trunk-jpl/test/NightlyRun/test271.m	(revision 16188)
+@@ -3,6 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.damage.D=0.5*ones(md.mesh.numberofvertices,1);
+ md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
++md.damage.law='pralong';
+ 
+ %boundary conditions for damage, to be put in SquareShelf.par
+ boundary=zeros(md.mesh.numberofvertices,1);
+@@ -10,7 +11,7 @@
+ pos=find(~md.mask.ice_levelset==0 & boundary==1);
+ md.damage.spcdamage(pos)=0;
+ 
+-md.verbose=verbose('11111111');
++md.verbose=verbose('solution',true);
+ 
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16188)
+@@ -1,5 +1,5 @@
+-/*!\file: damage_core.cpp
+- * \brief: core of the damage solution 
++/* 
++ * \brief: damgage_core.cpp: core for the damage solution
+  */ 
+ 
+ #include "./analyses.h"
+@@ -11,64 +11,28 @@
+ 
+ void damage_core(FemModel* femmodel){
+ 
+-	/*parameters: */
+-	bool  save_results;
+-	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface;
+-	int   solution_type;
+-	int  *requested_outputs = NULL;
+-	int   numoutputs        = 0;
++	/*intermediary*/
++	bool   save_results;
++	bool   dakota_analysis  = false;
++	int    solution_type;
+ 
+-	/*activate configuration*/
+-	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
+-	  
+-	if(VerboseSolution())_printf_("	call damage core\n\n");
+-
+-	/*recover parameters: */
++	if(VerboseSolution()) _printf0_("   computing damage\n");
++	
++	//first recover parameters common to all solutions
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+-	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+ 
+-	if(issmbgradients){
+-	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
+-	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	if(dakota_analysis && solution_type!=TransientSolutionEnum){
++		femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
++		ResetConstraintsx(femmodel);
+ 	}
+-	if(ispdd){
+-		if(isdelta18o){
+-			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
+-			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-		} 
+-		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+-		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+ 
+-	if(isFS && isfreesurface){
+-		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
+-		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-	}
+-	else{
+-		if(VerboseSolution()) _printf0_("   call computational core\n");
+-		solutionsequence_linear(femmodel);
+-	}
++	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
++	solutionsequence_damage_nonlinear(femmodel);
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,ThicknessEnum);
+-		InputToResultx(femmodel,BedEnum);
+-		InputToResultx(femmodel,SurfaceEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++		InputToResultx(femmodel,DamageDEnum);
+ 	}
+-
+-	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
+ }
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16187)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16188)
+@@ -162,7 +162,12 @@
+ 	DamageHealingEnum,
+ 	DamageStressThresholdEnum,
+ 	DamageStabilizationEnum,
++	DamagePenaltyThresholdEnum,
++	DamagePenaltyLockEnum,
++	DamagePenaltyFactorEnum,
++	DamageMaxiterEnum,
+ 	DamageSpcdamageEnum,
++	DamageMaxDamageEnum,
+ 	MaterialsRhoIceEnum,
+ 	MaterialsRhoWaterEnum,
+ 	MaterialsRhoFreshwaterEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16188)
+@@ -170,7 +170,12 @@
+ 		case DamageHealingEnum : return "DamageHealing";
+ 		case DamageStressThresholdEnum : return "DamageStressThreshold";
+ 		case DamageStabilizationEnum : return "DamageStabilization";
++		case DamagePenaltyThresholdEnum : return "DamagePenaltyThreshold";
++		case DamagePenaltyLockEnum : return "DamagePenaltyLock";
++		case DamagePenaltyFactorEnum : return "DamagePenaltyFactor";
++		case DamageMaxiterEnum : return "DamageMaxiter";
+ 		case DamageSpcdamageEnum : return "DamageSpcdamage";
++		case DamageMaxDamageEnum : return "DamageMaxDamage";
+ 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
+ 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
+ 		case MaterialsRhoFreshwaterEnum : return "MaterialsRhoFreshwater";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16188)
+@@ -173,7 +173,12 @@
+ 	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
+ 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
+ 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
++	      else if (strcmp(name,"DamagePenaltyThreshold")==0) return DamagePenaltyThresholdEnum;
++	      else if (strcmp(name,"DamagePenaltyLock")==0) return DamagePenaltyLockEnum;
++	      else if (strcmp(name,"DamagePenaltyFactor")==0) return DamagePenaltyFactorEnum;
++	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
+ 	      else if (strcmp(name,"DamageSpcdamage")==0) return DamageSpcdamageEnum;
++	      else if (strcmp(name,"DamageMaxDamage")==0) return DamageMaxDamageEnum;
+ 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
+ 	      else if (strcmp(name,"MaterialsRhoWater")==0) return MaterialsRhoWaterEnum;
+ 	      else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
+@@ -254,15 +259,15 @@
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+-	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
++	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+@@ -377,15 +382,15 @@
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"IceFrontType")==0) return IceFrontTypeEnum;
+ 	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
+ 	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+@@ -500,15 +505,15 @@
+ 	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+ 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+-	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+ 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+ 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16188)
+@@ -30,8 +30,14 @@
+ 	}
+ 	#endif
+ 	#ifdef _HAVE_THERMAL_
+-	if(ThermalIsPresent(femmodel->loads,analysis_type)){
++	if(PengridIsPresent(femmodel->loads,ThermalAnalysisEnum)){
+ 		ThermalConstraintsReset(femmodel->loads,analysis_type);
+ 	}
+ 	#endif
++	#ifdef _HAVE_DAMAGE_
++	if(PengridIsPresent(femmodel->loads,DamageEvolutionAnalysisEnum)){
++		DamageConstraintsReset(femmodel->loads,analysis_type);
++	}
++	#endif
++
+ }
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 16188)
+@@ -9,6 +9,7 @@
+ 
+ /* local prototypes: */
+ void ThermalConstraintsReset(Loads* loads, int configuration_type);
++void DamageConstraintsReset(Loads* loads, int configuration_type);
+ void ResetConstraintsx(FemModel* femmodel);
+ 
+ #endif  /* _RESETCONSTRAINTSX_H */
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp	(revision 16188)
+@@ -0,0 +1,29 @@
++/*!\file:  DamageConstraintsState.cpp
++ * \brief  damage constraints reset
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./ResetConstraintsx.h"
++
++void  DamageConstraintsReset(Loads* loads, int configuration_type){
++
++	int i;
++
++	/*Enforce constraints: */
++	for(i=0;i<loads->Size();i++){
++		Object* object=(Object*)loads->GetObjectByOffset(i);
++		Load* load=(Load*)object;
++		if(load->InAnalysis(configuration_type)){
++			if(object->ObjectEnum()==PengridEnum){
++
++				Pengrid* pengrid=(Pengrid*)object;
++				pengrid->ResetConstraint();
++			}
++		}
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 16188)
+@@ -25,6 +25,8 @@
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+ 	iomodel->FetchDataToInput(elements,DamageDEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
+ 
+ 	bool dakota_analysis;
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16188)
+@@ -7,7 +7,26 @@
+ #include "../ModelProcessorx.h"
+ 
+ void	CreateLoadsDamage(Loads** ploads, IoModel* iomodel){
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*create penalties for nodes: no node can have a damage > 1*/
++	iomodel->FetchData(1,DamageSpcdamageEnum);
++	CreateSingleNodeToElementConnectivity(iomodel);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++
++		/*keep only this partition's nodes:*/
++		if((iomodel->my_vertices[i]==1)){
++			if (xIsNan<IssmDouble>(iomodel->Data(DamageSpcdamageEnum)[i])){ //No penalty applied on spc nodes!
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,DamageEvolutionAnalysisEnum));
++			}
++		}
++	}
++	iomodel->DeleteData(1,DamageSpcdamageEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
+ 	
+-	/*No loads*/
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16188)
+@@ -20,6 +20,12 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
+ 	
+ 	iomodel->Constant(&law,DamageLawEnum);
++		
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
+ 
+ 	/*Retrieve law dependent parameters: */
+ 	if (strcmp(law,"pralong")==0){
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 16188)
+@@ -1,35 +0,0 @@
+-/*!\file:  ThermalIsPresent.cpp
+- * \brief
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ConstraintsStateLocal.h"
+-
+-int ThermalIsPresent(Loads* loads,int configuration_type){
+-
+-	int i;
+-	int found=0;
+-	int mpi_found=0;
+-
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if (object->ObjectEnum()==PengridEnum){
+-				found=1;
+-				break;
+-			}
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	found=mpi_found;
+-
+-	return found;
+-}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16188)
+@@ -31,15 +31,28 @@
+ 
+ 	#ifdef _HAVE_RIFTS_
+ 	if(RiftIsPresent(femmodel->loads,analysis_type)){
++
+ 		RiftConstraintsState(&converged,&num_unstable_constraints,femmodel->loads,min_mechanical_constraints,analysis_type);
+ 	}
+ 	#endif
++
+ 	#ifdef _HAVE_THERMAL_
+-	if(ThermalIsPresent(femmodel->loads,analysis_type)){
++
++	if(PengridIsPresent(femmodel->loads,ThermalAnalysisEnum)){
++
+ 		ThermalConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
+ 	}
+ 	#endif
+ 
++	#ifdef _HAVE_DAMAGE_
++
++	if(PengridIsPresent(femmodel->loads,DamageEvolutionAnalysisEnum)){
++
++		DamageConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
++	}
++	#endif
++
++
+ 	/*Assign output pointers: */
+ 	*pconverged=converged;
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 16188)
+@@ -8,7 +8,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-int  ThermalIsPresent(Loads* loads,int analysis_type);
++int  PengridIsPresent(Loads* loads,int analysis_type);
+ int  RiftIsPresent(Loads* loads,int analysis_type);
+ void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel);
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp	(revision 16188)
+@@ -0,0 +1,35 @@
++/*!\file:  ThermalIsPresent.cpp
++ * \brief
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./ConstraintsStateLocal.h"
++
++int PengridIsPresent(Loads* loads,int configuration_type){
++
++	int i;
++	int found=0;
++	int mpi_found=0;
++
++	for(i=0;i<loads->Size();i++){
++		Object* object=(Object*)loads->GetObjectByOffset(i);
++		Load* load=(Load*)object;
++		if(load->InAnalysis(configuration_type)){
++			if (object->ObjectEnum()==PengridEnum){
++				found=1;
++				break;
++			}
++		}
++	}
++
++	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
++	found=mpi_found;
++
++	return found;
++}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp	(revision 16188)
+@@ -0,0 +1,52 @@
++/*!\file:  DamageConstraintsState.cpp
++ * \brief  melting rate constraints
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./ConstraintsStateLocal.h"
++
++void  DamageConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int configuration_type){
++
++	int i;
++
++	int unstable=0;
++	int num_unstable_constraints=0;
++	int converged=0;
++	int sum_num_unstable_constraints=0;
++
++	num_unstable_constraints=0;	
++
++
++	/*Enforce constraints: */
++	for(i=0;i<loads->Size();i++){
++		Object* object=(Object*)loads->GetObjectByOffset(i);
++		Load* load=(Load*)object;
++		if(load->InAnalysis(configuration_type)){
++			if(object->ObjectEnum()==PengridEnum){
++
++				Pengrid* pengrid=(Pengrid*)object;
++
++				pengrid->ConstraintActivate(&unstable);
++				num_unstable_constraints+=unstable;
++			}
++		}
++	}
++
++
++	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
++	num_unstable_constraints=sum_num_unstable_constraints;
++
++	/*Have we converged? : */
++	if (num_unstable_constraints==0) converged=1;
++	else converged=0;
++
++	/*Assign output pointers: */
++	*pconverged=converged;
++	*pnum_unstable_constraints=num_unstable_constraints;
++}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16187)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16188)
+@@ -5,11 +5,23 @@
+ #ifndef _CONSTRAINTSSTATELOCAL_H
+ #define _CONSTRAINTSSTATELOCAL_H
+ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
+ #include "../../classes/classes.h"
+ 
+ /*melting: */
+ void  ThermalConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int analysis_type);
+ 
++/*damage: */
++#ifdef _HAVE_DAMAGE_
++void  DamageConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int analysis_type);
++#endif
++
+ /*rifts module: */
+ void   RiftConstraintsState(int* pconverged, int* pnum_unstable_constraints,Loads* loads,int min_mechanical_constraints,int analysis_type);
+ void   RiftConstrain(int* pnum_unstable_constraints,Loads* loads,int analysis_type);
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequence_damage_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequence_damage_nonlinear.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequence_damage_nonlinear.cpp	(revision 16188)
+@@ -0,0 +1,80 @@
++/*
++ * \brief: solutionsequence_damage_nonlinear.cpp: core of the damage solution 
++ */ 
++
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++void solutionsequence_damage_nonlinear(FemModel* femmodel){
++
++	/*solution : */
++	Vector<IssmDouble>* Dg=NULL; 
++	Vector<IssmDouble>* Df=NULL; 
++	Vector<IssmDouble>* Df_old=NULL; 
++	Vector<IssmDouble>* ys=NULL; 
++
++	/*intermediary: */
++	Matrix<IssmDouble>* Kff=NULL;
++	Matrix<IssmDouble>* Kfs=NULL;
++	Vector<IssmDouble>* pf=NULL;
++	Vector<IssmDouble>* df=NULL;
++
++	bool converged;
++	int constraints_converged;
++	int num_unstable_constraints;
++	int count;
++	int damage_penalty_threshold;
++	int damage_maxiter;
++
++	/*parameters:*/
++	int  configuration_type;
++
++	/*Recover parameters: */
++	femmodel->parameters->FindParam(&damage_penalty_threshold,DamagePenaltyThresholdEnum);
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	femmodel->parameters->FindParam(&damage_maxiter,DamageMaxiterEnum);
++
++	count=1;
++	converged=false;
++
++	InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
++	InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
++	femmodel->UpdateConstraintsx();
++
++	for(;;){
++
++		delete Df_old; Df_old=Df;
++		SystemMatricesx(&Kff, &Kfs, &pf,&df, NULL,femmodel);
++		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
++		Reduceloadx(pf, Kfs, ys); delete Kfs;
++		Solverx(&Df, Kff, pf,Df_old, df, femmodel->parameters);
++		delete Kff;delete pf;delete Dg; delete df;
++		Mergesolutionfromftogx(&Dg, Df,ys,femmodel->nodes,femmodel->parameters); delete ys;
++		InputUpdateFromSolutionx(femmodel,Dg);
++
++		ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
++
++		if (!converged){
++			if(VerboseConvergence()) _printf0_("   #unstable constraints = " << num_unstable_constraints << "\n");
++			if (num_unstable_constraints <= damage_penalty_threshold)converged=true;
++			if (count>=damage_maxiter){
++				converged=true;
++				_printf0_("   maximum number of iterations (" << damage_maxiter << ") exceeded\n"); 
++			}
++		}
++		count++;
++
++		InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
++
++		if(converged)break;
++	}
++
++	InputUpdateFromSolutionx(femmodel,Dg);
++
++	/*Free ressources: */
++	delete Dg;
++	delete Df;
++	delete Df_old;
++}
+Index: ../trunk-jpl/src/c/solutionsequences/solutionsequences.h
+===================================================================
+--- ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 16187)
++++ ../trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 16188)
+@@ -12,6 +12,7 @@
+ #include "../shared/Numerics/types.h"
+ 
+ void solutionsequence_thermal_nonlinear(FemModel* femmodel);
++void solutionsequence_damage_nonlinear(FemModel* femmodel);
+ void solutionsequence_hydro_nonlinear(FemModel* femmodel);
+ void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads);
+ void solutionsequence_newton(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16187)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16188)
+@@ -258,6 +258,7 @@
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
+ 					./modules/ModelProcessorx/CreateNodes.cpp\
++					./modules/ConstraintsStatex/PengridIsPresent.cpp\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
+ 					./modules/NodesDofx/NodesDofx.h\
+@@ -408,7 +409,6 @@
+ 					   ./modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp\
+ 					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
+ 					   ./modules/ConstraintsStatex/ThermalConstraintsState.cpp\
+-					   ./modules/ConstraintsStatex/ThermalIsPresent.cpp\
+ 					   ./modules/ResetConstraintsx/ThermalConstraintsReset.cpp \
+ 					   ./analyses/thermal_core.cpp\
+ 					   ./analyses/enthalpy_core.cpp\
+@@ -550,8 +550,11 @@
+ 					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+ 					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+ 					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
++					./modules/ConstraintsStatex/DamageConstraintsState.cpp\
++					./modules/ResetConstraintsx/DamageConstraintsReset.cpp \
+ 					./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
+-					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
++					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
++					./solutionsequences/solutionsequence_damage_nonlinear.cpp
+ 
+ #}}}
+ #Groundingline sources  {{{
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16188)
+@@ -242,6 +242,11 @@
+ 			Ke=PenaltyCreateKMatrixHydrologyDCInefficient(kmax);
+ 			break;
+ 		#endif
++		#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			Ke=PenaltyCreateKMatrixDamageEvolution(kmax);
++			break;
++		#endif
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+ 	}
+@@ -277,6 +282,12 @@
+ 			pe=PenaltyCreatePVectorHydrologyDCInefficient(kmax);
+ 			break;
+ 		#endif
++		#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			pe=PenaltyCreatePVectorDamageEvolution(kmax);
++			break;
++		#endif
++
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+ 	}
+@@ -429,6 +440,13 @@
+ 		return;
+ 	}
+ 	#endif
++	#ifdef _HAVE_DAMAGE_
++	else if (analysis_type==DamageEvolutionAnalysisEnum){
++		ConstraintActivateDamageEvolution(punstable);
++		return;
++	}
++	#endif
++
+ 	else{
+ 		_error_("analysis: " << EnumToStringx(analysis_type) << " not supported yet");
+ 	}
+@@ -694,6 +712,105 @@
+ }
+ /*}}}*/
+ #endif
++#ifdef _HAVE_DAMAGE_
++/*FUNCTION Pengrid::ConstraintActivateDamageEvolution {{{*/
++void  Pengrid::ConstraintActivateDamageEvolution(int* punstable){
++
++	//   The penalty is stable if it doesn't change during to successive iterations.   
++	IssmDouble max_damage;
++	IssmDouble damage;
++	int        new_active;
++	int        unstable=0;
++	int        penalty_lock;
++
++	/*check that pengrid is not a clone (penalty to be added only once)*/
++	if (node->IsClone()){
++		unstable=0;
++		*punstable=unstable;
++		return;
++	}
++
++	//First recover damage  using the element: */
++	element->GetMaterialInputValue(&damage,node,DamageDbarEnum);
++
++	//Recover our data:
++	parameters->FindParam(&penalty_lock,DamagePenaltyLockEnum);
++	parameters->FindParam(&max_damage,DamageMaxDamageEnum);
++	
++	//Figure out if damage is over max_damage, in which case, this penalty needs to be activated.
++
++	if (damage>max_damage){
++		new_active=1;
++	}
++	else{
++		new_active=0;
++	}
++
++	//Figure out stability of this penalty
++	if (active==new_active){
++		unstable=0;
++	}
++	else{
++		unstable=1;
++		if(penalty_lock)zigzag_counter++;
++	}
++
++	/*If penalty keeps zigzagging more than penalty_lock times: */
++	if(penalty_lock){
++		if(zigzag_counter>penalty_lock){
++			unstable=0;
++			active=1;
++		}
++	}
++
++	//Set penalty flag
++	active=new_active;
++
++	//*Assign output pointers:*/
++	*punstable=unstable;
++}
++/*}}}*/
++/*FUNCTION Pengrid::PenaltyCreateKMatrixDamageEvolution {{{*/
++ElementMatrix* Pengrid::PenaltyCreateKMatrixDamageEvolution(IssmDouble kmax){
++
++	IssmDouble    penalty_factor;
++
++	/*Initialize Element matrix and return if necessary*/
++	if(!this->active) return NULL;
++	ElementMatrix* Ke=new ElementMatrix(&node,NUMVERTICES,this->parameters);
++
++	/*recover parameters: */
++	parameters->FindParam(&penalty_factor,DamagePenaltyFactorEnum);
++
++	Ke->values[0]=kmax*pow(10.,penalty_factor);
++
++	/*Clean up and return*/
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Pengrid::PenaltyCreatePVectorDamageEvolution {{{*/
++ElementVector* Pengrid::PenaltyCreatePVectorDamageEvolution(IssmDouble kmax){
++
++	IssmDouble penalty_factor;
++	IssmDouble max_damage;
++
++	/*Initialize Element matrix and return if necessary*/
++	if(!this->active) return NULL;
++	ElementVector* pe=new ElementVector(&node,1,this->parameters);
++
++	//Recover our data:
++	parameters->FindParam(&penalty_factor,DamagePenaltyFactorEnum);
++	parameters->FindParam(&max_damage,DamageMaxDamageEnum);
++
++	//right hand side penalizes to max_damage
++	pe->values[0]=kmax*pow(10.,penalty_factor)*max_damage;
++
++	/*Clean up and return*/
++	return pe;
++}
++/*}}}*/
++#endif
++
+ /*FUNCTION Pengrid::ResetConstraint {{{*/
+ void  Pengrid::ResetConstraint(void){
+ 	active=0;
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16188)
+@@ -90,6 +90,12 @@
+ 		ElementVector* PenaltyCreatePVectorMelting(IssmDouble kmax);
+ 		void           ConstraintActivateThermal(int* punstable);
+ 		#endif
++		#ifdef _HAVE_DAMAGE_
++		ElementMatrix* PenaltyCreateKMatrixDamageEvolution(IssmDouble kmax);
++		ElementVector* PenaltyCreatePVectorDamageEvolution(IssmDouble kmax);
++		void           ConstraintActivateDamageEvolution(int* punstable);
++		#endif
++
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		ElementMatrix* PenaltyCreateKMatrixHydrologyDCInefficient(IssmDouble kmax);
+ 		ElementVector* PenaltyCreatePVectorHydrologyDCInefficient(IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16188)
+@@ -53,6 +53,7 @@
+ 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype)=0;
+ 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue)=0;
+ 		virtual void   GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
++		virtual void   GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
+ 
+ 		virtual IssmDouble SurfaceArea(void)=0;
+ 		virtual void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16188)
+@@ -175,6 +175,7 @@
+ /*FUNCTION Tria::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs) {{{*/
+ void  Tria::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){
+ 
++
+ 	/*Skip if water element*/
+ 	if(NoIceInElement()) return;
+ 
+@@ -222,7 +223,12 @@
+ 		case StressbalanceSIAAnalysisEnum:
+ 			return CreateKMatrixStressbalanceSIA();
+ 			break;
+-		 #endif
++		#endif
++	 	#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			return CreateKMatrixDamageEvolution();
++			break;
++		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreateMassMatrix();
+ 			break;
+@@ -362,21 +368,26 @@
+ 
+ 	/*Just branch to the correct load generator, according to the type of analysis we are carrying out: */
+ 	switch(analysis_type){
+-#ifdef _HAVE_STRESSBALANCE_
++		#ifdef _HAVE_STRESSBALANCE_
+ 		case StressbalanceAnalysisEnum:
+ 			return CreatePVectorStressbalanceSSA();
+ 			break;
+ 		case StressbalanceSIAAnalysisEnum:
+ 			return CreatePVectorStressbalanceSIA();
+ 			break;
+-#endif
++		#endif
++	 	#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			return CreatePVectorDamageEvolution();
++			break;
++		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreatePVectorSlope();
+ 			break;
+ 		case MasstransportAnalysisEnum:
+ 			return CreatePVectorMasstransport();
+ 			break;
+-#ifdef _HAVE_HYDROLOGY_
++		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+ 			return CreatePVectorHydrologyShreve();
+ 			break;
+@@ -386,8 +397,8 @@
+ 		case HydrologyDCEfficientAnalysisEnum:
+ 			return CreatePVectorHydrologyDCEfficient();
+ 			break;
+-#endif
+-#ifdef _HAVE_BALANCED_
++		#endif
++		#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+ 			return CreatePVectorBalancethickness();
+ 			break;
+@@ -400,15 +411,15 @@
+ 		case SmoothedSurfaceSlopeYAnalysisEnum:
+ 			return CreatePVectorSmoothedSlopeY();
+ 			break;
+-#endif
+-#ifdef _HAVE_CONTROL_
++		#endif
++		#ifdef _HAVE_CONTROL_
+ 		case AdjointBalancethicknessAnalysisEnum:
+ 			return CreatePVectorAdjointBalancethickness();
+ 			break;
+ 		case AdjointHorizAnalysisEnum:
+ 			return CreatePVectorAdjointHoriz();
+ 			break;
+-#endif
++	 	#endif
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+ 	}
+@@ -1247,6 +1258,19 @@
+ 	delete gauss;
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
++void Tria::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){
++
++	Input* input=this->material->inputs->GetInput(enumtype);
++	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
++
++	GaussTria* gauss=new GaussTria();
++	gauss->GaussVertex(this->GetNodeIndex(node));
++
++	input->GetInputValue(pvalue,gauss);
++	delete gauss;
++}
++/*}}}*/
+ /*FUNCTION Tria::GetVertexPidList {{{*/
+ void  Tria::GetVertexPidList(int* doflist){
+ 
+@@ -1624,6 +1648,11 @@
+ 			InputUpdateFromSolutionOneDof(solution,EplHeadEnum);
+ 			break;
+ 		#endif
++	 	#ifdef _HAVE_DAMAGE_
++		case DamageEvolutionAnalysisEnum:
++			InputUpdateFromSolutionDamageEvolution(solution);
++			break;
++		#endif
+ 	 	#ifdef _HAVE_BALANCED_
+ 		case BalancethicknessAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,ThicknessEnum);
+@@ -6824,6 +6853,299 @@
+ /*}}}*/
+ #endif
+ 
++#ifdef _HAVE_DAMAGE_
++/*FUNCTION Tria::CreateKMatrixDamageEvolution {{{*/
++ElementMatrix* Tria::CreateKMatrixDamageEvolution(void){
++
++	switch(GetElementType()){
++		case P1Enum: case P2Enum:
++			return CreateKMatrixDamageEvolution_CG();
++		case P1DGEnum:
++			_error_("DG not implemented yet!");break;
++		default:
++			_error_("Element type " << EnumToStringx(GetElementType()) << " not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixDamageEvolution_CG {{{*/
++ElementMatrix* Tria::CreateKMatrixDamageEvolution_CG(void){
++
++	/*Intermediaries */
++	int        stabilization;
++	int        dim;
++	IssmDouble Jdet,D_scalar,dt,h;
++	IssmDouble vel,vx,vy,dvxdx,dvydy;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(2*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(2*numnodes);
++	IssmDouble     D[2][2];
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&stabilization,DamageStabilizationEnum);
++	Input* vxaverage_input=NULL;
++	Input* vyaverage_input=NULL;
++	if(dim==2){
++		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
++		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
++	}
++	else{
++		vxaverage_input=inputs->GetInput(VxAverageEnum); _assert_(vxaverage_input);
++		vyaverage_input=inputs->GetInput(VyAverageEnum); _assert_(vyaverage_input);
++	}
++	h=sqrt(2*this->GetArea());
++
++	/* Start  looping on the number of gaussian points: */
++	GaussTria *gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vxaverage_input->GetInputValue(&vx,gauss);
++		vyaverage_input->GetInputValue(&vy,gauss);
++		vxaverage_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
++		vyaverage_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
++
++		D_scalar=gauss->weight*Jdet;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D_scalar,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++		GetBMasstransport(B,&xyz_list[0][0],gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
++
++		dvxdx=dvx[0];
++		dvydy=dvy[1];
++		D_scalar=dt*gauss->weight*Jdet;
++
++		D[0][0]=D_scalar*dvxdx;
++		D[0][1]=0.;
++		D[1][0]=0.;
++		D[1][1]=D_scalar*dvydy;
++		TripleMultiply(B,2,numnodes,1,
++					&D[0][0],2,2,0,
++					B,2,numnodes,0,
++					&Ke->values[0],1);
++
++		D[0][0]=D_scalar*vx;
++		D[1][1]=D_scalar*vy;
++		TripleMultiply(B,2,numnodes,1,
++					&D[0][0],2,2,0,
++					Bprime,2,numnodes,0,
++					&Ke->values[0],1);
++
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=sqrt(vx*vx+vy*vy)+1.e-8;
++			D[0][0]=h/(2*vel)*vx*vx;
++			D[1][0]=h/(2*vel)*vy*vx;
++			D[0][1]=h/(2*vel)*vx*vy;
++			D[1][1]=h/(2*vel)*vy*vy;
++		}
++		else if(stabilization==1){
++			/*SSA*/
++			vxaverage_input->GetInputAverage(&vx);
++			vyaverage_input->GetInputAverage(&vy);
++			D[0][0]=h/2.0*fabs(vx);
++			D[0][1]=0.;
++			D[1][0]=0.;
++			D[1][1]=h/2.0*fabs(vy);
++		}
++		if(stabilization==1 || stabilization==2){
++			D[0][0]=D_scalar*D[0][0];
++			D[1][0]=D_scalar*D[1][0];
++			D[0][1]=D_scalar*D[0][1];
++			D[1][1]=D_scalar*D[1][1];
++			TripleMultiply(Bprime,2,numnodes,1,
++						&D[0][0],2,2,0,
++						Bprime,2,numnodes,0,
++						&Ke->values[0],1);
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorDamageEvolution{{{*/
++ElementVector* Tria::CreatePVectorDamageEvolution(void){
++
++	switch(GetElementType()){
++		case P1Enum: case P2Enum:
++			return CreatePVectorDamageEvolution_CG();
++		case P1DGEnum:
++			_error_("DG not implemented yet");
++		default:
++			_error_("Element type " << EnumToStringx(GetElementType()) << " not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorDamageEvolution_CG {{{*/
++ElementVector* Tria::CreatePVectorDamageEvolution_CG(void){
++
++	/*Intermediaries */
++	IssmDouble Jdet,dt;
++	IssmDouble f,damage;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	Input* damage_input  = NULL;
++	Input* f_input  = NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	damage_input  = this->material->inputs->GetInput(DamageDbarEnum);     _assert_(damage_input);
++	
++	/*retrieve damage evolution forcing function: */
++	f_input=this->DamageEvolutionF();
++
++	/*Initialize forcing function f to 0, do not forget!:*/
++	/* Start  looping on the number of gaussian points: */
++	GaussTria* gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		f_input->GetInputValue(&f,gauss);
++		damage_input->GetInputValue(&damage,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(damage+dt*f)*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::DamageEvolutionF{{{*/
++Input* Tria::DamageEvolutionF(void){
++
++	/*Intermediaries */
++	IssmDouble c1,c2,c3,healing,stress_threshold;
++	IssmDouble s_xx,s_xy,s_yy;
++	IssmDouble J2s;
++	IssmDouble Xis;
++	IssmDouble Psi;
++	IssmDouble PosPsi;
++	IssmDouble NegPsi;
++	Input* damage_input=NULL;
++	Input* z_input=NULL;
++	Input* sigma_xx_input  = NULL;
++	Input* sigma_xy_input  = NULL;
++	Input* sigma_yy_input  = NULL;
++	GaussTria* gauss=NULL;
++	IssmDouble damage,sigma_xx,sigma_xy,sigma_yy;
++	
++	/*output: */
++	IssmDouble f[NUMVERTICES];
++	Input* f_input=NULL;
++
++	/*retrieve parameters:*/
++	this->parameters->FindParam(&c1,DamageC1Enum);
++	this->parameters->FindParam(&c2,DamageC2Enum);
++	this->parameters->FindParam(&c3,DamageC3Enum);
++	this->parameters->FindParam(&healing,DamageHealingEnum);
++	this->parameters->FindParam(&stress_threshold,DamageStressThresholdEnum);
++
++	/*Compute stress tensor: */
++	this->ComputeStressTensor();
++
++	/*retrieve what we need: */
++	sigma_xx_input  = inputs->GetInput(StressTensorxxEnum);  _assert_(sigma_xx_input);
++	sigma_xy_input  = inputs->GetInput(StressTensorxyEnum);  _assert_(sigma_xy_input);
++	sigma_yy_input  = inputs->GetInput(StressTensoryyEnum);  _assert_(sigma_yy_input);
++	damage_input  = this->material->inputs->GetInput(DamageDbarEnum);        _assert_(damage_input);
++
++	/*Damage evolution z mapping: */
++	gauss=new GaussTria();
++	J2s=0;
++	for (int iv=0;iv<NUMVERTICES;iv++){
++		gauss->GaussVertex(iv);
++		
++		damage_input->GetInputValue(&damage,gauss);
++		sigma_xx_input->GetInputValue(&sigma_xx,gauss);
++		sigma_xy_input->GetInputValue(&sigma_xy,gauss);
++		sigma_yy_input->GetInputValue(&sigma_yy,gauss);
++
++		s_xx=sigma_xx/(1-damage);
++		s_xy=sigma_xy/(1-damage);
++		s_yy=sigma_yy/(1-damage);
++
++		J2s=1.0/sqrt(2.0)*sqrt(pow(s_xx,2)+pow(s_yy,2)+2*pow(s_xy,2));
++		
++		Xis=sqrt(3.0)*J2s;
++
++		Psi=Xis-stress_threshold;
++
++		PosPsi=max(Psi,0.0);
++		NegPsi=max(-Psi,0.0);
++
++		f[iv]= c1* ( pow(PosPsi,c2)   -  healing * pow(NegPsi,c2) )  *   pow((1 - damage),-c3);
++
++	}
++	f_input=new TriaInput(NoneEnum,&f[0],P1Enum);
++	
++	/*Clean up and return*/
++	delete gauss;
++	return f_input;
++}
++/*}}}*/
++/*FUNCTION Tria::InputUpdateFromSolutionDamageEvolution {{{*/
++void  Tria::InputUpdateFromSolutionDamageEvolution(IssmDouble* solution){
++
++	const int    numdof=NDOF1*NUMVERTICES;
++
++	int         i;
++	IssmDouble  values[numdof];
++	int        *doflist = NULL;
++
++	/*Get dof list: */
++	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
++
++	/*Use the dof list to index into the solution vector: */
++	for(i=0;i<numdof;i++){
++		values[i]=solution[doflist[i]];
++		/*Check solution*/
++		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
++	}
++
++	/*Get all inputs and parameters*/
++	this->material->inputs->AddInput(new TriaInput(DamageDbarEnum,values,P1Enum));
++
++	/*Free ressources:*/
++	xDelete<int>(doflist);
++}
++/*}}}*/
++#endif
++
+ #ifdef _HAVE_DAKOTA_
+ /*FUNCTION Tria::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16188)
+@@ -217,6 +217,7 @@
+ 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype);
+ 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+ 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
++		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void           GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussTria* gauss, Input* vx_input, Input* vy_input);
+ 		void	         InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type);
+ 		void	         InputUpdateFromSolutionMasstransport(IssmDouble* solution);
+@@ -275,9 +276,17 @@
+ 		bool    AllActive(void);
+ 		bool    AnyActive(void);
+ 		#endif
+-		#ifdef _HAVE_BALANCED_
++
++		#ifdef _HAVE_DAMAGE_
++		ElementMatrix* CreateKMatrixDamageEvolution(void);
++		ElementMatrix* CreateKMatrixDamageEvolution_CG(void);
++		ElementVector* CreatePVectorDamageEvolution(void);
++		ElementVector* CreatePVectorDamageEvolution_CG(void);
++		Input* DamageEvolutionF(void);
++		void	       InputUpdateFromSolutionDamageEvolution(IssmDouble* solution);
+ 		#endif
+ 
++
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16188)
+@@ -1430,6 +1430,19 @@
+ 	delete gauss;
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
++void Penta::GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){
++
++	Input* input=this->material->inputs->GetInput(enumtype);
++	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
++
++	GaussPenta* gauss=new GaussPenta();
++	gauss->GaussVertex(this->GetNodeIndex(node));
++
++	input->GetInputValue(pvalue,gauss);
++	delete gauss;
++}
++/*}}}*/
+ /*FUNCTION Penta::GetPhi {{{*/
+ void Penta::GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity){
+ 	/*Compute deformational heating from epsilon and viscosity */
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16188)
+@@ -199,6 +199,7 @@
+ 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype);
+ 		void           GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+ 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
++		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void	         GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
+ 		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+ 		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16188)
+@@ -65,6 +65,7 @@
+ 		void ChangeEnum(int newenumtype);
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum);
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16188)
+@@ -55,6 +55,7 @@
+ 		virtual IssmDouble MinAbs(void)=0;
+ 		virtual IssmDouble Max(void)=0;
+ 		virtual IssmDouble Min(void)=0;
++		virtual void Set(IssmDouble setvalue)=0;
+ 		virtual void   Scale(IssmDouble scale_factor)=0;
+ 		virtual void   ArtificialNoise(IssmDouble min,IssmDouble max)=0;
+ 		virtual void   AXPY(Input* xinput,IssmDouble scalar)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16188)
+@@ -71,6 +71,7 @@
+ 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16188)
+@@ -65,6 +65,7 @@
+ 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16188)
+@@ -320,6 +320,13 @@
+ 	for(int i=0;i<numnodes;i++)values[i]=values[i]*scale_factor;
+ }
+ /*}}}*/
++/*FUNCTION TriaInput::Set{{{*/
++void TriaInput::Set(IssmDouble setvalue){
++
++	const int numnodes=this->NumberofNodes();
++	for(int i=0;i<numnodes;i++)values[i]=setvalue;
++}
++/*}}}*/
+ /*FUNCTION TriaInput::ArtificialNoise{{{*/
+ void TriaInput::ArtificialNoise(IssmDouble min,IssmDouble max){
+ 
+@@ -434,6 +441,39 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION TriaInput::PointwiseDivide{{{*/
++Input* TriaInput::PointwiseDivide(Input* inputB){
++
++	/*Ouput*/
++	TriaInput* outinput=NULL;
++
++	/*Intermediaries*/
++	TriaInput *xinputB  = NULL;
++	const int   numnodes = this->NumberofNodes();
++
++	/*Check that inputB is of the same type*/
++	if(inputB->ObjectEnum()!=TriaInputEnum)     _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
++	xinputB=(TriaInput*)inputB;
++	if(xinputB->element_type!=this->element_type) _error_("Operation not permitted because inputB is of type " << EnumToStringx(xinputB->element_type));
++
++	/*Allocate intermediary*/
++	IssmDouble* AdotBvalues=xNew<IssmDouble>(numnodes);
++
++	/*Create point wise division*/
++	for(int i=0;i<numnodes;i++){
++		_assert_(xinputB->values[i]!=0);
++		AdotBvalues[i]=this->values[i]/xinputB->values[i];
++	}
++
++	/*Create new Tria vertex input (copy of current input)*/
++	outinput=new TriaInput(this->enum_type,AdotBvalues,this->element_type);
++
++	/*Return output pointer*/
++	xDelete<IssmDouble>(AdotBvalues);
++	return outinput;
++
++}
++/*}}}*/
+ /*FUNCTION TriaInput::Configure{{{*/
+ void TriaInput::Configure(Parameters* parameters){
+ 	/*do nothing: */
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16188)
+@@ -67,6 +67,7 @@
+ 		void ChangeEnum(int newenumtype);
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16188)
+@@ -71,6 +71,7 @@
+ 		IssmDouble MaxAbs(void){_error_("Max not implemented for booleans");};
+ 		IssmDouble Min(void){_error_("Min not implemented for booleans");};
+ 		IssmDouble MinAbs(void){_error_("Min not implemented for booleans");};
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16188)
+@@ -34,7 +34,7 @@
+ 		/*TriaInput management:*/
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
+-		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
++		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
+@@ -67,6 +67,7 @@
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum);
++		void Set(IssmDouble setvalue);
+ 		void Scale(IssmDouble scale_factor);
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max);
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16188)
+@@ -67,6 +67,7 @@
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum);
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16187)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16188)
+@@ -70,6 +70,7 @@
+ 
+ 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
++		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+ 		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xforcing,IssmDouble scalar){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16187)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16188)
+@@ -66,6 +66,7 @@
+ 			fielddisplay(obj,'maxiter','maximum number of non linear iterations');
+ 			fielddisplay(obj,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
+ 			fielddisplay(obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');
++			fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)');
+ 			fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+             		fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
+ 
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16187)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16188)
+@@ -10,7 +10,14 @@
+ 		D                   = NaN;
+ 		law                 = '';
+ 		spcdamage           = NaN; 
++		max_damage          = NaN;
++	
++		%numerical
+ 		stabilization       = NaN;
++		penalty_threshold   = NaN;
++		maxiter             = NaN;
++		penalty_lock        = NaN;
++		penalty_factor      = NaN;
+ 		
+ 		%parameters for law 'initial': 
+ 		stress_threshold    = NaN;
+@@ -45,10 +52,24 @@
+ 			%damage parameters: 
+ 			obj.D=0;
+ 			obj.law='undamaged';
++			
++			obj.max_damage=1-1e-5; %if damage reaches 1, solve becomes singular, as viscosity becomes nil
+ 		
+ 			%Type of stabilization used
+ 			obj.stabilization=2;
+-	
++			
++			%Maximum number of iterations
++			obj.maxiter=100;
++
++			%factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor
++			obj.penalty_factor=3;
++			
++			%stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)
++			obj.penalty_lock=0;
++			
++			%threshold to declare convergence of thermal solution (default is 0)
++			obj.penalty_threshold=0;
++		
+ 			%damage parameters for 'initial' law of damage propagation
+ 			obj.stress_threshold=0;
+ 			obj.healing=0;
+@@ -60,10 +81,17 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			
+-			md = checkfield(md,'damage.D','>=0',0,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'damage.D','>=',0,'<=',obj.max_damage,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'damage.max_damage','<',1,'>=',0);
+ 			md = checkfield(md,'damage.law','values',{'undamaged','pralong'});
+ 			md = checkfield(md,'damage.spcdamage','forcing',1);
++			
+ 			md = checkfield(md,'damage.stabilization','numel',[1],'values',[0 1 2]);
++			md = checkfield(md,'damage.maxiter','>=0',0);
++			md = checkfield(md,'damage.penalty_factor','>=0',0);
++			md = checkfield(md,'damage.penalty_lock','>=0',0);
++			md = checkfield(md,'damage.penalty_threshold','>=0',0);
++
+ 			if strcmpi(obj.law,'pralong'),
+ 				md = checkfield(md,'damage.healing','>=',0);
+ 				md = checkfield(md,'damage.c1','>=',0);
+@@ -71,6 +99,12 @@
+ 				md = checkfield(md,'damage.c3','>=',0);
+ 				md = checkfield(md,'damage.c4','>=',0);
+ 				md = checkfield(md,'damage.stress_threshold','>=',0);
++			elseif strcmpi(obj.law,'undamaged'),
++				if (solution==DamageEvolutionSolutionEnum),
++					error('you are trying to evolve an undamaged material. Choose a valid evolution law (md.damage.law)');
++				end
++			else 
++				error('invalid damage evolution law');
+ 			end
+ 
+ 		end % }}}
+@@ -80,7 +114,14 @@
+ 			fielddisplay(obj,'D','damage tensor (scalar)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
+ 			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'max_damage','maximum damage sustained by ice (0<=max_damage<1)');
++			
+ 			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
++			fielddisplay(obj,'maxiter','maximum number of non linear iterations');
++			fielddisplay(obj,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
++			fielddisplay(obj,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)');
++			fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)');
++
+ 			if strcmpi(obj.law,'pralong'),
+ 				fielddisplay(obj,'c1','damage parameter 1');
+ 				fielddisplay(obj,'c2','damage parameter 2');
+@@ -95,8 +136,15 @@
+ 		
+ 			WriteData(fid,'object',obj,'fieldname','D','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','law','format','String');
++			WriteData(fid,'object',obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','max_damage','format','Double');
++
+ 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++			WriteData(fid,'object',obj,'fieldname','penalty_threshold','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
++	
+ 			if strcmpi(obj.law,'pralong'),
+ 				WriteData(fid,'object',obj,'fieldname','c1','format','Double');
+ 				WriteData(fid,'object',obj,'fieldname','c2','format','Double');
+Index: ../trunk-jpl/src/m/enum/DamageMaxiterEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageMaxiterEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageMaxiterEnum.m	(revision 16188)
+@@ -0,0 +1,11 @@
++function macro=DamageMaxiterEnum()
++%DAMAGEMAXITERENUM - Enum of DamageMaxiter
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageMaxiterEnum()
++
++macro=StringToEnum('DamageMaxiter');
+Index: ../trunk-jpl/src/m/enum/DamagePenaltyThresholdEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamagePenaltyThresholdEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamagePenaltyThresholdEnum.m	(revision 16188)
+@@ -0,0 +1,11 @@
++function macro=DamagePenaltyThresholdEnum()
++%DAMAGEPENALTYTHRESHOLDENUM - Enum of DamagePenaltyThreshold
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamagePenaltyThresholdEnum()
++
++macro=StringToEnum('DamagePenaltyThreshold');
+Index: ../trunk-jpl/src/m/enum/DamagePenaltyFactorEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamagePenaltyFactorEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamagePenaltyFactorEnum.m	(revision 16188)
+@@ -0,0 +1,11 @@
++function macro=DamagePenaltyFactorEnum()
++%DAMAGEPENALTYFACTORENUM - Enum of DamagePenaltyFactor
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamagePenaltyFactorEnum()
++
++macro=StringToEnum('DamagePenaltyFactor');
+Index: ../trunk-jpl/src/m/enum/DamagePenaltyLockEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamagePenaltyLockEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamagePenaltyLockEnum.m	(revision 16188)
+@@ -0,0 +1,11 @@
++function macro=DamagePenaltyLockEnum()
++%DAMAGEPENALTYLOCKENUM - Enum of DamagePenaltyLock
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamagePenaltyLockEnum()
++
++macro=StringToEnum('DamagePenaltyLock');
+Index: ../trunk-jpl/src/m/enum/DamageMaxDamageEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DamageMaxDamageEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DamageMaxDamageEnum.m	(revision 16188)
+@@ -0,0 +1,11 @@
++function macro=DamageMaxDamageEnum()
++%DAMAGEMAXDAMAGEENUM - Enum of DamageMaxDamage
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=DamageMaxDamageEnum()
++
++macro=StringToEnum('DamageMaxDamage');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16187)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16188)
+@@ -162,7 +162,12 @@
+ def DamageHealingEnum(): return StringToEnum("DamageHealing")[0]
+ def DamageStressThresholdEnum(): return StringToEnum("DamageStressThreshold")[0]
+ def DamageStabilizationEnum(): return StringToEnum("DamageStabilization")[0]
++def DamagePenaltyThresholdEnum(): return StringToEnum("DamagePenaltyThreshold")[0]
++def DamagePenaltyLockEnum(): return StringToEnum("DamagePenaltyLock")[0]
++def DamagePenaltyFactorEnum(): return StringToEnum("DamagePenaltyFactor")[0]
++def DamageMaxiterEnum(): return StringToEnum("DamageMaxiter")[0]
+ def DamageSpcdamageEnum(): return StringToEnum("DamageSpcdamage")[0]
++def DamageMaxDamageEnum(): return StringToEnum("DamageMaxDamage")[0]
+ def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
+ def MaterialsRhoWaterEnum(): return StringToEnum("MaterialsRhoWater")[0]
+ def MaterialsRhoFreshwaterEnum(): return StringToEnum("MaterialsRhoFreshwater")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16188-16189.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16188-16189.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16188-16189.diff	(revision 16556)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/test/NightlyRun/test271.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test271.m	(revision 16188)
++++ ../trunk-jpl/test/NightlyRun/test271.m	(revision 16189)
+@@ -17,14 +17,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DamageEvolutionSolutionEnum());
+ 
+-return;
+-
+ %Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13};
+-field_values={...
+-	(md.results.StressbalanceSolution.Vx),...
+-	(md.results.StressbalanceSolution.Vy),...
+-	(md.results.StressbalanceSolution.Vel),...
+-	(md.results.StressbalanceSolution.Pressure),...
+-	};
++field_names     ={'D'};
++field_tolerances={1e-13};
++field_values={md.results.DamageEvolutionSolution.DamageD};
+Index: ../trunk-jpl/test/Archives/Archive271.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive271.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive271.nc	(revision 16188)
++++ ../trunk-jpl/test/Archives/Archive271.nc	(revision 16189)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive271.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16189-16190.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16189-16190.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16189-16190.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 16189)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 16190)
+@@ -703,6 +703,7 @@
+ 			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+ 			md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
+ 			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
++			md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node');
+ 			md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
+ 			md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
+ 
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16189)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16190)
+@@ -113,7 +113,7 @@
+ 
+ 			fielddisplay(obj,'D','damage tensor (scalar)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
+-			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint) [m]');
++			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)');
+ 			fielddisplay(obj,'max_damage','maximum damage sustained by ice (0<=max_damage<1)');
+ 			
+ 			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
Index: issm/oecreview/Archive/16133-16554/ISSM-16190-16191.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16190-16191.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16190-16191.diff	(revision 16556)
@@ -0,0 +1,159 @@
+Index: ../trunk-jpl/src/m/solvers/issmsolver.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 16190)
++++ ../trunk-jpl/src/m/solvers/issmsolver.py	(revision 16191)
+@@ -1,28 +0,0 @@
+-from pairoptions import *
+-def asmoptions(*args):
+-	#ISSMSOLVE - return issm solver options
+-	#
+-	#   Usage:
+-	#      options=issmsolver;
+-	
+-	#retrieve options provided in varargin
+-	arguments=pairoptions(*args) 
+-	
+-	options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi'],['solver_type','mumps']];
+-
+-	#now, go through our arguments, and write over default options.
+-	for i in range(len(arguments.list)):
+-		arg1=arguments.list[i][0]
+-		arg2=arguments.list[i][1]
+-		found=0;
+-		for j in range(len(options)):
+-			joption=options[j][0]
+-			if joption==arg1:
+-				joption[1]=arg2;
+-				options[j]=joption;
+-				found=1;
+-				break
+-		if not found:
+-			#this option did not exist, add it: 
+-			options.append([arg1,arg2])
+-	return options
+Index: ../trunk-jpl/src/m/solvers/issmsolver.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmsolver.m	(revision 16190)
++++ ../trunk-jpl/src/m/solvers/issmsolver.m	(revision 16191)
+@@ -1,15 +0,0 @@
+-function issmoptions=issmsolver(varargin)
+-%ISSMSOLVER - 
+-%
+-%   Usage:
+-%      options=issmsolver;
+-
+-%retrieve options provided in varargin
+-options=pairoptions(varargin{:});
+-issmoptions=struct();
+-
+-%default issmoptions options
+-issmoptions.toolkit='issm';
+-issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense');
+-issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi');
+-issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps');
+Index: ../trunk-jpl/src/m/solvers/issmmumpssolver.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmmumpssolver.py	(revision 0)
++++ ../trunk-jpl/src/m/solvers/issmmumpssolver.py	(revision 16191)
+@@ -0,0 +1,28 @@
++from pairoptions import *
++def issmmumpssolver(*args):
++	#ISSMSOLVE - return issm solver options
++	#
++	#   Usage:
++	#      options=issmsolver;
++	
++	#retrieve options provided in varargin
++	arguments=pairoptions(*args) 
++	
++	options=[['toolkit','issm'],['mat_type','mpidense'],['vec_type','mpi'],['solver_type','mumps']];
++
++	#now, go through our arguments, and write over default options.
++	for i in range(len(arguments.list)):
++		arg1=arguments.list[i][0]
++		arg2=arguments.list[i][1]
++		found=0;
++		for j in range(len(options)):
++			joption=options[j][0]
++			if joption==arg1:
++				joption[1]=arg2;
++				options[j]=joption;
++				found=1;
++				break
++		if not found:
++			#this option did not exist, add it: 
++			options.append([arg1,arg2])
++	return options
+Index: ../trunk-jpl/src/m/solvers/issmmumpssolver.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmmumpssolver.m	(revision 0)
++++ ../trunk-jpl/src/m/solvers/issmmumpssolver.m	(revision 16191)
+@@ -0,0 +1,15 @@
++function issmoptions=issmmumpssolver(varargin)
++%ISSMSOLVER - 
++%
++%   Usage:
++%      options=issmsolver;
++
++%retrieve options provided in varargin
++options=pairoptions(varargin{:});
++issmoptions=struct();
++
++%default issmoptions options
++issmoptions.toolkit='issm';
++issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense');
++issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi');
++issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps');
+Index: ../trunk-jpl/src/m/solvers/issmgslsolver.py
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmgslsolver.py	(revision 0)
++++ ../trunk-jpl/src/m/solvers/issmgslsolver.py	(revision 16191)
+@@ -0,0 +1,28 @@
++from pairoptions import *
++def issmgslsolver(*args):
++	#ISSMSOLVE - return issm solver options
++	#
++	#   Usage:
++	#      options=issmsolver;
++	
++	#retrieve options provided in varargin
++	arguments=pairoptions(*args) 
++	
++	options=[['toolkit','issm'],['mat_type','dense'],['vec_type','seq'],['solver_type','gsl']];
++
++	#now, go through our arguments, and write over default options.
++	for i in range(len(arguments.list)):
++		arg1=arguments.list[i][0]
++		arg2=arguments.list[i][1]
++		found=0;
++		for j in range(len(options)):
++			joption=options[j][0]
++			if joption==arg1:
++				joption[1]=arg2;
++				options[j]=joption;
++				found=1;
++				break
++		if not found:
++			#this option did not exist, add it: 
++			options.append([arg1,arg2])
++	return options
+Index: ../trunk-jpl/src/m/solvers/issmgslsolver.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmgslsolver.m	(revision 0)
++++ ../trunk-jpl/src/m/solvers/issmgslsolver.m	(revision 16191)
+@@ -0,0 +1,15 @@
++function issmoptions=issmgslsolver(varargin)
++%ISSMSOLVER - 
++%
++%   Usage:
++%      options=issmsolver;
++
++%retrieve options provided in varargin
++options=pairoptions(varargin{:});
++issmoptions=struct();
++
++%default issmoptions options
++issmoptions.toolkit='issm';
++issmoptions.mat_type=getfieldvalue(options,'mat_type','dense');
++issmoptions.vec_type=getfieldvalue(options,'vec_type','seq');
++issmoptions.solver_type=getfieldvalue(options,'solver_type','gsl');
Index: issm/oecreview/Archive/16133-16554/ISSM-16191-16192.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16191-16192.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16191-16192.diff	(revision 16556)
@@ -0,0 +1,383 @@
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16192)
+@@ -3,11 +3,10 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.toolkits.DefaultAnalysis=issmsolver();
+ md.stressbalance.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
+-md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmgslsolver();
++
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 16192)
+@@ -10,7 +10,7 @@
+ md.transient.isgroundingline=0;
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 16192)
+@@ -7,7 +7,7 @@
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 16192)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,MasstransportSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 16192)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3019.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3019.py	(revision 16192)
+@@ -16,6 +16,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ 
+ md.autodiff.isautodiff=True
+ md.verbose.autodiff=True
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16192)
+@@ -4,7 +4,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16192)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.stressbalance.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 16192)
+@@ -16,7 +16,7 @@
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.masstransport.stabilization=3
+ md.masstransport.spcthickness=md.geometry.thickness
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,MasstransportSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16192)
+@@ -13,7 +13,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.stressbalance.requested_outputs=StressTensorEnum()
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 16192)
+@@ -23,6 +23,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.masstransport.requested_outputs=IceVolumeEnum()
+ md.verbose=verbose('autodiff',True)
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ 
+ #setup autodiff parameters
+ index=1 #this is the scalar component we are checking against
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 16192)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'FS','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 16192)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.transient.requested_outputs=IceVolumeEnum()
+ 
+ md.autodiff.isautodiff=True
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 16192)
+@@ -13,7 +13,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,MasstransportSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 16192)
+@@ -4,7 +4,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+ md=solve(md,MasstransportSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 16192)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.autodiff.isautodiff=True
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 16192)
+@@ -7,7 +7,7 @@
+ md.masstransport.stabilization=3;
+ md.masstransport.spcthickness=md.geometry.thickness;
+ md.autodiff.isautodiff=true;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+ md=solve(md,MasstransportSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 16192)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,ThermalSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 16192)
+@@ -9,7 +9,7 @@
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.masstransport.requested_outputs=IceVolumeEnum();
+ md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+ %setup autodiff parameters
+ index=1; %this is the scalar component we are checking against
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16192)
+@@ -14,7 +14,7 @@
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.stressbalance.requested_outputs=StressTensorEnum()
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 16192)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md=solve(md,MasstransportSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 16192)
+@@ -17,7 +17,7 @@
+ md.transient.ismasstransport=False
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 16192)
+@@ -7,7 +7,7 @@
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 16191)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 16192)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'FS','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16191)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16192)
+@@ -541,7 +541,7 @@
+ 			}
+ 		}
+ 		delete dependent_objects;
+-		xDelete<IssmPDouble>(dependents);
++		if(num_dependents)xDelete<IssmPDouble>(dependents);
+ 		#else
+ 		_error_("Should not be requesting dependents when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16191)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16192)
+@@ -54,6 +54,13 @@
+ 		value = 0.;
+ 		#endif
+ 	}
++	else if(strcmp(name,"_HAVE_GSL_")==0){
++		#ifdef _HAVE_GSL_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
+ 	else if(strcmp(name,"_HAVE_PETSC_")==0){
+ 		#ifdef _HAVE_PETSC_
+ 		value = 1.;
+Index: ../trunk-jpl/src/m/classes/toolkits.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.m	(revision 16191)
++++ ../trunk-jpl/src/m/classes/toolkits.m	(revision 16192)
+@@ -47,7 +47,13 @@
+ 					 obj.DefaultAnalysis           = iluasmoptions(); 
+ 				 end
+ 			 else
+-				 obj.DefaultAnalysis           = issmsolver(); 
++				 if IssmConfig('_HAVE_MUMPS_'),
++					 obj.DefaultAnalysis           = issmmumpssolver(); 
++				 elseif IssmConfig('_HAVE_GSL_'),
++					 obj.DefaultAnalysis           = issmgslsolver(); 
++				 else 
++					 error('Need at least Mumps or Gsl to define an issm solver type');
++				 end
+ 			 end
+ 
+ 		 end % }}}
+Index: ../trunk-jpl/src/m/classes/toolkits.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/toolkits.py	(revision 16191)
++++ ../trunk-jpl/src/m/classes/toolkits.py	(revision 16192)
+@@ -24,7 +24,12 @@
+ 			else:
+ 				self.DefaultAnalysis           = iluasmoptions()
+ 		else:
+-			self.DefaultAnalysis           = issmsolver()
++			if IssmConfig('_HAVE_MUMPS_')[0]:
++				self.DefaultAnalysis           = issmmumpssolver()
++			elif IssmConfig('_HAVE_GSL_')[0]:
++				self.DefaultAnalysis           = issmgslsolver()
++			else:
++				raise IOError("ToolkitsFile error: need at least Mumps or Gsl to define issm solver type")
+ 
+ 		#The other properties are dynamic
+ 	# }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16192-16193.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16192-16193.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16192-16193.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 16192)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 16193)
+@@ -10,7 +10,7 @@
+ md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
+ md.verbose=verbose('autodiff',true);
+ md.stressbalance.restol=1e-4;
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+ %setup autodiff parameters
+ index=1; %this is the scalar component we are checking against
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 16192)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 16193)
+@@ -24,7 +24,7 @@
+ md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
+ md.verbose=verbose('autodiff',True)
+ md.stressbalance.restol=0.000001
+-md.toolkits.DefaultAnalysis=issmsolver()
++md.toolkits.DefaultAnalysis=issmgslsolver()
+ 
+ #setup autodiff parameters
+ index=1 #this is the scalar component we are checking against
Index: issm/oecreview/Archive/16133-16554/ISSM-16193-16194.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16193-16194.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16193-16194.diff	(revision 16556)
@@ -0,0 +1,1190 @@
+Index: ../trunk-jpl/test/NightlyRun/test3115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3115.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3115.m	(revision 16194)
+@@ -0,0 +1,78 @@
++%This test runs test3005 with autodiff on, and checks that 
++%the value of the scalar forward difference match a step-wise differential
++
++%First configure
++md=triangle(model(),'../Exp/Square.exp',50000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.masstransport.requested_outputs=IceVolumeEnum();
++md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++
++%setup autodiff parameters
++index=1; %this is the scalar component we are checking against
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	};
++
++md.autodiff.dependents={...
++	dependent('name','IceVolume','type','scalar')...
++	};
++md.autodiff.driver='fos_forward';
++
++%parameters for the step-wise derivative
++delta=0.001;
++h1=md.geometry.thickness(index);
++h0=h1*(1.-delta);
++h2=h1*(1.+delta);
++deltaH=(h2-h0);
++
++%save model:
++md2=md;
++
++%evaluate derivative by forward and backward stepping 
++%forward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h0;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,MasstransportSolutionEnum());
++V0=md.results.MasstransportSolution.IceVolume;
++
++%backward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h2;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,MasstransportSolutionEnum());
++V2=md.results.MasstransportSolution.IceVolume;
++
++%compute resulting derivative
++dVdh_an=(V2-V0)/deltaH;
++
++%evaluate derivative using ADOLC 
++md=md2;
++md.autodiff.isautodiff=true;
++md.geometry.thickness(index)=h1;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,MasstransportSolutionEnum());
++%retrieve directly
++dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian;
++
++disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
++
++%Fields and tolerances to track changes
++field_names     ={'dV/dh-dV/dh0'};
++field_tolerances={1e-13};
++field_values={dVdh_ad-dVdh_an};
+Index: ../trunk-jpl/test/NightlyRun/test3120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3120.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3120.py	(revision 16194)
+@@ -0,0 +1,99 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from SetIceShelfBC import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#This test runs test3020 with autodiff on, and checks that 
++#the value of the scalar forward difference match a step-wise differential
++
++#First configure
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
++md.verbose=verbose('autodiff',True)
++md.stressbalance.restol=0.000001
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++
++#setup autodiff parameters
++index=1 #this is the scalar component we are checking against
++md.autodiff.independents=[\
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	]
++
++md.autodiff.dependents=[\
++	dependent('name','IceVolume','type','scalar'),\
++	dependent('name','MaxVel','type','scalar')\
++	]
++md.autodiff.driver='fos_forward'
++
++#parameters for the step-wise derivative
++delta=0.00001
++h1=md.geometry.thickness[index]
++h0=h1*(1.-delta)
++h2=h1*(1.+delta)
++deltaH=(h2-h0)
++
++#save model:
++md2=copy.deepcopy(md)
++
++#evaluate derivative by forward and backward stepping 
++#forward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h0
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++V0=md.results.TransientSolution[2].IceVolume
++MaxV0=md.results.TransientSolution[2].MaxVel
++
++#backward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h2
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++V2=md.results.TransientSolution[2].IceVolume
++MaxV2=md.results.TransientSolution[2].MaxVel
++
++#compute resulting derivative
++dVdh_an=(V2-V0)/deltaH
++dMaxVdh_an=(MaxV2-MaxV0)/deltaH
++
++#evaluate derivative using ADOLC 
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=True
++md.geometry.thickness[index]=h1
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++#retrieve directly
++dVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[0]
++dMaxVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[1]
++
++print "dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dVdh_an,dVdh_ad)
++print "dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dMaxVdh_an,dMaxVdh_ad)
++
++#Fields and tolerances to track changes
++field_names     =['dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0']
++field_tolerances=[1e-13,1e-13]
++field_values=[dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad]
+Index: ../trunk-jpl/test/NightlyRun/test3108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3108.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3108.py	(revision 16194)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1.)
++md=setflowequation(md,'SSA','all')
++md.timestepping.time_step=0
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,ThermalSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3107.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3107.m	(revision 16194)
+@@ -0,0 +1,17 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md=extrude(md,5,3.);
++md.cluster=generic('name',oshostname(),'np',3);
++md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md=solve(md,MasstransportSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Thickness'};
++field_tolerances={1e-13};
++field_values={...
++	(md.results.MasstransportSolution.Thickness),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3103.py	(revision 16194)
+@@ -0,0 +1,38 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2.)
++md=setflowequation(md,'HO','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.stressbalance.requested_outputs=StressTensorEnum()
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,StressbalanceSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorzz,\
++	md.results.StressbalanceSolution.StressTensorxy,\
++	md.results.StressbalanceSolution.StressTensorxz,\
++	md.results.StressbalanceSolution.StressTensoryz,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 16193)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 16194)
+@@ -120,7 +120,7 @@
+ elseif strcmpi(benchmark,'gia'),
+ 	test_ids=intersect(test_ids,[2001:2100]);
+ elseif strcmpi(benchmark,'adolc'),
+-	test_ids=intersect(test_ids,[3001:3020]);
++	test_ids=intersect(test_ids,[3001:3200]);
+ end
+ % }}}
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3108.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3108.m	(revision 16194)
+@@ -0,0 +1,19 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=extrude(md,3,1.);
++md=setflowequation(md,'SSA','all');
++md.timestepping.time_step=0;
++md.cluster=generic('name',oshostname(),'np',3);
++md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md=solve(md,ThermalSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Temperature','BasalforcingsMeltingRate'};
++field_tolerances={1e-13,1e-13};
++field_values={...
++	(md.results.ThermalSolution.Temperature),...
++	(md.results.ThermalSolution.BasalforcingsMeltingRate),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3109.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3109.py	(revision 16194)
+@@ -0,0 +1,30 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1.)
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isstressbalance=False
++md.transient.ismasstransport=False
++md.transient.isthermal=True
++md.transient.isgroundingline=False
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3104.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3104.py	(revision 16194)
+@@ -0,0 +1,29 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2.)
++md=setflowequation(md,'FS','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,StressbalanceSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
++field_values=[\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3101.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3101.m	(revision 16194)
+@@ -0,0 +1,25 @@
++md=triangle(model(),'../Exp/Square.exp',50000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.stressbalance.requested_outputs=StressTensorEnum();
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure',...
++	'StressTensorxx','StressTensoryy','StressTensorxy'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3109.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3109.m	(revision 16194)
+@@ -0,0 +1,22 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=extrude(md,3,1.);
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.isstressbalance=0;
++md.transient.ismasstransport=0;
++md.transient.isthermal=1;
++md.transient.isgroundingline=0;
++md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md=solve(md,TransientSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Temperature','BasalforcingsMeltingRate'};
++field_tolerances={1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(1).Temperature),...
++	(md.results.TransientSolution(1).BasalforcingsMeltingRate),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3110.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3110.m	(revision 16194)
+@@ -0,0 +1,43 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.requested_outputs=IceVolumeEnum();
++
++md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md=solve(md,TransientSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.TransientSolution(1).Vx),...
++	(md.results.TransientSolution(1).Vy),...
++	(md.results.TransientSolution(1).Vel),...
++	(md.results.TransientSolution(1).Pressure),...
++	(md.results.TransientSolution(1).Bed),...
++	(md.results.TransientSolution(1).Surface),...
++	(md.results.TransientSolution(1).Thickness),...
++	(md.results.TransientSolution(1).IceVolume),...
++	(md.results.TransientSolution(2).Vx),...
++	(md.results.TransientSolution(2).Vy),...
++	(md.results.TransientSolution(2).Vel),...
++	(md.results.TransientSolution(2).Pressure),...
++	(md.results.TransientSolution(2).Bed),...
++	(md.results.TransientSolution(2).Surface),...
++	(md.results.TransientSolution(2).Thickness),...
++	(md.results.TransientSolution(2).IceVolume),...
++	(md.results.TransientSolution(3).Vx),...
++	(md.results.TransientSolution(3).Vy),...
++	(md.results.TransientSolution(3).Vel),...
++	(md.results.TransientSolution(3).Pressure),...
++	(md.results.TransientSolution(3).Bed),...
++	(md.results.TransientSolution(3).Surface),...
++	(md.results.TransientSolution(3).Thickness),...
++	(md.results.TransientSolution(3).IceVolume),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3102.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3102.m	(revision 16194)
+@@ -0,0 +1,21 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=extrude(md,3,2.);
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md.verbose=verbose('autodiff',true);
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3105.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3105.py	(revision 16194)
+@@ -0,0 +1,24 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,MasstransportSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results.MasstransportSolution.Thickness,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3119.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3119.py	(revision 16194)
+@@ -0,0 +1,47 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
++md=triangle(model(),'../Exp/Square.exp',100000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmgslsolver()
++
++md.autodiff.isautodiff=True
++md.verbose.autodiff=True
++
++#first run scalar reverse mode: 
++md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)]
++md.autodiff.dependents=[dependent('name','MaxVel','type','scalar','fos_reverse_index',1)]
++md.autodiff.driver='fos_reverse'
++
++md=solve(md,TransientSolutionEnum())
++
++#recover jacobian: 
++jac_reverse=md.results.TransientSolution[0].AutodiffJacobian
++
++#now run vectorial forward mode
++md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',numpy.arange(0,md.mesh.numberofvertices))]
++md.autodiff.dependents=[dependent('name','MaxVel','type','scalar')]
++md.autodiff.driver='fov_forward'
++
++md=solve(md,TransientSolutionEnum())
++
++#recover jacobian: 
++jac_forward=md.results.TransientSolution[0].AutodiffJacobian
++
++#Fields and tolerances to track changes
++field_names     =['Jac Forward','Jac Reverse','Jac Forward - Reverse']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[jac_forward,jac_reverse,jac_forward-jac_reverse]
+Index: ../trunk-jpl/test/NightlyRun/test3119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3119.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3119.m	(revision 16194)
+@@ -0,0 +1,35 @@
++%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
++md=triangle(model(),'../Exp/Square.exp',100000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',1);
++md.toolkits.DefaultAnalysis=issmgslsolver();
++
++md.autodiff.isautodiff=true;
++md.verbose.autodiff=true;
++
++%first run scalar reverse mode: 
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar','fos_reverse_index',1)};
++md.autodiff.driver='fos_reverse';
++
++md=solve(md,TransientSolutionEnum());
++
++%recover jacobian: 
++jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
++
++%now run vectorial forward mode
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
++md.autodiff.driver='fov_forward';
++
++md=solve(md,TransientSolutionEnum());
++
++%recover jacobian: 
++jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
++
++%Fields and tolerances to track changes
++field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
++field_tolerances={1e-8,1e-8,1e-6};
++field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
+Index: ../trunk-jpl/test/NightlyRun/test3120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3120.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3120.m	(revision 16194)
+@@ -0,0 +1,85 @@
++%This test runs test3020 with autodiff on, and checks that 
++%the value of the scalar forward difference match a step-wise differential
++
++%First configure
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
++md.verbose=verbose('autodiff',true);
++md.stressbalance.restol=1e-4;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++
++%setup autodiff parameters
++index=1; %this is the scalar component we are checking against
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	};
++
++md.autodiff.dependents={...
++	dependent('name','IceVolume','type','scalar'),...
++	dependent('name','MaxVel','type','scalar')...
++	};
++md.autodiff.driver='fos_forward';
++
++%parameters for the step-wise derivative
++delta=0.00001;
++h1=md.geometry.thickness(index);
++h0=h1*(1.-delta);
++h2=h1*(1.+delta);
++deltaH=(h2-h0);
++
++%save model:
++md2=md;
++
++%evaluate derivative by forward and backward stepping 
++%forward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h0;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum());
++V0=md.results.TransientSolution(end).IceVolume;
++MaxV0=md.results.TransientSolution(end).MaxVel;
++
++%backward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h2;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum());
++V2=md.results.TransientSolution(end).IceVolume;
++MaxV2=md.results.TransientSolution(end).MaxVel;
++
++%compute resulting derivative
++dVdh_an=(V2-V0)/deltaH;
++dMaxVdh_an=(MaxV2-MaxV0)/deltaH;
++
++%evaluate derivative using ADOLC 
++md=md2;
++md.autodiff.isautodiff=true;
++md.geometry.thickness(index)=h1;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum());
++%retrieve directly
++dVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(1);
++dMaxVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(2);
++
++disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
++disp(sprintf('dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dMaxVdh_an,dMaxVdh_ad));
++
++%Fields and tolerances to track changes
++field_names     ={'dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0'};
++field_tolerances={1e-8,1e-7};
++field_values={dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad};
+Index: ../trunk-jpl/test/NightlyRun/test3103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3103.m	(revision 16194)
+@@ -0,0 +1,30 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=extrude(md,3,2.);
++md=setflowequation(md,'HO','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.stressbalance.requested_outputs=StressTensorEnum();
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md.verbose=verbose('autodiff',true);
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
++	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
++field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,...
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	(md.results.StressbalanceSolution.StressTensorxx),...
++	(md.results.StressbalanceSolution.StressTensoryy),...
++	(md.results.StressbalanceSolution.StressTensorzz),...
++	(md.results.StressbalanceSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.StressTensorxz),...
++	(md.results.StressbalanceSolution.StressTensoryz),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 16193)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 16194)
+@@ -119,7 +119,7 @@
+ 	elif strcmpi(benchmark,'gia'):
+ 		test_ids=test_ids.intersection(set(range(2001,2100)))
+ 	elif strcmpi(benchmark,'adolc'):
+-		test_ids=test_ids.intersection(set(range(3001,3020)))
++		test_ids=test_ids.intersection(set(range(3001,3200)))
+ 	#print 'test_ids after benchmark =',test_ids
+ 	test_ids=list(test_ids)
+ 	test_ids.sort()
+Index: ../trunk-jpl/test/NightlyRun/test3106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3106.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3106.py	(revision 16194)
+@@ -0,0 +1,28 @@
++from model import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=meshconvert(md)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.masstransport.stabilization=3
++md.masstransport.spcthickness=md.geometry.thickness
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,MasstransportSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results.MasstransportSolution.Thickness,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3104.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3104.m	(revision 16194)
+@@ -0,0 +1,21 @@
++md=triangle(model(),'../Exp/Square.exp',180000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=extrude(md,3,2.);
++md=setflowequation(md,'FS','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md.verbose=verbose('autodiff',true);
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
++field_tolerances={1e-08,1e-08,1e-07,1e-08,1e-08};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vz),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3101.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3101.py	(revision 16194)
+@@ -0,0 +1,33 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',50000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.stressbalance.requested_outputs=StressTensorEnum()
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,StressbalanceSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorxy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	md.results.StressbalanceSolution.StressTensorxx,\
++	md.results.StressbalanceSolution.StressTensoryy,\
++	md.results.StressbalanceSolution.StressTensorxy,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3115.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3115.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3115.py	(revision 16194)
+@@ -0,0 +1,92 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from SetIceShelfBC import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#This test runs test3005 with autodiff on, and checks that 
++#the value of the scalar forward difference match a step-wise differential
++
++#First configure
++md=triangle(model(),'../Exp/Square.exp',50000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.masstransport.requested_outputs=IceVolumeEnum()
++md.verbose=verbose('autodiff',True)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++
++#setup autodiff parameters
++index=1 #this is the scalar component we are checking against
++md.autodiff.independents=[\
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	]
++
++md.autodiff.dependents=[\
++	dependent('name','IceVolume','type','scalar')\
++	]
++md.autodiff.driver='fos_forward'
++
++#parameters for the step-wise derivative
++delta=0.001
++h1=md.geometry.thickness[index]
++h0=h1*(1.-delta)
++h2=h1*(1.+delta)
++deltaH=(h2-h0)
++
++#save model
++md2=copy.deepcopy(md)
++
++#evaluate derivative by forward and backward stepping 
++#forward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h0
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,MasstransportSolutionEnum())
++V0=md.results.MasstransportSolution.IceVolume
++
++#backward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h2
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,MasstransportSolutionEnum())
++V2=md.results.MasstransportSolution.IceVolume
++
++#compute resulting derivative
++dVdh_an=(V2-V0)/deltaH
++
++#evaluate derivative using ADOLC 
++md=md2
++md.autodiff.isautodiff=True
++md.geometry.thickness[index]=h1
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,MasstransportSolutionEnum())
++#retrieve directly
++dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian
++
++print "dV/dh: analytical:  #16.16g\n       using adolc:  #16.16g\n" % (dVdh_an,dVdh_ad)
++
++#Fields and tolerances to track changes
++field_names     =['dV/dh-dV/dh0']
++field_tolerances=[1e-13]
++field_values=[dVdh_ad-dVdh_an]
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16193)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16194)
+@@ -222,6 +222,21 @@
+ 	case 3010, name='SquareShelfConstrainedTranSSA2dAdolc';
+ 	case 3015, name='SquareShelfConstrainedMasstransp2dAdolcForwardDifference';
+ 	case 3019, name='SquareShelfConstrainedTherTranAdolcReverseVsForward';
++	case 3020, name='SquareShelfConstrainedTranAdolcReverseVsForward';
++	case 3101, name='SquareShelfConstrainedStressSSA2dAdolcMumps';
++	case 3102, name='SquareShelfConstrainedStressSSA3dAdolcMumps';
++	case 3103, name='SquareShelfConstrainedStressHOAdolcMumps';
++	case 3104, name='SquareShelfConstrainedStressFSAdolcMumps';
++	case 3105, name='SquareShelfConstrainedMasstransp2dAdolcMumps';
++	case 3106, name='SquareShelfConstrainedMasstransp2dDGAdolcMumps';
++	case 3107, name='SquareShelfConstrainedMasstransp3dAdolcMumps';
++	case 3108, name='SquareShelfConstrainedTherSteaAdolcMumps';
++	case 3109, name='SquareShelfConstrainedTherTranAdolcMumps';
++	case 3110, name='SquareShelfConstrainedTranSSA2dAdolcMumps';
++	case 3115, name='SquareShelfConstrainedMasstransp2dAdolcForwardDifferenceMumps';
++	case 3019, name='SquareShelfConstrainedTherTranAdolcReverseVsForward';
++	case 3120, name='SquareShelfConstrainedTranAdolcReverseVsForwardMumps';
+ 
++
+ 	otherwise, name='N/A';
+ end
+Index: ../trunk-jpl/test/NightlyRun/test3110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3110.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3110.py	(revision 16194)
+@@ -0,0 +1,51 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.transient.requested_outputs=IceVolumeEnum()
++
++md.autodiff.isautodiff=True
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].IceVolume,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3105.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3105.m	(revision 16194)
+@@ -0,0 +1,16 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md.verbose=verbose('autodiff',true);
++md=solve(md,MasstransportSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Thickness'};
++field_tolerances={1e-13};
++field_values={...
++	(md.results.MasstransportSolution.Thickness),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/test3107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3107.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3107.py	(revision 16194)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'SSA','all')
++md.extrude(5,3.)
++md.cluster=generic('name',oshostname(),'np',3)
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md.autodiff.isautodiff=True
++md=solve(md,MasstransportSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results.MasstransportSolution.Thickness,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3102.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3102.py	(revision 16194)
+@@ -0,0 +1,29 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2.)
++md=setflowequation(md,'SSA','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=True
++md.toolkits.DefaultAnalysis=issmmumpssolver()
++md=solve(md,StressbalanceSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results.StressbalanceSolution.Vx,\
++	md.results.StressbalanceSolution.Vy,\
++	md.results.StressbalanceSolution.Vz,\
++	md.results.StressbalanceSolution.Vel,\
++	md.results.StressbalanceSolution.Pressure,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3106.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3106.m	(revision 16194)
+@@ -0,0 +1,19 @@
++md=triangle(model(),'../Exp/Square.exp',150000.);
++md=meshconvert(md);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'SSA','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.masstransport.stabilization=3;
++md.masstransport.spcthickness=md.geometry.thickness;
++md.autodiff.isautodiff=true;
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++md.verbose=verbose('autodiff',true);
++md=solve(md,MasstransportSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Thickness'};
++field_tolerances={1e-13};
++field_values={...
++	(md.results.MasstransportSolution.Thickness),...
++	};
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16193)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16194)
+@@ -225,6 +225,20 @@
+ 	3010 : 'SquareShelfConstrainedTranSSA2dAdolc',
+ 	3015 : 'SquareShelfConstrainedMasstransp2dAdolcForwardDifference',
+ 	3019 : 'SquareShelfConstrainedTherTranAdolcReverseVsForward',
++	3020 : 'SquareShelfConstrainedTranAdolcReverseVsForward',
++	3101 : 'SquareShelfConstrainedStressSSA2dAdolcMumps',
++	3102 : 'SquareShelfConstrainedStressSSA3dAdolcMumps',
++	3103 : 'SquareShelfConstrainedStressHOAdolcMumps',
++	3104 : 'SquareShelfConstrainedStressFSAdolcMumps',
++	3105 : 'SquareShelfConstrainedMasstransp2dAdolcMumps',
++	3106 : 'SquareShelfConstrainedMasstransp2dDGAdolcMumps',
++	3107 : 'SquareShelfConstrainedMasstransp3dAdolcMumps',
++	3108 : 'SquareShelfConstrainedTherSteaAdolcMumps',
++	3109 : 'SquareShelfConstrainedTherTranAdolcMumps',
++	3110 : 'SquareShelfConstrainedTranSSA2dAdolcMumps',
++	3115 : 'SquareShelfConstrainedMasstransp2dAdolcForwardDifferenceMumps',
++	3119 : 'SquareShelfConstrainedTherTranAdolcReverseVsForwardMumps',
++	3120 : 'SquareShelfConstrainedTranAdolcReverseVsForwardMumps',
+ 	}
+ 
+ 	if not id == 0:
Index: issm/oecreview/Archive/16133-16554/ISSM-16194-16195.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16194-16195.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16194-16195.diff	(revision 16556)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 16194)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 16195)
+@@ -120,7 +120,7 @@
+ elseif strcmpi(benchmark,'gia'),
+ 	test_ids=intersect(test_ids,[2001:2100]);
+ elseif strcmpi(benchmark,'adolc'),
+-	test_ids=intersect(test_ids,[3001:3200]);
++	test_ids=intersect(test_ids,[3001:3020]);
+ end
+ % }}}
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16194)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16195)
+@@ -3,8 +3,11 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',1);
+-md.toolkits.DefaultAnalysis=issmgslsolver();
++md.cluster=generic('name',oshostname(),'np',3);
++%md.debug.valgrind=true;
++%md.verbose=verbose('11111111')
++md.toolkits.DefaultAnalysis=issmmumpssolver();
++%md.toolkits.DefaultAnalysis.solver_type='gsl';
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+@@ -19,17 +22,7 @@
+ %recover jacobian: 
+ jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+ 
+-%now run vectorial forward mode
+-md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
+-md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
+-md.autodiff.driver='fov_forward';
+-
+-md=solve(md,TransientSolutionEnum());
+-
+-%recover jacobian: 
+-jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
+-
+ %Fields and tolerances to track changes
+-field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
+-field_tolerances={1e-8,1e-8,1e-6};
+-field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
++field_names     ={'Jac Reverse'};
++field_tolerances={1e-8};
++field_values={jac_reverse};
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 16194)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 16195)
+@@ -119,7 +119,7 @@
+ 	elif strcmpi(benchmark,'gia'):
+ 		test_ids=test_ids.intersection(set(range(2001,2100)))
+ 	elif strcmpi(benchmark,'adolc'):
+-		test_ids=test_ids.intersection(set(range(3001,3200)))
++		test_ids=test_ids.intersection(set(range(3001,3020)))
+ 	#print 'test_ids after benchmark =',test_ids
+ 	test_ids=list(test_ids)
+ 	test_ids.sort()
+Index: ../trunk-jpl/test/NightlyRun/testad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/testad.m	(revision 16194)
++++ ../trunk-jpl/test/NightlyRun/testad.m	(revision 16195)
+@@ -1,12 +1,12 @@
+ %test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+-md=triangle(model(),'../Exp/Square.exp',500000.);
++md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',2);
++md.cluster=generic('name',oshostname(),'np',3);
+ %md.debug.valgrind=true;
+ %md.verbose=verbose('11111111')
+-md.toolkits.DefaultAnalysis=issmsolver();
++md.toolkits.DefaultAnalysis=issmmumpssolver();
+ %md.toolkits.DefaultAnalysis.solver_type='gsl';
+ 
+ md.autodiff.isautodiff=true;
Index: issm/oecreview/Archive/16133-16554/ISSM-16195-16196.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16195-16196.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16195-16196.diff	(revision 16556)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16195)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 16196)
+@@ -3,11 +3,8 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
+-%md.debug.valgrind=true;
+-%md.verbose=verbose('11111111')
+-md.toolkits.DefaultAnalysis=issmmumpssolver();
+-%md.toolkits.DefaultAnalysis.solver_type='gsl';
++md.cluster=generic('name',oshostname(),'np',1);
++md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+@@ -22,7 +19,17 @@
+ %recover jacobian: 
+ jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+ 
++%now run vectorial forward mode
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
++md.autodiff.driver='fov_forward';
++
++md=solve(md,TransientSolutionEnum());
++
++%recover jacobian: 
++jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
++
+ %Fields and tolerances to track changes
+-field_names     ={'Jac Reverse'};
+-field_tolerances={1e-8};
+-field_values={jac_reverse};
++field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
++field_tolerances={1e-8,1e-8,1e-6};
++field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
Index: issm/oecreview/Archive/16133-16554/ISSM-16196-16197.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16196-16197.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16196-16197.diff	(revision 16556)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16196)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16197)
+@@ -36,23 +36,13 @@
+ 	}
+ 	#endif
+ 
++	/*FIXME: this function is actually called by Hydrology and damage evolution. Should be renamed*/
+ 	#ifdef _HAVE_THERMAL_
+-
+-	if(PengridIsPresent(femmodel->loads,ThermalAnalysisEnum)){
+-
++	if(PengridIsPresent(femmodel->loads,analysis_type)){
+ 		ThermalConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
+ 	}
+ 	#endif
+ 
+-	#ifdef _HAVE_DAMAGE_
+-
+-	if(PengridIsPresent(femmodel->loads,DamageEvolutionAnalysisEnum)){
+-
+-		DamageConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
+-	}
+-	#endif
+-
+-
+ 	/*Assign output pointers: */
+ 	*pconverged=converged;
+ 	*pnum_unstable_constraints=num_unstable_constraints;
Index: issm/oecreview/Archive/16133-16554/ISSM-16197-16198.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16197-16198.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16197-16198.diff	(revision 16556)
@@ -0,0 +1,198 @@
+Index: ../trunk-jpl/src/m/classes/damage.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.py	(revision 16197)
++++ ../trunk-jpl/src/m/classes/damage.py	(revision 16198)
+@@ -15,17 +15,26 @@
+ 	def __init__(self,*args):    # {{{
+ 			
+ 		#damage: 
+-		isdamage = float('NaN')
+-		self.D   = float('NaN')
+-		self.law   = ''
++		self.D						= float('NaN')
++		self.law						= ''
++		self.spcdamage				= float('NaN')
++		self.max_damage			= float('NaN')
+ 		
+-		#parameters for law 'initial': 
+-		self.stress_threshold    = float('NaN')
+-		self.c1                  = float('NaN')
+-		self.c2                  = float('NaN')
+-		self.c3                  = float('NaN')
+-		self.c4                  = float('NaN')
++		#numerical
++		stabilization				= float('NaN')
++		penalty_threshold			= float('NaN')
++		maxiter						= float('NaN')
++		penalty_lock				= float('NaN')
++		penalty_factor				= float('NaN')
+ 
++		#general parameters for evolution law: 
++		self.stress_threshold   = float('NaN')
++		self.c1                 = float('NaN')
++		self.c2                 = float('NaN')
++		self.c3                 = float('NaN')
++		self.c4                 = float('NaN')
++		self.healing				= float('NaN')
++
+ 		if not len(args):
+ 			self.setdefaultparameters()
+ 		else:
+@@ -37,7 +46,15 @@
+ 
+ 		s+="%s\n" % fielddisplay(self,"D","damage tensor (scalar for now)")
+ 		s+="%s\n" % fielddisplay(self,"law","damage law (string) from ['undamaged','pralong']")
++		s+="%s\n" % fielddisplay(self,"spcdamage","damage constraints (NaN means no constraint)")
++		s+="%s\n" % fielddisplay(self,"max_damage","maximum possible damage (0<=max_damage<1)")
+ 
++		s+="%s\n" % fielddisplay(self,"stabilization","0: no, 1: artificial_diffusivity, 2: SUPG")
++		s+="%s\n" % fielddisplay(self,"maxiter","maximum number of non linear iterations")
++		s+="%s\n" % fielddisplay(self,"penalty_lock","stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)")
++		s+="%s\n" % fielddisplay(self,"penalty_lock","threshold to declare convergence of damage evolution solution (default is 0)")
++		s+="%s\n" % fielddisplay(self,"penalty_lock","scaling exponent (default is 3)")
++
+ 		if (self.law=='pralong'):
+ 			s+="%s\n" % fielddisplay(self,"c1","damage parameter 1 ")
+ 			s+="%s\n" % fielddisplay(self,"c2","damage parameter 2 ")
+@@ -50,36 +67,74 @@
+ 	def setdefaultparameters(self):    # {{{
+ 
+ 		#damage parameters: 
+-		self.isdamage=0
+ 		self.D=0
+ 		self.law='undamaged'
++
++		self.max_damage=1-1e-5 #if damage reaches 1, solve becomes singular, as viscosity becomes nil
++		
++		#Type of stabilization used
++		self.stabilization=2
++			
++		#Maximum number of iterations
++		self.maxiter=100
++
++		#factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor
++		self.penalty_factor=3
++			
++		#stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)
++		self.penalty_lock=0
++			
++		#threshold to declare convergence of thermal solution (default is 0)
++		self.penalty_threshold=0
++		
++		#damage evolution parameters 
+ 		self.stress_threshold=0
+ 		self.c1=0
+ 		self.c2=0
+ 		self.c3=0
+ 		self.c4=0
++		self.healing=0
+ 
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+-		md = checkfield(md,'damage.D','>=',0,'size',[md.mesh.numberofvertices])
+-		if self.isdamage:
+-			md = checkfield(md,'damage.law','values',['undamaged','pralong'])
++		md = checkfield(md,'damage.D','>=',0,'<=',self.max_damage,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'damage.max_damage','<',1,'>=',0)
++		md = checkfield(md,'damage.law','values',['undamaged','pralong'])
++		md = checkfield(md,'damage.spcdamage','forcing',1)
++			
++		md = checkfield(md,'damage.stabilization','numel',[1],'values',[0,1,2]);
++		md = checkfield(md,'damage.maxiter','>=0',0);
++		md = checkfield(md,'damage.penalty_factor','>=0',0);
++		md = checkfield(md,'damage.penalty_lock','>=0',0);
++		md = checkfield(md,'damage.penalty_threshold','>=0',0);
++
+ 		if self.law == 'pralong':
++			md = checkfield(md,'damage.healing','>=',0);
+ 			md = checkfield(md,'damage.c1','>=',0)
+ 			md = checkfield(md,'damage.c2','>=',0)
+ 			md = checkfield(md,'damage.c3','>=',0)
+ 			md = checkfield(md,'damage.c4','>=',0)
+ 			md = checkfield(md,'damage.stress_threshold','>=',0)
++		elif strcmpi(self.law,'undamaged'):
++			if (solution==DamageEvolutionSolutionEnum):
++				raise RuntimeError('Invalid evolution law (md.damage.law) for a damage solution');
+ 
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 
+-		WriteData(fid,'object',self,'fieldname','isdamage','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
+-		if self.isdamage:
+-			WriteData(fid,'object',self,'fieldname','law','format','String')
++		WriteData(fid,'object',self,'fieldname','law','format','String')
++		WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
++		WriteData(fid,'object',self,'fieldname','max_damage','format','Double');
++
++		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer');
++		WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer');
++		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer');
++		WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer');
++		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double');
++
+ 		if self.law=='pralong':
+ 			WriteData(fid,'object',self,'fieldname','c1','format','Double')
+ 			WriteData(fid,'object',self,'fieldname','c2','format','Double')
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 16197)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 16198)
+@@ -615,6 +615,7 @@
+ 		md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',float('NaN'))
+ 		md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
+ 		md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
++		md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node')
+ 		md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
+ 		md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
+ 
+@@ -632,6 +633,7 @@
+ 
+ 		#damage
+ 		md.damage.D=project3d(md,'vector',md.damage.D,'type','node')
++
+ 		#parameters
+ 		md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node')
+ 		md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node')
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16197)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16198)
+@@ -19,7 +19,7 @@
+ 		penalty_lock        = NaN;
+ 		penalty_factor      = NaN;
+ 		
+-		%parameters for law 'initial': 
++		%general parameters for evolution law: 
+ 		stress_threshold    = NaN;
+ 		c1                  = NaN;
+ 		c2                  = NaN;
+@@ -70,7 +70,7 @@
+ 			%threshold to declare convergence of thermal solution (default is 0)
+ 			obj.penalty_threshold=0;
+ 		
+-			%damage parameters for 'initial' law of damage propagation
++			%damage evolution parameters 
+ 			obj.stress_threshold=0;
+ 			obj.healing=0;
+ 			obj.c1=0;
+@@ -101,7 +101,7 @@
+ 				md = checkfield(md,'damage.stress_threshold','>=',0);
+ 			elseif strcmpi(obj.law,'undamaged'),
+ 				if (solution==DamageEvolutionSolutionEnum),
+-					error('you are trying to evolve an undamaged material. Choose a valid evolution law (md.damage.law)');
++					error('Invalid evolution law (md.damage.law) for a damage solution');
+ 				end
+ 			else 
+ 				error('invalid damage evolution law');
+@@ -114,7 +114,7 @@
+ 			fielddisplay(obj,'D','damage tensor (scalar)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
+ 			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)');
+-			fielddisplay(obj,'max_damage','maximum damage sustained by ice (0<=max_damage<1)');
++			fielddisplay(obj,'max_damage','maximum possible damage (0<=max_damage<1)');
+ 			
+ 			fielddisplay(obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');
+ 			fielddisplay(obj,'maxiter','maximum number of non linear iterations');
Index: issm/oecreview/Archive/16133-16554/ISSM-16198-16199.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16198-16199.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16198-16199.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 16198)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 16199)
+@@ -120,7 +120,7 @@
+ elseif strcmpi(benchmark,'gia'),
+ 	test_ids=intersect(test_ids,[2001:2100]);
+ elseif strcmpi(benchmark,'adolc'),
+-	test_ids=intersect(test_ids,[3001:3020]);
++	test_ids=intersect(test_ids,[3001:3200]);
+ end
+ % }}}
+ 
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 16198)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 16199)
+@@ -119,7 +119,7 @@
+ 	elif strcmpi(benchmark,'gia'):
+ 		test_ids=test_ids.intersection(set(range(2001,2100)))
+ 	elif strcmpi(benchmark,'adolc'):
+-		test_ids=test_ids.intersection(set(range(3001,3020)))
++		test_ids=test_ids.intersection(set(range(3001,3200)))
+ 	#print 'test_ids after benchmark =',test_ids
+ 	test_ids=list(test_ids)
+ 	test_ids.sort()
Index: issm/oecreview/Archive/16133-16554/ISSM-16199-16200.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16199-16200.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16199-16200.diff	(revision 16556)
@@ -0,0 +1,249 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16200)
+@@ -1052,7 +1052,6 @@
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/IntersectGeomMetric)*/
+ 
+ 		/*Get options*/
+-		int    verbose  = bamgopts->verbose;
+ 		double anisomax = bamgopts->anisomax;
+ 		double errg     = bamgopts->errg;
+ 
+@@ -3311,7 +3310,6 @@
+ 		delete [] first_np_or_next_t;
+ 
+ 		long NbSwapf =0;
+-
+ 		for(i=0;i<nbv;i++) NbSwapf += vertices[i].Optim(0);
+ 	}/*}}}*/
+ 	/*FUNCTION Mesh::ProjectOnCurve{{{*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16200)
+@@ -10,7 +10,6 @@
+ void	CreateConstraintsEnthalpy(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int        i,j;
+ 	int        count;
+ 	int        M,N;
+ 	bool       spcpresent = false;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16200)
+@@ -10,14 +10,11 @@
+ 
+ void	UpdateElementsFreeSurfaceBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    finiteelement;
+-	bool   dakota_analysis;
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if (iomodel->dim==2)return;
+ 
+ 	/*Finite element type*/
+-	finiteelement = P1Enum;
++	int finiteelement = P1Enum;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 16200)
+@@ -9,7 +9,6 @@
+ void	CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediaries*/
+-	int element;
+ 	int penpair_ids[2];
+ 	int count=0;
+ 	int numvertex_pairing;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 16200)
+@@ -11,7 +11,6 @@
+ 
+ 	Parameters *parameters = NULL;
+ 	int         hydrology_model;
+-	bool        isefficientlayer;
+ 
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 16200)
+@@ -9,7 +9,6 @@
+ void	CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediaries*/
+-	int element;
+ 	int penpair_ids[2];
+ 	int count=0;
+ 	int numvertex_pairing;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16200)
+@@ -10,13 +10,10 @@
+ 
+ void	UpdateElementsFreeSurfaceTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	int    finiteelement;
+-	bool   dakota_analysis;
+-
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if (iomodel->dim==2)return;
+ 
+-	finiteelement = P1Enum;
++	int finiteelement = P1Enum;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16200)
+@@ -45,7 +45,6 @@
+ 
+ 	/*Intermediaries*/
+ 	int  i,i1,i2;
+-	int  cols;
+ 	int  e1,e2;
+ 	int  pos;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16200)
+@@ -9,8 +9,6 @@
+ void	CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int         segment_width;
+-	int         element;
+ 	int         i;
+ 	int         count;
+ 	int         penpair_ids[2];
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 16200)
+@@ -10,9 +10,11 @@
+ void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel){
+ 
+ 	/*output: */
+-	int converged                  = 0;
+-	int num_unstable_constraints   = 0;
+-	int min_mechanical_constraints = 0;
++	int converged                     = 1;
++	int num_unstable_constraints      = 0;
++	int min_mechanical_constraints    = 0;
++	int  unstable                     = 0;
++	int  sum_num_unstable_constraints = 0;
+ 	int analysis_type;
+ 
+ 	/*Display message*/
+@@ -22,28 +24,32 @@
+ 	femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
+ 	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+-	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
+-	 * management routine, otherwise, skip : */
+-
+-	/*No constraints management by default!:*/
+-	num_unstable_constraints=0;
+-	converged=1;
+-
++	/*Rift penalties first*/
+ 	#ifdef _HAVE_RIFTS_
+ 	if(RiftIsPresent(femmodel->loads,analysis_type)){
+-
+ 		RiftConstraintsState(&converged,&num_unstable_constraints,femmodel->loads,min_mechanical_constraints,analysis_type);
+ 	}
+ 	#endif
+ 
+-	/*FIXME: this function is actually called by Hydrology and damage evolution. Should be renamed*/
+-	#ifdef _HAVE_THERMAL_
+-	if(PengridIsPresent(femmodel->loads,analysis_type)){
+-		ThermalConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
++	/*Deal with pengrid*/
++	for(int i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
++		if(load->InAnalysis(analysis_type)){
++			if(load->ObjectEnum()==PengridEnum){
++				Pengrid* pengrid=(Pengrid*)load;
++				pengrid->ConstraintActivate(&unstable);
++				num_unstable_constraints += unstable;
++			}
++		}
+ 	}
+-	#endif
++	ISSM_MPI_Reduce(&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
++	num_unstable_constraints=sum_num_unstable_constraints;
+ 
++	/*Have we converged? : */
++	if(num_unstable_constraints) converged=0;
++
+ 	/*Assign output pointers: */
+-	*pconverged=converged;
+-	*pnum_unstable_constraints=num_unstable_constraints;
++	*pconverged                = converged;
++	*pnum_unstable_constraints = num_unstable_constraints;
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16200)
+@@ -3305,7 +3305,6 @@
+ 	this->SpawnTriaHook(dynamic_cast<ElementHook*>(tria),location);
+ 
+ 	/*Spawn material*/
+-	tria->material=NULL;
+ 	tria->material=(Material*)this->material->copy();
+ 	delete tria->material->inputs;
+ 	tria->material->inputs=(Inputs*)this->material->inputs->SpawnTriaInputs(location);
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16199)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16200)
+@@ -43,7 +43,6 @@
+ 	IssmPDouble *seg_coords  = NULL;
+ 	IssmPDouble *seg_weights = NULL;
+ 	IssmDouble  a1,b1,c1,a2,b2,c2;
+-	int     i,index3;
+ 
+ 	/*Get Segment gauss points*/
+ 	numgauss=order;
+@@ -82,7 +81,7 @@
+ 	}
+ 
+ 	/*Build Triangle Gauss point*/
+-	for(i=0;i<numgauss;i++){
++	for(int i=0;i<numgauss;i++){
+ 		coords1[i]=0.5*(a1+a2) + 0.5*seg_coords[i]*(a2-a1);
+ 		coords2[i]=0.5*(b1+b2) + 0.5*seg_coords[i]*(b2-b1);
+ 		coords3[i]=0.5*(c1+c2) + 0.5*seg_coords[i]*(c2-c1);
+@@ -106,7 +105,6 @@
+ 	/*Intermediaties*/
+ 	IssmPDouble *seg_coords  = NULL;
+ 	IssmPDouble *seg_weights = NULL;
+-	int     i,index3;
+ 
+ 	/*Get Segment gauss points*/
+ 	numgauss=order;
+@@ -119,7 +117,7 @@
+ 	weights=xNew<IssmDouble>(numgauss);
+ 
+ 	/*Build Triangle Gauss point*/
+-	for(i=0;i<numgauss;i++){
++	for(int i=0;i<numgauss;i++){
+ 		coords1[i]=0.5*(area_coordinates[0][0]+area_coordinates[1][0]) + 0.5*seg_coords[i]*(area_coordinates[1][0]-area_coordinates[0][0]);
+ 		coords2[i]=0.5*(area_coordinates[0][1]+area_coordinates[1][1]) + 0.5*seg_coords[i]*(area_coordinates[1][1]-area_coordinates[0][1]);
+ 		coords3[i]=0.5*(area_coordinates[0][2]+area_coordinates[1][2]) + 0.5*seg_coords[i]*(area_coordinates[1][2]-area_coordinates[0][2]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16200-16201.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16200-16201.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16200-16201.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16200)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16201)
+@@ -45,11 +45,9 @@
+ 			trace_off();
+ 
+ 			/*preliminary checks: */
+-			if (my_rank==0) {
+-				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-				if(!(num_dependents*num_independents)) return;
+-			}
++			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++			if(!(num_dependents*num_independents)) return;
+ 
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16201-16202.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16201-16202.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16201-16202.diff	(revision 16556)
@@ -0,0 +1,430 @@
+Index: ../trunk-jpl/test/NightlyRun/test3115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3115.m	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3115.m	(revision 16202)
+@@ -1,78 +0,0 @@
+-%This test runs test3005 with autodiff on, and checks that 
+-%the value of the scalar forward difference match a step-wise differential
+-
+-%First configure
+-md=triangle(model(),'../Exp/Square.exp',50000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
+-md.masstransport.requested_outputs=IceVolumeEnum();
+-md.verbose=verbose('autodiff',true);
+-md.toolkits.DefaultAnalysis=issmmumpssolver();
+-
+-%setup autodiff parameters
+-index=1; %this is the scalar component we are checking against
+-md.autodiff.independents={...
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+-	};
+-
+-md.autodiff.dependents={...
+-	dependent('name','IceVolume','type','scalar')...
+-	};
+-md.autodiff.driver='fos_forward';
+-
+-%parameters for the step-wise derivative
+-delta=0.001;
+-h1=md.geometry.thickness(index);
+-h0=h1*(1.-delta);
+-h2=h1*(1.+delta);
+-deltaH=(h2-h0);
+-
+-%save model:
+-md2=md;
+-
+-%evaluate derivative by forward and backward stepping 
+-%forward
+-md=md2;
+-md.autodiff.isautodiff=false;
+-md.geometry.thickness(index)=h0;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,MasstransportSolutionEnum());
+-V0=md.results.MasstransportSolution.IceVolume;
+-
+-%backward
+-md=md2;
+-md.autodiff.isautodiff=false;
+-md.geometry.thickness(index)=h2;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,MasstransportSolutionEnum());
+-V2=md.results.MasstransportSolution.IceVolume;
+-
+-%compute resulting derivative
+-dVdh_an=(V2-V0)/deltaH;
+-
+-%evaluate derivative using ADOLC 
+-md=md2;
+-md.autodiff.isautodiff=true;
+-md.geometry.thickness(index)=h1;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,MasstransportSolutionEnum());
+-%retrieve directly
+-dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian;
+-
+-disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+-
+-%Fields and tolerances to track changes
+-field_names     ={'dV/dh-dV/dh0'};
+-field_tolerances={1e-13};
+-field_values={dVdh_ad-dVdh_an};
+Index: ../trunk-jpl/test/NightlyRun/test3120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3120.py	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3120.py	(revision 16202)
+@@ -1,99 +0,0 @@
+-import numpy
+-import copy
+-from model import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from independent import *
+-from dependent import *
+-from SetIceShelfBC import *
+-from EnumDefinitions import *
+-from solve import *
+-from MatlabFuncs import *
+-
+-#This test runs test3020 with autodiff on, and checks that 
+-#the value of the scalar forward difference match a step-wise differential
+-
+-#First configure
+-md=triangle(model(),'../Exp/Square.exp',150000.)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'SSA','all')
+-md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
+-md.verbose=verbose('autodiff',True)
+-md.stressbalance.restol=0.000001
+-md.toolkits.DefaultAnalysis=issmmumpssolver()
+-
+-#setup autodiff parameters
+-index=1 #this is the scalar component we are checking against
+-md.autodiff.independents=[\
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+-	]
+-
+-md.autodiff.dependents=[\
+-	dependent('name','IceVolume','type','scalar'),\
+-	dependent('name','MaxVel','type','scalar')\
+-	]
+-md.autodiff.driver='fos_forward'
+-
+-#parameters for the step-wise derivative
+-delta=0.00001
+-h1=md.geometry.thickness[index]
+-h0=h1*(1.-delta)
+-h2=h1*(1.+delta)
+-deltaH=(h2-h0)
+-
+-#save model:
+-md2=copy.deepcopy(md)
+-
+-#evaluate derivative by forward and backward stepping 
+-#forward
+-md=copy.deepcopy(md2)
+-md.autodiff.isautodiff=False
+-md.geometry.thickness[index]=h0
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,TransientSolutionEnum())
+-V0=md.results.TransientSolution[2].IceVolume
+-MaxV0=md.results.TransientSolution[2].MaxVel
+-
+-#backward
+-md=copy.deepcopy(md2)
+-md.autodiff.isautodiff=False
+-md.geometry.thickness[index]=h2
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,TransientSolutionEnum())
+-V2=md.results.TransientSolution[2].IceVolume
+-MaxV2=md.results.TransientSolution[2].MaxVel
+-
+-#compute resulting derivative
+-dVdh_an=(V2-V0)/deltaH
+-dMaxVdh_an=(MaxV2-MaxV0)/deltaH
+-
+-#evaluate derivative using ADOLC 
+-md=copy.deepcopy(md2)
+-md.autodiff.isautodiff=True
+-md.geometry.thickness[index]=h1
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,TransientSolutionEnum())
+-#retrieve directly
+-dVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[0]
+-dMaxVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[1]
+-
+-print "dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dVdh_an,dVdh_ad)
+-print "dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dMaxVdh_an,dMaxVdh_ad)
+-
+-#Fields and tolerances to track changes
+-field_names     =['dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0']
+-field_tolerances=[1e-13,1e-13]
+-field_values=[dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad]
+Index: ../trunk-jpl/test/NightlyRun/test3120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3120.m	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3120.m	(revision 16202)
+@@ -1,85 +0,0 @@
+-%This test runs test3020 with autodiff on, and checks that 
+-%the value of the scalar forward difference match a step-wise differential
+-
+-%First configure
+-md=triangle(model(),'../Exp/Square.exp',150000.);
+-md=setmask(md,'all','');
+-md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
+-md.verbose=verbose('autodiff',true);
+-md.stressbalance.restol=1e-4;
+-md.toolkits.DefaultAnalysis=issmmumpssolver();
+-
+-%setup autodiff parameters
+-index=1; %this is the scalar component we are checking against
+-md.autodiff.independents={...
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+-	};
+-
+-md.autodiff.dependents={...
+-	dependent('name','IceVolume','type','scalar'),...
+-	dependent('name','MaxVel','type','scalar')...
+-	};
+-md.autodiff.driver='fos_forward';
+-
+-%parameters for the step-wise derivative
+-delta=0.00001;
+-h1=md.geometry.thickness(index);
+-h0=h1*(1.-delta);
+-h2=h1*(1.+delta);
+-deltaH=(h2-h0);
+-
+-%save model:
+-md2=md;
+-
+-%evaluate derivative by forward and backward stepping 
+-%forward
+-md=md2;
+-md.autodiff.isautodiff=false;
+-md.geometry.thickness(index)=h0;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,TransientSolutionEnum());
+-V0=md.results.TransientSolution(end).IceVolume;
+-MaxV0=md.results.TransientSolution(end).MaxVel;
+-
+-%backward
+-md=md2;
+-md.autodiff.isautodiff=false;
+-md.geometry.thickness(index)=h2;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,TransientSolutionEnum());
+-V2=md.results.TransientSolution(end).IceVolume;
+-MaxV2=md.results.TransientSolution(end).MaxVel;
+-
+-%compute resulting derivative
+-dVdh_an=(V2-V0)/deltaH;
+-dMaxVdh_an=(MaxV2-MaxV0)/deltaH;
+-
+-%evaluate derivative using ADOLC 
+-md=md2;
+-md.autodiff.isautodiff=true;
+-md.geometry.thickness(index)=h1;
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=SetIceShelfBC(md);
+-
+-md=solve(md,TransientSolutionEnum());
+-%retrieve directly
+-dVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(1);
+-dMaxVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(2);
+-
+-disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+-disp(sprintf('dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dMaxVdh_an,dMaxVdh_ad));
+-
+-%Fields and tolerances to track changes
+-field_names     ={'dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0'};
+-field_tolerances={1e-8,1e-7};
+-field_values={dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad};
+Index: ../trunk-jpl/test/NightlyRun/test3115.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3115.py	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3115.py	(revision 16202)
+@@ -1,92 +0,0 @@
+-import numpy
+-import copy
+-from model import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from independent import *
+-from dependent import *
+-from SetIceShelfBC import *
+-from EnumDefinitions import *
+-from solve import *
+-from MatlabFuncs import *
+-
+-#This test runs test3005 with autodiff on, and checks that 
+-#the value of the scalar forward difference match a step-wise differential
+-
+-#First configure
+-md=triangle(model(),'../Exp/Square.exp',50000.)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md=setflowequation(md,'SSA','all')
+-md.cluster=generic('name',oshostname(),'np',3)
+-md.masstransport.requested_outputs=IceVolumeEnum()
+-md.verbose=verbose('autodiff',True)
+-md.toolkits.DefaultAnalysis=issmmumpssolver()
+-
+-#setup autodiff parameters
+-index=1 #this is the scalar component we are checking against
+-md.autodiff.independents=[\
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+-	]
+-
+-md.autodiff.dependents=[\
+-	dependent('name','IceVolume','type','scalar')\
+-	]
+-md.autodiff.driver='fos_forward'
+-
+-#parameters for the step-wise derivative
+-delta=0.001
+-h1=md.geometry.thickness[index]
+-h0=h1*(1.-delta)
+-h2=h1*(1.+delta)
+-deltaH=(h2-h0)
+-
+-#save model
+-md2=copy.deepcopy(md)
+-
+-#evaluate derivative by forward and backward stepping 
+-#forward
+-md=copy.deepcopy(md2)
+-md.autodiff.isautodiff=False
+-md.geometry.thickness[index]=h0
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,MasstransportSolutionEnum())
+-V0=md.results.MasstransportSolution.IceVolume
+-
+-#backward
+-md=copy.deepcopy(md2)
+-md.autodiff.isautodiff=False
+-md.geometry.thickness[index]=h2
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,MasstransportSolutionEnum())
+-V2=md.results.MasstransportSolution.IceVolume
+-
+-#compute resulting derivative
+-dVdh_an=(V2-V0)/deltaH
+-
+-#evaluate derivative using ADOLC 
+-md=md2
+-md.autodiff.isautodiff=True
+-md.geometry.thickness[index]=h1
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=SetIceShelfBC(md)
+-
+-md=solve(md,MasstransportSolutionEnum())
+-#retrieve directly
+-dVdh_ad=md.results.MasstransportSolution.AutodiffJacobian
+-
+-print "dV/dh: analytical:  #16.16g\n       using adolc:  #16.16g\n" % (dVdh_an,dVdh_ad)
+-
+-#Fields and tolerances to track changes
+-field_names     =['dV/dh-dV/dh0']
+-field_tolerances=[1e-13]
+-field_values=[dVdh_ad-dVdh_an]
+Index: ../trunk-jpl/test/NightlyRun/test3119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3119.py	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3119.py	(revision 16202)
+@@ -31,17 +31,7 @@
+ #recover jacobian: 
+ jac_reverse=md.results.TransientSolution[0].AutodiffJacobian
+ 
+-#now run vectorial forward mode
+-md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',numpy.arange(0,md.mesh.numberofvertices))]
+-md.autodiff.dependents=[dependent('name','MaxVel','type','scalar')]
+-md.autodiff.driver='fov_forward'
+-
+-md=solve(md,TransientSolutionEnum())
+-
+-#recover jacobian: 
+-jac_forward=md.results.TransientSolution[0].AutodiffJacobian
+-
+ #Fields and tolerances to track changes
+-field_names     =['Jac Forward','Jac Reverse','Jac Forward - Reverse']
+-field_tolerances=[1e-13,1e-13,1e-13]
+-field_values=[jac_forward,jac_reverse,jac_forward-jac_reverse]
++field_names     =['Jac Reverse']
++field_tolerances=[1e-13]
++field_values=[jac_reverse]
+Index: ../trunk-jpl/test/NightlyRun/test3119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3119.m	(revision 16201)
++++ ../trunk-jpl/test/NightlyRun/test3119.m	(revision 16202)
+@@ -1,4 +1,4 @@
+-%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
++%test reverse scalar driver in ADOLC, using the test3009 setup, equivalent to test109 setup.
+ md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+@@ -19,17 +19,7 @@
+ %recover jacobian: 
+ jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+ 
+-%now run vectorial forward mode
+-md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
+-md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
+-md.autodiff.driver='fov_forward';
+-
+-md=solve(md,TransientSolutionEnum());
+-
+-%recover jacobian: 
+-jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
+-
+ %Fields and tolerances to track changes
+-field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
+-field_tolerances={1e-8,1e-8,1e-6};
+-field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
++field_names     ={'Jac Reverse'};
++field_tolerances={1e-8};
++field_values={jac_reverse,};
Index: issm/oecreview/Archive/16133-16554/ISSM-16202-16203.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16202-16203.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16202-16203.diff	(revision 16556)
@@ -0,0 +1,165 @@
+Index: ../trunk-jpl/test/Archives/Archive3103.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3103.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3103.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3103.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3103.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3106.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3106.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3106.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3106.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3106.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3101.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3101.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3101.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3101.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3101.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3109.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3109.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3109.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3109.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3109.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3110.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3110.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3110.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3110.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3110.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3104.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3104.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3104.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3104.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3104.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3107.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3107.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3107.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3107.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3107.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3102.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3102.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3102.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3102.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3102.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3105.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3105.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3105.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3105.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3105.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3119.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3119.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3119.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3119.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3119.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
+Index: ../trunk-jpl/test/Archives/Archive3108.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3108.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3108.nc	(revision 16202)
++++ ../trunk-jpl/test/Archives/Archive3108.nc	(revision 16203)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3108.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16203-16204.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16203-16204.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16203-16204.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi	(revision 16203)
++++ ../trunk-jpl/externalpackages/adjoinablempi	(revision 16204)
+
+Property changes on: ../trunk-jpl/externalpackages/adjoinablempi
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
++*.log
+ install
+ src
Index: issm/oecreview/Archive/16133-16554/ISSM-16204-16205.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16204-16205.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16204-16205.diff	(revision 16556)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/test/Archives/Archive3103.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3106.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3101.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3109.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3110.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3104.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3107.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3102.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3105.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3119.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3108.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16205-16206.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16205-16206.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16205-16206.diff	(revision 16556)
@@ -0,0 +1,368 @@
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ThermalConstraintsReset.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ThermalConstraintsReset.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ThermalConstraintsReset.cpp	(revision 16206)
+@@ -1,29 +0,0 @@
+-/*!\file:  ThermalConstraintsState.cpp
+- * \brief  melting rate constraints
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ResetConstraintsx.h"
+-
+-void  ThermalConstraintsReset(Loads* loads, int configuration_type){
+-
+-	int i;
+-
+-	/*Enforce constraints: */
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if(object->ObjectEnum()==PengridEnum){
+-
+-				Pengrid* pengrid=(Pengrid*)object;
+-				pengrid->ResetConstraint();
+-			}
+-		}
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp	(revision 16206)
+@@ -1,29 +0,0 @@
+-/*!\file:  DamageConstraintsState.cpp
+- * \brief  damage constraints reset
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ResetConstraintsx.h"
+-
+-void  DamageConstraintsReset(Loads* loads, int configuration_type){
+-
+-	int i;
+-
+-	/*Enforce constraints: */
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if(object->ObjectEnum()==PengridEnum){
+-
+-				Pengrid* pengrid=(Pengrid*)object;
+-				pengrid->ResetConstraint();
+-			}
+-		}
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 16206)
+@@ -22,22 +22,21 @@
+ 	int analysis_type;
+ 	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+-	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
+-	 * management routine, otherwise, skip : */
++	/*Deal with rift first*/
+ 	#ifdef _HAVE_RIFTS_
+ 	if(RiftIsPresent(femmodel->loads,analysis_type)){
+ 		_error_("rift constraints reset not supported yet!");
+ 	}
+ 	#endif
+-	#ifdef _HAVE_THERMAL_
+-	if(PengridIsPresent(femmodel->loads,ThermalAnalysisEnum)){
+-		ThermalConstraintsReset(femmodel->loads,analysis_type);
++
++	/*Reset pengrid to inactive mode*/
++	for(int i=0;i<femmodel->loads->Size();i++){
++		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
++		if(load->InAnalysis(analysis_type)){
++			if(load->ObjectEnum()==PengridEnum){
++				Pengrid* pengrid=(Pengrid*)load;
++				pengrid->ResetConstraint();
++			}
++		}
+ 	}
+-	#endif
+-	#ifdef _HAVE_DAMAGE_
+-	if(PengridIsPresent(femmodel->loads,DamageEvolutionAnalysisEnum)){
+-		DamageConstraintsReset(femmodel->loads,analysis_type);
+-	}
+-	#endif
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 16206)
+@@ -8,8 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void ThermalConstraintsReset(Loads* loads, int configuration_type);
+-void DamageConstraintsReset(Loads* loads, int configuration_type);
+ void ResetConstraintsx(FemModel* femmodel);
+ 
+ #endif  /* _RESETCONSTRAINTSX_H */
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp	(revision 16206)
+@@ -1,35 +0,0 @@
+-/*!\file:  ThermalIsPresent.cpp
+- * \brief
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ConstraintsStateLocal.h"
+-
+-int PengridIsPresent(Loads* loads,int configuration_type){
+-
+-	int i;
+-	int found=0;
+-	int mpi_found=0;
+-
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if (object->ObjectEnum()==PengridEnum){
+-				found=1;
+-				break;
+-			}
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	found=mpi_found;
+-
+-	return found;
+-}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 16206)
+@@ -1,49 +0,0 @@
+-/*!\file:  ThermalConstraintsState.cpp
+- * \brief  melting rate constraints
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ConstraintsStateLocal.h"
+-
+-void  ThermalConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int configuration_type){
+-
+-	int i;
+-
+-	int unstable=0;
+-	int num_unstable_constraints=0;
+-	int converged=0;
+-	int sum_num_unstable_constraints=0;
+-
+-	num_unstable_constraints=0;	
+-
+-	/*Enforce constraints: */
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if(object->ObjectEnum()==PengridEnum){
+-
+-				Pengrid* pengrid=(Pengrid*)object;
+-				pengrid->ConstraintActivate(&unstable);
+-				num_unstable_constraints+=unstable;
+-			}
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	num_unstable_constraints=sum_num_unstable_constraints;
+-
+-	/*Have we converged? : */
+-	if (num_unstable_constraints==0) converged=1;
+-	else converged=0;
+-
+-	/*Assign output pointers: */
+-	*pconverged=converged;
+-	*pnum_unstable_constraints=num_unstable_constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp	(revision 16206)
+@@ -1,52 +0,0 @@
+-/*!\file:  DamageConstraintsState.cpp
+- * \brief  melting rate constraints
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./ConstraintsStateLocal.h"
+-
+-void  DamageConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int configuration_type){
+-
+-	int i;
+-
+-	int unstable=0;
+-	int num_unstable_constraints=0;
+-	int converged=0;
+-	int sum_num_unstable_constraints=0;
+-
+-	num_unstable_constraints=0;	
+-
+-
+-	/*Enforce constraints: */
+-	for(i=0;i<loads->Size();i++){
+-		Object* object=(Object*)loads->GetObjectByOffset(i);
+-		Load* load=(Load*)object;
+-		if(load->InAnalysis(configuration_type)){
+-			if(object->ObjectEnum()==PengridEnum){
+-
+-				Pengrid* pengrid=(Pengrid*)object;
+-
+-				pengrid->ConstraintActivate(&unstable);
+-				num_unstable_constraints+=unstable;
+-			}
+-		}
+-	}
+-
+-
+-	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	num_unstable_constraints=sum_num_unstable_constraints;
+-
+-	/*Have we converged? : */
+-	if (num_unstable_constraints==0) converged=1;
+-	else converged=0;
+-
+-	/*Assign output pointers: */
+-	*pconverged=converged;
+-	*pnum_unstable_constraints=num_unstable_constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 16206)
+@@ -8,7 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-int  PengridIsPresent(Loads* loads,int analysis_type);
+ int  RiftIsPresent(Loads* loads,int analysis_type);
+ void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel);
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16205)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16206)
+@@ -14,26 +14,18 @@
+ 
+ #include "../../classes/classes.h"
+ 
+-/*melting: */
+-void  ThermalConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int analysis_type);
+-
+-/*damage: */
+-#ifdef _HAVE_DAMAGE_
+-void  DamageConstraintsState(Loads* loads, int* pconverged, int* pnum_unstable_constraints,int analysis_type);
+-#endif
+-
+ /*rifts module: */
+-void   RiftConstraintsState(int* pconverged, int* pnum_unstable_constraints,Loads* loads,int min_mechanical_constraints,int analysis_type);
+-void   RiftConstrain(int* pnum_unstable_constraints,Loads* loads,int analysis_type);
+-int    RiftIsFrozen(Loads* loads,int analysis_type);
+-void   RiftFreezeConstraints(Loads* loads,int analysis_type);
++void RiftConstraintsState(int* pconverged, int* pnum_unstable_constraints,Loads* loads,int min_mechanical_constraints,int analysis_type);
++void RiftConstrain(int* pnum_unstable_constraints,Loads* loads,int analysis_type);
++int  RiftIsFrozen(Loads* loads,int analysis_type);
++void RiftFreezeConstraints(Loads* loads,int analysis_type);
+ 
+ /*rifts, trial and errors: */
+-int    RiftIsPreStable(Loads* loads);
+-void   RiftSetPreStable(Loads* loads);
+-void   RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads);
+-void   RiftMaxPenetrationInInputs(Loads* loads);
+-int    RiftPotentialUnstableConstraints(Loads* loads);
+-int    RiftIsMaterialStable(Loads* loads);
++int  RiftIsPreStable(Loads* loads);
++void RiftSetPreStable(Loads* loads);
++void RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads);
++void RiftMaxPenetrationInInputs(Loads* loads);
++int  RiftPotentialUnstableConstraints(Loads* loads);
++int  RiftIsMaterialStable(Loads* loads);
+ 
+ #endif  /* _CONSTRAINTSSTATEX_H */
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16205)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16206)
+@@ -258,7 +258,6 @@
+ 					./modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\
+ 					./modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp\
+ 					./modules/ModelProcessorx/CreateNodes.cpp\
+-					./modules/ConstraintsStatex/PengridIsPresent.cpp\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.h\
+ 					./modules/ParseToolkitsOptionsx/ParseToolkitsOptionsx.cpp\
+ 					./modules/NodesDofx/NodesDofx.h\
+@@ -408,8 +407,6 @@
+ 					   ./modules/ModelProcessorx/Melting/CreateNodesMelting.cpp\
+ 					   ./modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp\
+ 					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
+-					   ./modules/ConstraintsStatex/ThermalConstraintsState.cpp\
+-					   ./modules/ResetConstraintsx/ThermalConstraintsReset.cpp \
+ 					   ./analyses/thermal_core.cpp\
+ 					   ./analyses/enthalpy_core.cpp\
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
+@@ -550,8 +547,6 @@
+ 					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+ 					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+ 					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
+-					./modules/ConstraintsStatex/DamageConstraintsState.cpp\
+-					./modules/ResetConstraintsx/DamageConstraintsReset.cpp \
+ 					./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
+ 					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
+ 					./solutionsequences/solutionsequence_damage_nonlinear.cpp
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16205)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16206)
+@@ -813,8 +813,8 @@
+ 
+ /*FUNCTION Pengrid::ResetConstraint {{{*/
+ void  Pengrid::ResetConstraint(void){
+-	active=0;
+-	zigzag_counter=0;
++	active         = 0;
++	zigzag_counter = 0;
+ }
+ /*}}}*/
+ /*FUNCTION Pengrid::UpdateInputs {{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16206-16207.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16206-16207.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16206-16207.diff	(revision 16556)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16206)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 16207)
+@@ -121,6 +121,7 @@
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.mask.ice_levelset[pos]=0
+ md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.damage.spcdamage=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.masstransport.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ md.stressbalance.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ md.stressbalance.loadingforce=0*numpy.ones((md.mesh.numberofvertices,3))
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 16206)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 16207)
+@@ -111,6 +111,7 @@
+ 
+ md.mask.ice_levelset(find(md.mesh.vertexonboundary))=0;
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
+ md.masstransport.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+ md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
Index: issm/oecreview/Archive/16133-16554/ISSM-16207-16208.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16207-16208.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16207-16208.diff	(revision 16556)
@@ -0,0 +1,459 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16207)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16208)
+@@ -66,7 +66,7 @@
+ 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
+ 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
+-		virtual void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
++		virtual void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+ 		virtual void   RequestedOutput(int output_enum,int step,IssmDouble time)=0;
+ 
+ 		virtual int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16207)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16208)
+@@ -23,10 +23,10 @@
+ /*Constructors/destructor/copy*/
+ /*FUNCTION Tria::Tria(){{{*/
+ Tria::Tria(){
+-	this->nodes    = NULL;
+-	this->vertices = NULL;
+-	this->material = NULL;
+-	this->matpar   = NULL;
++	this->nodes      = NULL;
++	this->vertices   = NULL;
++	this->material   = NULL;
++	this->matpar     = NULL;
+ 	this->inputs     = NULL;
+ 	this->parameters = NULL;
+ 	this->results    = NULL;
+@@ -35,15 +35,14 @@
+ /*}}}*/
+ /*FUNCTION Tria::Tria(int id, int sid,int index, IoModel* iomodel,int nummodels){{{*/
+ Tria::Tria(int tria_id, int tria_sid, int index, IoModel* iomodel,int nummodels)
+-	:TriaRef(nummodels)
+-	,ElementHook(nummodels,index+1,3,iomodel){
++	:TriaRef(nummodels),ElementHook(nummodels,index+1,3,iomodel){
+ 
+ 		/*id: */
+-		this->id=tria_id;
+-		this->sid=tria_sid;
++		this->id  = tria_id;
++		this->sid = tria_sid;
+ 
+ 		//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+-		this->parameters=NULL;
++		this->parameters = NULL;
+ 
+ 		/*intialize inputs and results: */
+ 		this->inputs  = new Inputs();
+@@ -80,13 +79,13 @@
+ 	tria->numanalyses=this->numanalyses;
+ 	tria->hnodes=new Hook*[tria->numanalyses];
+ 	for(i=0;i<tria->numanalyses;i++)tria->hnodes[i]=(Hook*)this->hnodes[i]->copy();
+-	tria->hvertices=(Hook*)this->hvertices->copy();
+-	tria->hmaterial=(Hook*)this->hmaterial->copy();
+-	tria->hmatpar=(Hook*)this->hmatpar->copy();
++	tria->hvertices = (Hook*)this->hvertices->copy();
++	tria->hmaterial = (Hook*)this->hmaterial->copy();
++	tria->hmatpar   = (Hook*)this->hmatpar->copy();
+ 
+ 	/*deal with Tria fields: */
+-	tria->id=this->id;
+-	tria->sid=this->sid;
++	tria->id  = this->id;
++	tria->sid = this->sid;
+ 	if(this->inputs){
+ 		tria->inputs=(Inputs*)this->inputs->Copy();
+ 	}
+@@ -103,12 +102,13 @@
+ 	tria->parameters=this->parameters;
+ 
+ 	/*recover objects: */
+-	tria->nodes=xNew<Node*>(3); //we cannot rely on an analysis_counter to tell us which analysis_type we are running, so we just copy the nodes.
++	tria->nodes = xNew<Node*>(3); //we cannot rely on an analysis_counter to tell us which analysis_type we are running, so we just copy the nodes.
+ 	for(i=0;i<3;i++)tria->nodes[i]=this->nodes[i];
+-	tria->vertices=(Vertex**)tria->hvertices->deliverp();
+-	tria->material=(Material*)tria->hmaterial->delivers();
+-	tria->matpar=(Matpar*)tria->hmatpar->delivers();
+ 
++	tria->vertices = (Vertex**)tria->hvertices->deliverp();
++	tria->material = (Material*)tria->hmaterial->delivers();
++	tria->matpar   = (Matpar*)tria->hmatpar->delivers();
++
+ 	return tria;
+ }
+ /*}}}*/
+@@ -1866,8 +1866,8 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+-void Tria::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
++/*FUNCTION Tria::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
++void Tria::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){
+ 
+ 	/*Intermediaries*/
+ 	int    i,t;
+@@ -1883,7 +1883,7 @@
+ 		/*Recover vertices ids needed to initialize inputs*/
+ 		for(i=0;i<3;i++){ 
+ 			_assert_(iomodel->elements);
+-			tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
++			tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*this->sid+i]); //ids for vertices are in the elements array from Matlab
+ 		}
+ 
+ 		/*Are we in transient or static? */
+@@ -1922,13 +1922,13 @@
+ 			/*static mode: create an input out of the element value: */
+ 
+ 			if (code==5){ //boolean
+-				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[index])));
++				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[this->sid])));
+ 			}
+ 			else if (code==6){ //integer
+-				this->inputs->AddInput(new IntInput(vector_enum,reCast<int>(vector[index])));
++				this->inputs->AddInput(new IntInput(vector_enum,reCast<int>(vector[this->sid])));
+ 			}
+ 			else if (code==7){ //IssmDouble
+-				this->inputs->AddInput(new DoubleInput(vector_enum,vector[index]));
++				this->inputs->AddInput(new DoubleInput(vector_enum,vector[this->sid]));
+ 			}
+ 			else _error_("could not recognize nature of vector from code " << code);
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16207)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16208)
+@@ -90,7 +90,7 @@
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+ 		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
+ 		void        InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+-		void        InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
++		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void        InputDuplicate(int original_enum,int new_enum);
+ 		void        InputScale(int enum_type,IssmDouble scale_factor);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16207)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16208)
+@@ -1873,8 +1873,8 @@
+ 	input->ArtificialNoise(min,max);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+-void Penta::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
++/*FUNCTION Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
++void Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){
+ 
+ 	/*Intermediaries*/
+ 	int             i,t;
+@@ -1890,7 +1890,7 @@
+ 		/*Recover vertices ids needed to initialize inputs*/
+ 		for(i=0;i<6;i++){ 
+ 			_assert_(iomodel->elements);
+-			penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
++			penta_vertex_ids[i]=iomodel->elements[6*this->sid+i]; //ids for vertices are in the elements array from Matlab
+ 		}
+ 
+ 		/*Are we in transient or static? */
+@@ -1929,13 +1929,13 @@
+ 			/*static mode: create an input out of the element value: */
+ 
+ 			if (code==5){ //boolean
+-				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool,IssmDouble>(vector[index])));
++				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool,IssmDouble>(vector[this->sid])));
+ 			}
+ 			else if (code==6){ //integer
+-				this->inputs->AddInput(new IntInput(vector_enum,reCast<int,IssmDouble>(vector[index])));
++				this->inputs->AddInput(new IntInput(vector_enum,reCast<int,IssmDouble>(vector[this->sid])));
+ 			}
+ 			else if (code==7){ //IssmDouble
+-				this->inputs->AddInput(new DoubleInput(vector_enum,vector[index]));
++				this->inputs->AddInput(new DoubleInput(vector_enum,vector[this->sid]));
+ 			}
+ 			else _error_("could not recognize nature of vector from code " << code);
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16207)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16208)
+@@ -93,7 +93,7 @@
+ 
+ 		int    Sid();
+ 		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+-		void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
++		void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void   InputDuplicate(int original_enum,int new_enum);
+ 		void   InputScale(int enum_type,IssmDouble scale_factor);
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16207)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16208)
+@@ -77,7 +77,7 @@
+ 		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+ 		void        FetchData(Option **poption,int data_enum);
+ 		void        FetchData(int num,...);
+-		void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,IssmDouble default_value=0.);
++		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value=0.);
+ 		void        LastIndex(int *pindex);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+ 		void        DeclareIndependents(void);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16207)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16208)
+@@ -530,7 +530,7 @@
+ 	} //}}}
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{*/
++/*FUNCTION IoModel::FetchData(bool*         pbool,int data_enum){{{*/
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+ 	int my_rank;
+@@ -559,7 +559,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchData(int*      pinteger,int data_enum){{{*/
++/*FUNCTION IoModel::FetchData(int*          pinteger,int data_enum){{{*/
+ void  IoModel::FetchData(int* pinteger,int data_enum){
+ 
+ 	int my_rank;
+@@ -615,7 +615,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{*/
++/*FUNCTION IoModel::FetchData(char**        pstring,int data_enum){{{*/
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+ 	int my_rank;
+@@ -662,7 +662,7 @@
+ 	*pstring=string;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchData(int**     pintegerematrix,int* pM,int* pN,int data_enum){{{*/
++/*FUNCTION IoModel::FetchData(int**         pintegerematrix,int* pM,int* pN,int data_enum){{{*/
+ void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
+ 
+ 	int my_rank;
+@@ -791,7 +791,7 @@
+ 	if (pN)*pN=N;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchData(char***   pstrings,int* pnumstrings,int data_enum){{{*/
++/*FUNCTION IoModel::FetchData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+ 	int my_rank;
+@@ -1032,15 +1032,11 @@
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::FetchDataToInput{{{*/
+-void IoModel::FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum,IssmDouble default_value){
++void IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){
+ 
+ 	/*intermediary: */
+ 	int     i;
+-	bool    defaulting    = false;
+-	int     code          = 0;
+-	int     vector_layout = 0;
+-	int     counter;
+-	int     numberofelements;
++	int     code,vector_layout;
+ 
+ 	/*variables being fetched: */
+ 	bool        boolean;
+@@ -1050,156 +1046,64 @@
+ 	IssmDouble *doublearray = NULL;
+ 	int         M,N;
+ 
+-	/*Fetch parameters: */
+-	this->constants->FindParam(&numberofelements,MeshNumberofelementsEnum);
+-
+ 	/*First of, find the record for the enum, and get code  of data type: */
+ 	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
+ 
+ 	switch(code){
+-		case 1: //boolean constant.  {{{
++		case 1: //boolean constant
+ 			this->FetchData(&boolean,vector_enum);
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputUpdateFromConstant(boolean,vector_enum);
+ 			}
+-			break; /*}}}*/
+-		case 2: //integer constant.  {{{
++			break;
++		case 2: //integer constant
+ 			this->FetchData(&integer,vector_enum);
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputUpdateFromConstant(integer,vector_enum);
+ 			}
+-			break; /*}}}*/
+-		case 3: //IssmDouble constant.  {{{
++			break;
++		case 3: //IssmDouble constant
+ 			this->FetchData(&scalar,vector_enum);
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputUpdateFromConstant(scalar,vector_enum);
+ 			}
+-			break; /*}}}*/
+-		case 5: //boolean vector.  {{{
+-
+-			/*Fetch vector:*/
++			break; 
++		case 5: //boolean vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+-			/*Check we got something, otherwise fetch default: */
+-			if(doublearray){
+-				defaulting=false;  //we are not defaulting, because  we do have a vector
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				if(!doublearray) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
++				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++				element->InputUpdateFromConstant(boolean,vector_enum);
+ 			}
+-			else{
+-				/*do we have a default enum to go fetch? */
+-				if(default_vector_enum!=NoneEnum){
+-					/*yes. fetch it: */
+-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
+-					if(doublearray){
+-						defaulting=false;  //we are not defaulting, because  we do have a vector
+-					}
+-					else{
+-						/*even the default vector is non existent. we are defaulting to the default value: */
+-						defaulting=true;
+-					}
+-				}
+-				else{
+-					/*we are left with the default value: */
+-					defaulting=true;
+-				}
+-			}
+-
+-			/*Create inputs:*/
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
+-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-					counter++;
+-				}
+-			}
+-			break; /*}}}*/
+-		case 6: //int vector{{{
+-
+-			/*Fetch vector:*/
++			break;
++		case 6: //int vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+-			/*Check we got something, otherwise fetch default: */
+-			if(doublearray){
+-				defaulting=false;  //we are not defaulting, because  we do have a vector
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				if(!doublearray) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
++				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++				element->InputUpdateFromConstant(boolean,vector_enum);
+ 			}
+-			else{
+-				/*do we have a default enum to go fetch? */
+-				if(default_vector_enum!=NoneEnum){
+-					/*yes. fetch it: */
+-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
+-					if(doublearray){
+-						defaulting=false;  //we are not defaulting, because  we do have a vector
+-					}
+-					else{
+-						/*even the default vector is non existent. we are defaulting to the default value: */
+-						defaulting=true;
+-					}
+-				}
+-				else{
+-					/*we are left with the default value: */
+-					defaulting=true;
+-				}
+-			}
+-
+-			/*Create inputs:*/
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
+-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-					counter++;
+-				}
+-			}
+-			break; /*}}}*/
+-		case 7: //IssmDouble vector{{{
+-
+-			/*Fetch vector:*/
++			break;
++		case 7: //IssmDouble vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum);
+-			/*Check we got something, otherwise fetch default: */
+-			if(doublearray){
+-				defaulting=false;  //we are not defaulting, because  we do have a vector
++			for(i=0;i<elements->Size();i++){
++				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++				if(!doublearray) element->InputUpdateFromConstant(default_value,vector_enum); 
++				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++				element->InputUpdateFromConstant(boolean,vector_enum);
+ 			}
+-			else{
+-				/*do we have a default enum to go fetch? */
+-				if(default_vector_enum!=NoneEnum){
+-					/*yes. fetch it: */
+-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
+-					if(doublearray){
+-						defaulting=false;  //we are not defaulting, because  we do have a vector
+-					}
+-					else{
+-						/*even the default vector is non existent. we are defaulting to the default value: */
+-						defaulting=true;
+-					}
+-				}
+-				else{
+-					/*we are left with the default value: */
+-					defaulting=true;
+-				}
+-			}
+-
+-			/*Create inputs:*/
+-			counter=0;
+-			for (i=0;i<numberofelements;i++){
+-				if(this->my_elements[i]){
+-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+-					if(defaulting) element->InputUpdateFromConstant(default_value,vector_enum); 
+-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-					counter++;
+-				}
+-			}
+-
+-			break; /*}}}*/
+-		default: /*{{{*/
++			break;
++		default:
+ 			_error_("data code " << code << " not supported yet!");
+ 			break;
+-			/*}}}*/
+ 	}
+ 	/*Free ressources. Pay attention to not freeing an AD mode independent variable though!:*/
+-	if (!this->independents[vector_enum] && !this->independents[default_vector_enum]) xDelete<IssmDouble>(doublearray);
++	if (!this->independents[vector_enum]) xDelete<IssmDouble>(doublearray);
+ 	xDelete<char>(string);
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16208-16209.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16208-16209.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16208-16209.diff	(revision 16556)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16208)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16209)
+@@ -77,7 +77,8 @@
+ 		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+ 		void        FetchData(Option **poption,int data_enum);
+ 		void        FetchData(int num,...);
+-		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value=0.);
++		void        FetchDataToInput(Elements* elements,int vector_enum);
++		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value);
+ 		void        LastIndex(int *pindex);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+ 		void        DeclareIndependents(void);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16208)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16209)
+@@ -1031,10 +1031,36 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchDataToInput{{{*/
++/*FUNCTION IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){{{*/
+ void IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){
+ 
+ 	/*intermediary: */
++	int         code,vector_layout;
++	IssmDouble *doublearray = NULL;
++	int         M,N;
++
++	/*First of, find the record for the enum, and get code  of data type: */
++	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
++
++	/*Defaulting only supported for double arrays*/
++	if(code!=7) _error_(EnumToStringx(vector_enum)<<" is not a double array");
++
++	this->FetchData(&doublearray,&M,&N,vector_enum);
++
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		if(!doublearray) element->InputUpdateFromConstant(default_value,vector_enum); 
++		else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
++	}
++
++	/*Free ressources. Pay attention to not freeing an AD mode independent variable though!:*/
++	if(!this->independents[vector_enum]) xDelete<IssmDouble>(doublearray);
++}
++/*}}}*/
++/*FUNCTION IoModel::FetchDataToInput(Elements* elements,int vector_enum){{{*/
++void IoModel::FetchDataToInput(Elements* elements,int vector_enum){
++
++	/*intermediary: */
+ 	int     i;
+ 	int     code,vector_layout;
+ 
+@@ -1073,29 +1099,26 @@
+ 			break; 
+ 		case 5: //boolean vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-				if(!doublearray) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
+-				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-				element->InputUpdateFromConstant(boolean,vector_enum);
++				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 			}
+ 			break;
+ 		case 6: //int vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-				if(!doublearray) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
+-				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-				element->InputUpdateFromConstant(boolean,vector_enum);
++				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 			}
+ 			break;
+ 		case 7: //IssmDouble vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum);
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-				if(!doublearray) element->InputUpdateFromConstant(default_value,vector_enum); 
+-				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+-				element->InputUpdateFromConstant(boolean,vector_enum);
++				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 			}
+ 			break;
+ 		default:
Index: issm/oecreview/Archive/16133-16554/ISSM-16209-16210.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16209-16210.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16209-16210.diff	(revision 16556)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16209)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16210)
+@@ -22,6 +22,7 @@
+ void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
++void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
+ void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+ 
+ /*Creation of fem datasets: specialised drivers: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16209)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16210)
+@@ -24,7 +24,6 @@
+ 	}
+ 
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 16209)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 16210)
+@@ -30,7 +30,6 @@
+ 	}
+ 
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16209)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16210)
+@@ -86,7 +86,6 @@
+ 
+ 	/*Create inputs: */
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16209)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16210)
+@@ -367,6 +367,7 @@
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp\
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.h\
+ 					  ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp\
++					  ./modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp\
+ 					  ./analyses/dakota_core.cpp\
+ 					  ./analyses/DakotaSpawnCore.h\
+ 					  ./analyses/DakotaSpawnCore.cpp
Index: issm/oecreview/Archive/16133-16554/ISSM-16210-16211.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16210-16211.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16210-16211.diff	(revision 16556)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16210)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16211)
+@@ -42,11 +42,10 @@
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,BathymetryEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16210)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16211)
+@@ -30,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 16210)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 16211)
+@@ -9,4 +9,11 @@
+ #include "../ModelProcessorx.h"
+ 
+ void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	bool isgroundingline;
++	parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
++
++	if(isgroundingline){
++		iomodel->FetchDataToInput(elements,BathymetryEnum);
++	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16210)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16211)
+@@ -29,7 +29,7 @@
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 16211)
+@@ -0,0 +1,20 @@
++/*
++ * UpdateElementsAndMaterialsControl:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel){
++
++	/*recover parameters: */
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++
++	if(dakota_analysis){
++		iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16210)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16211)
+@@ -2715,6 +2715,7 @@
+ 				name==ThicknessEnum ||
+ 				name==SurfaceEnum ||
+ 				name==BedEnum ||
++				name==BathymetryEnum ||
+ 				name==SurfaceSlopeXEnum ||
+ 				name==SurfaceSlopeYEnum ||
+ 				name==SurfaceforcingsMassBalanceEnum ||
Index: issm/oecreview/Archive/16133-16554/ISSM-16211-16212.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16211-16212.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16211-16212.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16211)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16212)
+@@ -26,9 +26,9 @@
+ 	if (!control_analysis) return;
+ 
+ 	/*Fetch data needed: */
+-	iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+-	iomodel->FetchDataToInput(elements,InversionVyObsEnum); 
+-	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
++	iomodel->FetchDataToInput(elements,InversionVxObsEnum,0.);
++	iomodel->FetchDataToInput(elements,InversionVyObsEnum,0.); 
++	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.);
+ 
+ 	iomodel->FetchData(4,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 	for(i=0;i<num_control_type;i++){
Index: issm/oecreview/Archive/16133-16554/ISSM-16212-16213.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16212-16213.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16212-16213.diff	(revision 16556)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16212)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16213)
+@@ -1099,7 +1099,7 @@
+ 			break; 
+ 		case 5: //boolean vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+@@ -1107,7 +1107,7 @@
+ 			break;
+ 		case 6: //int vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
+-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+@@ -1115,7 +1115,7 @@
+ 			break;
+ 		case 7: //IssmDouble vector
+ 			this->FetchData(&doublearray,&M,&N,vector_enum);
+-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in bindary file");
++			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+ 			for(i=0;i<elements->Size();i++){
+ 				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
Index: issm/oecreview/Archive/16133-16554/ISSM-16213-16214.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16213-16214.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16213-16214.diff	(revision 16556)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16213)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16214)
+@@ -29,7 +29,7 @@
+ 	}
+ 
+ 	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
+-	solutionsequence_damage_nonlinear(femmodel);
++	solutionsequence_linear(femmodel);
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16213)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16214)
+@@ -737,7 +737,9 @@
+ 	parameters->FindParam(&penalty_lock,DamagePenaltyLockEnum);
+ 	parameters->FindParam(&max_damage,DamageMaxDamageEnum);
+ 	
+-	//Figure out if damage is over max_damage, in which case, this penalty needs to be activated.
++	//Figure out if damage>max_damage, in which case, this penalty needs to be activated.
++	//Would need to do the same for damage<0 if penalties are used.  For now, ConstraintStatex 
++	//is not called in solutionsequence_damage_nonlinear, so no penalties are applied.
+ 
+ 	if (damage>max_damage){
+ 		new_active=1;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16213)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16214)
+@@ -7125,16 +7125,23 @@
+ 
+ 	int         i;
+ 	IssmDouble  values[numdof];
+-	int        *doflist = NULL;
++	IssmDouble  max_damage;
++	int			*doflist = NULL;
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
++	/*Get user-supplied max_damage: */
++	this->parameters->FindParam(&max_damage,DamageMaxDamageEnum);
++
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++){
+ 		values[i]=solution[doflist[i]];
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
++		/*Enforce D < max_damage and D > 0 */
++		if(values[i]>max_damage) values[i]=max_damage;
++		else if(values[i]<0) values[i]=0;
+ 	}
+ 
+ 	/*Get all inputs and parameters*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16214-16215.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16214-16215.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16214-16215.diff	(revision 16556)
@@ -0,0 +1,309 @@
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16215)
+@@ -22,6 +22,12 @@
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	if(dakota_analysis && solution_type!=TransientSolutionEnum){
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzMeshEnum,VzMeshEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuTemperatureEnum,TemperatureEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+ 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+ 		ResetConstraintsx(femmodel);
+ 	}
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16215)
+@@ -58,13 +58,19 @@
+ 
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+ 	if(dakota_analysis){
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
++		if(isstressbalance){
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++		}
++		if(ismasstransport | isgroundingline){
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
++			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
++		}
++		if(isgroundingline) InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
+ 		if(dim==2)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+ 		if(isthermal && dim==3){
+ 			//Update Vertex Position after updating Thickness and Bed
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16215)
+@@ -13,7 +13,7 @@
+ 
+ 	/*parameters: */
+ 	bool  save_results;
+-	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface;
++	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
+ 	int   solution_type;
+ 	int  *requested_outputs = NULL;
+ 	int   numoutputs        = 0;
+@@ -28,10 +28,18 @@
+ 	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+ 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+ 
++	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
++	if(dakota_analysis && solution_type==MasstransportSolutionEnum){
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
++		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
++	}
++
+ 	if(issmbgradients){
+ 	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
+ 	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16214)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16215)
+@@ -142,6 +142,7 @@
+ 	InversionVyObsEnum,
+ 	InversionVzObsEnum,
+ 	MaskIceLevelsetEnum,
++	QmuMaskIceLevelsetEnum,
+ 	MaterialsBetaEnum,
+ 	MaterialsHeatcapacityEnum,
+ 	MaterialsLatentheatEnum,
+@@ -576,6 +577,7 @@
+ 	SubelementMigrationEnum,
+ 	SubelementMigration2Enum,
+ 	MaskGroundediceLevelsetEnum,
++	QmuMaskGroundediceLevelsetEnum,
+ 	/*}}}*/
+ 	/*Solver{{{*/
+ 	FSSolverEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16215)
+@@ -150,6 +150,7 @@
+ 		case InversionVyObsEnum : return "InversionVyObs";
+ 		case InversionVzObsEnum : return "InversionVzObs";
+ 		case MaskIceLevelsetEnum : return "MaskIceLevelset";
++		case QmuMaskIceLevelsetEnum : return "QmuMaskIceLevelset";
+ 		case MaterialsBetaEnum : return "MaterialsBeta";
+ 		case MaterialsHeatcapacityEnum : return "MaterialsHeatcapacity";
+ 		case MaterialsLatentheatEnum : return "MaterialsLatentheat";
+@@ -560,6 +561,7 @@
+ 		case SubelementMigrationEnum : return "SubelementMigration";
+ 		case SubelementMigration2Enum : return "SubelementMigration2";
+ 		case MaskGroundediceLevelsetEnum : return "MaskGroundediceLevelset";
++		case QmuMaskGroundediceLevelsetEnum : return "QmuMaskGroundediceLevelset";
+ 		case FSSolverEnum : return "FSSolver";
+ 		case AdjointEnum : return "Adjoint";
+ 		case ColinearEnum : return "Colinear";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16215)
+@@ -153,6 +153,7 @@
+ 	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+ 	      else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum;
++	      else if (strcmp(name,"QmuMaskIceLevelset")==0) return QmuMaskIceLevelsetEnum;
+ 	      else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
+ 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
+ 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
+@@ -258,11 +259,11 @@
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+-	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
++	      if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+@@ -381,11 +382,11 @@
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+-	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
++	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"IceFrontType")==0) return IceFrontTypeEnum;
+ 	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
+ 	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+@@ -504,11 +505,11 @@
+ 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+ 	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+ 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
+-	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
++	      if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
++	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+ 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+@@ -572,6 +573,7 @@
+ 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
+ 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
+ 	      else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
++	      else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;
+ 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
+ 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
+ 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16215)
+@@ -15,6 +15,7 @@
+ 	bool   issmbgradients;
+ 	bool   ispdd;
+ 	bool   isdelta18o;
++	bool   isgroundingline;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+@@ -22,6 +23,7 @@
+ 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+ 	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+ 	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+ 
+ 	/*Finite element type*/
+ 	finiteelement = P1Enum;
+@@ -57,28 +59,21 @@
+ 		elements->InputDuplicate(BedEnum,QmuBedEnum);
+ 		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
+ 		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
+-		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+-		elements->InputDuplicate(VxEnum,QmuVxEnum);
+-		elements->InputDuplicate(VyEnum,QmuVyEnum);
++		elements->InputDuplicate(MaskIceLevelsetEnum,QmuMaskIceLevelsetEnum);
++		if(isgroundingline) elements->InputDuplicate(MaskGroundediceLevelsetEnum,QmuMaskGroundediceLevelsetEnum);
+ 	}
+ 
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,PressureEnum);
+ 		iomodel->FetchDataToInput(elements,TemperatureEnum);
+ 		iomodel->FetchDataToInput(elements,VzEnum);
+-		if(dakota_analysis){
+-			elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+-			elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+-			elements->InputDuplicate(VzEnum,QmuVzEnum);
+-		}
+ 	}
+ 	if(issmbgradients){
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
+-	        iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
+ 	}
+ 	if(ispdd){
+ 		iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16215)
+@@ -100,6 +100,8 @@
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	iomodel->FetchDataToInput(elements,DamageDEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
++	if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16215)
+@@ -47,7 +47,6 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	if(dakota_analysis){
+ 		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+-		elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16215)
+@@ -1981,6 +1981,8 @@
+ 				name==QmuSurfaceEnum ||
+ 				name==QmuTemperatureEnum ||
+ 				name==QmuMeltingEnum || 
++				name==QmuMaskGroundediceLevelsetEnum ||
++				name==QmuMaskIceLevelsetEnum ||
+ 				name==GiaWEnum || 
+ 				name==GiadWdtEnum
+ 		){
+@@ -2499,17 +2501,17 @@
+ 			if(!iomodel->Data(VxEnum)){
+ 				for(i=0;i<3;i++)nodeinputs[i]=0;
+ 				this->inputs->AddInput(new TriaInput(VxEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new TriaInput(QmuVxEnum,nodeinputs,P1Enum));
++				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVxEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(VyEnum)){
+ 				for(i=0;i<3;i++)nodeinputs[i]=0;
+ 				this->inputs->AddInput(new TriaInput(VyEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new TriaInput(QmuVyEnum,nodeinputs,P1Enum));
++				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVyEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(VzEnum)){
+ 				for(i=0;i<3;i++)nodeinputs[i]=0;
+ 				this->inputs->AddInput(new TriaInput(VzEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new TriaInput(QmuVzEnum,nodeinputs,P1Enum));
++				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVzEnum,nodeinputs,P1Enum));
+ 			}
+ 			if(!iomodel->Data(PressureEnum)){
+ 				for(i=0;i<3;i++)nodeinputs[i]=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16214)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16215)
+@@ -2754,6 +2754,8 @@
+ 				name==QmuSurfaceEnum ||
+ 				name==QmuTemperatureEnum ||
+ 				name==QmuMeltingEnum ||
++				name==QmuMaskGroundediceLevelsetEnum ||
++				name==QmuMaskIceLevelsetEnum ||
+ 				name==GiaWEnum || 
+ 				name==GiadWdtEnum ||
+ 				name==SedimentHeadEnum ||
Index: issm/oecreview/Archive/16133-16554/ISSM-16215-16216.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16215-16216.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16215-16216.diff	(revision 16556)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/m/enum/QmuMaskGroundediceLevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMaskGroundediceLevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuMaskGroundediceLevelsetEnum.m	(revision 16216)
+@@ -0,0 +1,11 @@
++function macro=QmuMaskGroundediceLevelsetEnum()
++%QMUMASKGROUNDEDICELEVELSETENUM - Enum of QmuMaskGroundediceLevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuMaskGroundediceLevelsetEnum()
++
++macro=StringToEnum('QmuMaskGroundediceLevelset');
+Index: ../trunk-jpl/src/m/enum/QmuMaskIceLevelsetEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMaskIceLevelsetEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuMaskIceLevelsetEnum.m	(revision 16216)
+@@ -0,0 +1,11 @@
++function macro=QmuMaskIceLevelsetEnum()
++%QMUMASKICELEVELSETENUM - Enum of QmuMaskIceLevelset
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuMaskIceLevelsetEnum()
++
++macro=StringToEnum('QmuMaskIceLevelset');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16215)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16216)
+@@ -142,6 +142,7 @@
+ def InversionVyObsEnum(): return StringToEnum("InversionVyObs")[0]
+ def InversionVzObsEnum(): return StringToEnum("InversionVzObs")[0]
+ def MaskIceLevelsetEnum(): return StringToEnum("MaskIceLevelset")[0]
++def QmuMaskIceLevelsetEnum(): return StringToEnum("QmuMaskIceLevelset")[0]
+ def MaterialsBetaEnum(): return StringToEnum("MaterialsBeta")[0]
+ def MaterialsHeatcapacityEnum(): return StringToEnum("MaterialsHeatcapacity")[0]
+ def MaterialsLatentheatEnum(): return StringToEnum("MaterialsLatentheat")[0]
+@@ -552,6 +553,7 @@
+ def SubelementMigrationEnum(): return StringToEnum("SubelementMigration")[0]
+ def SubelementMigration2Enum(): return StringToEnum("SubelementMigration2")[0]
+ def MaskGroundediceLevelsetEnum(): return StringToEnum("MaskGroundediceLevelset")[0]
++def QmuMaskGroundediceLevelsetEnum(): return StringToEnum("QmuMaskGroundediceLevelset")[0]
+ def FSSolverEnum(): return StringToEnum("FSSolver")[0]
+ def AdjointEnum(): return StringToEnum("Adjoint")[0]
+ def ColinearEnum(): return StringToEnum("Colinear")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16216-16217.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16216-16217.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16216-16217.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16216)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16217)
+@@ -128,8 +128,8 @@
+ 
+ 	/*First, some checks*/
+ 	if (Kff_M!=Kff_N)_error_("stiffness matrix Kff should be square");
+-	if (uf_M!=Kff_M | uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
+-	if (uf_m!=Kff_m | uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
++	if (uf_M!=Kff_M || uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
++	if (uf_m!=Kff_m || uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
+ 
+ 	/*Initialize matrix */
+ 	/*figure out number of non-zero entries: */
Index: issm/oecreview/Archive/16133-16554/ISSM-16217-16218.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16217-16218.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16217-16218.diff	(revision 16556)
@@ -0,0 +1,548 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16218)
+@@ -20,7 +20,7 @@
+ 
+ 	/*parameters: */
+ 	IssmDouble starttime,finaltime,dt,yts;
+-	bool   isstressbalance,ismasstransport,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
++	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
+ 	bool   save_results,dakota_analysis;
+ 	bool   time_adapt=false;
+ 	int    output_frequency;
+@@ -47,6 +47,7 @@
+ 	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
+ 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+ 	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+@@ -61,10 +62,12 @@
+ 		if(isstressbalance){
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++			if(dim==3){
++				InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
++				if(isFS)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++			}
+ 		}
+-		if(ismasstransport | isgroundingline){
++		if(ismasstransport || isgroundingline){
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
+ 			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16218)
+@@ -41,7 +41,7 @@
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++		if(isFS) InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
+ 	}
+ 
+ 	/*Compute slopes: */
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16218)
+@@ -108,7 +108,7 @@
+ 	/*From a list of elements segments, figure out if el belongs to it: */
+ 	int i;
+ 	for (i=0;i<nriftsegs;i++){
+-		if ((*(riftsegments+4*i+0)==el) | (*(riftsegments+4*i+1)==el)){
++		if ((*(riftsegments+4*i+0)==el) || (*(riftsegments+4*i+1)==el)){
+ 			return 1;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/Scotchx/Scotchx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Scotchx/Scotchx.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/Scotchx/Scotchx.cpp	(revision 16218)
+@@ -259,7 +259,7 @@
+       }
+     }
+   }
+-  if ((flagval & C_FLAGPART) != 0) {              /* If program run as the partitioner            */
++  if ((flagval && C_FLAGPART) != 0) {              /* If program run as the partitioner            */
+     C_fileTab[3].name = C_fileTab[2].name;        /* Put provided file names at their right place */
+     C_fileTab[2].name = C_fileTab[1].name;
+     C_fileTab[1].name = "-";
+@@ -304,19 +304,19 @@
+ 
+   clockStop (&runtime[0]);                        /* Get output time */
+ 
+-  if (flagval & C_FLAGVERBSTR) {
++  if (flagval && C_FLAGVERBSTR) {
+     fprintf (C_filepntrlogout, "S\tStrat=");
+     SCOTCH_stratSave (&stradat, C_filepntrlogout);
+     putc ('\n', C_filepntrlogout);
+   }
+-  if (flagval & C_FLAGVERBTIM) {
++  if (flagval && C_FLAGVERBTIM) {
+     fprintf (C_filepntrlogout, "T\tMapping\t\t%g\nT\tI/O\t\t%g\nT\tTotal\t\t%g\n",
+              (double) clockVal (&runtime[1]),
+              (double) clockVal (&runtime[0]),
+              (double) clockVal (&runtime[0]) +
+              (double) clockVal (&runtime[1]));
+   }
+-  if (flagval & C_FLAGVERBMAP)
++  if (flagval && C_FLAGVERBMAP)
+     SCOTCH_graphMapView (&grafdat, &mapdat, C_filepntrlogout);
+ 
+   fileBlockClose (C_fileTab, C_FILENBR);          /* Always close explicitely to end eventual (un)compression tasks */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16218)
+@@ -66,9 +66,8 @@
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,TemperatureEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum);
+ 	}
++
+ 	if(issmbgradients){
+ 		iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
+ 		iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
+@@ -87,7 +86,7 @@
+ 			iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
+ 		}
+ 	}
+-	if(~ispdd & ~issmbgradients){
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	if(~ispdd && ~issmbgradients){
++		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16218)
+@@ -6,6 +6,7 @@
+ #include "../../../classes/classes.h"
+ #include "../../../shared/shared.h"
+ #include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ #include "../ModelProcessorx.h"
+ 
+ void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+@@ -26,6 +27,9 @@
+ 		}
+ 	}
+ 
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+@@ -48,6 +52,16 @@
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
++	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
++	if(dakota_analysis){
++		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
++		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
++	}
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16218)
+@@ -28,7 +28,6 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16218)
+@@ -27,9 +27,7 @@
+ 
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16218)
+@@ -30,7 +30,6 @@
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16218)
+@@ -55,7 +55,7 @@
+ 			exist = false;
+ 
+ 			/*Go through all processed faces connected to v1 and check whether we have seen this edge yet*/
+-			_assert_(v1>=0 & v1<iomodel->numberofvertices);
++			_assert_(v1>=0 && v1<iomodel->numberofvertices);
+ 			for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){
+ 				if(facestemp[e*4+1]==v2){
+ 					exist = true;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16218)
+@@ -29,7 +29,7 @@
+ 	Loads* loads=*ploads;
+ 
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isHO & !isFS & !isL1L2) return;
++	if(!isSSA && !isHO && !isFS && !isL1L2) return;
+ 
+ 	/*Initialize counter: */
+ 	count=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16218)
+@@ -54,7 +54,7 @@
+ 	constraints=*pconstraints;
+ 
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isHO & !isFS & !isL1L2){
++	if(!isSSA && !isHO && !isFS && !isL1L2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16218)
+@@ -96,47 +96,31 @@
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
++	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
++	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	iomodel->FetchDataToInput(elements,DamageDEnum);
+-	iomodel->FetchDataToInput(elements,PressureEnum);
+-	if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 
+ 	if(iomodel->dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum);
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
+ 		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
++		iomodel->FetchDataToInput(elements,VzEnum);
++		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
++		if(isFS){
++			iomodel->FetchDataToInput(elements,PressureEnum);
++			if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
++		}
+ 	}
+ 
+-	if(control_analysis){
+-		iomodel->FetchDataToInput(elements,InversionVxObsEnum);
+-		iomodel->FetchDataToInput(elements,InversionVyObsEnum);
+-	}
+-
+-	/*Post-process: */
+-	elements->InputDuplicate(VxEnum,VxPicardEnum);
+-	elements->InputDuplicate(VxEnum,InversionVxObsEnum);
+-	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+-
+ 	#ifdef _HAVE_ANDROID_
+ 	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
+ 	#endif
+ 
+-	elements->InputDuplicate(VyEnum,VyPicardEnum);
+-	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
+-	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+-
+-	if(iomodel->dim==3){
+-		elements->InputDuplicate(VzEnum,VzPicardEnum);
+-		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
+-		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+-	}
+-
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+ 	xDelete<int>(finiteelement_list);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16218)
+@@ -6,6 +6,7 @@
+ #include "../../../classes/classes.h"
+ #include "../../../shared/shared.h"
+ #include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ #include "../ModelProcessorx.h"
+ 
+ void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+@@ -23,6 +24,9 @@
+ 		}
+ 	}
+ 
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+@@ -42,11 +46,14 @@
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+-
+-	bool dakota_analysis;
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
+ 	if(dakota_analysis){
+ 		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+ 		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 16218)
+@@ -70,3 +70,14 @@
+ 	}
+ 
+ }
++void InputUpdateFromConstantx(Elements* elements,IssmDouble constant, int name){
++
++	int i;
++	if(VerboseModule()) _printf0_("   Input updates from constant\n");
++
++	/*Elements and loads drive the update: */
++	for(i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->InputUpdateFromConstant(constant,name);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 16217)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 16218)
+@@ -8,8 +8,9 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void InputUpdateFromConstantx(FemModel* femmode,bool   constant    ,int name);
+-void InputUpdateFromConstantx(FemModel* femmode,int    constant    ,int name);
+-void InputUpdateFromConstantx(FemModel* femmode,IssmDouble constant,int name);
++void InputUpdateFromConstantx(FemModel* femmodel,bool       constant,int name);
++void InputUpdateFromConstantx(FemModel* femmodel,int        constant,int name);
++void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant,int name);
++void InputUpdateFromConstantx(Elements* elements,IssmDouble constant,int name);
+ 
+ #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16218)
+@@ -2492,44 +2492,6 @@
+ 	/*Fill with IoModel*/
+ 	this->InputUpdateFromIoModel(index,iomodel);
+ 
+-	/*Defaults if not provided in iomodel*/
+-	switch(analysis_type){
+-
+-		case StressbalanceAnalysisEnum:
+-
+-			/*default vx,vy and vz: either observation or 0 */
+-			if(!iomodel->Data(VxEnum)){
+-				for(i=0;i<3;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new TriaInput(VxEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVxEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(VyEnum)){
+-				for(i=0;i<3;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new TriaInput(VyEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVyEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(VzEnum)){
+-				for(i=0;i<3;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new TriaInput(VzEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis)this->inputs->AddInput(new TriaInput(QmuVzEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(PressureEnum)){
+-				for(i=0;i<3;i++)nodeinputs[i]=0;
+-				if(dakota_analysis){
+-					this->inputs->AddInput(new TriaInput(PressureEnum,nodeinputs,P1Enum));
+-					this->inputs->AddInput(new TriaInput(QmuPressureEnum,nodeinputs,P1Enum));
+-				}
+-			}
+-			break;
+-
+-		default:
+-			/*No update for other solution types*/
+-			break;
+-
+-	}
+-
+-	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+-	this->parameters=NULL;
+ }
+ /*}}}*/
+ 
+@@ -3078,7 +3040,6 @@
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum);       _assert_(surface_input);
+ 	Input* vx_input=inputs->GetInput(VxEnum);                 _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum);                 _assert_(vy_input);
+-	Input* vz_input=inputs->GetInput(VzEnum);                 _assert_(vz_input);
+ 	Input* gllevelset_input=NULL;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+@@ -5550,7 +5511,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Skip if water or ice shelf element*/
+-	if(NoIceInElement() | IsFloating()) return NULL;
++	if(NoIceInElement() || IsFloating()) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -5775,7 +5736,7 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+ 	/*Skip if water or ice shelf element*/
+-	if(NoIceInElement() | IsFloating()) return NULL;
++	if(NoIceInElement() || IsFloating()) return NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16217)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16218)
+@@ -3497,9 +3497,7 @@
+ 	iomodel->Constant(&latentheat,MaterialsLatentheatEnum);
+ 
+ 	/*Checks if debuging*/
+-	/*{{{*/
+ 	_assert_(iomodel->elements);
+-	/*}}}*/
+ 
+ 	/*Recover element type*/
+ 	this->SetElementType(finiteelement_type,analysis_counter);
+@@ -3655,33 +3653,6 @@
+ 
+ 		case StressbalanceAnalysisEnum:
+ 
+-			/*default vx,vy and vz: either observation or 0 */
+-			if(!iomodel->Data(VxEnum)){
+-				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaInput(VxEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVxEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(VyEnum)){
+-				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaInput(VyEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVyEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(VzEnum)){
+-				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				this->inputs->AddInput(new PentaInput(VzEnum,nodeinputs,P1Enum));
+-				if(dakota_analysis) this->inputs->AddInput(new PentaInput(QmuVzEnum,nodeinputs,P1Enum));
+-			}
+-			if(!iomodel->Data(PressureEnum)){
+-				for(i=0;i<6;i++)nodeinputs[i]=0;
+-				if(dakota_analysis){
+-					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
+-					this->inputs->AddInput(new PentaInput(QmuPressureEnum,nodeinputs,P1Enum));
+-				}
+-				if(isFS){
+-					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
+-					this->inputs->AddInput(new PentaInput(PressurePicardEnum,nodeinputs,P1Enum));
+-				}
+-			}
+ 			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==HOFSApproximationEnum){
+ 				/*Create VzHO and VzFS Enums*/
+ 				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
+@@ -3712,25 +3683,10 @@
+ 			}
+ 			break;
+ 
+-		case ThermalAnalysisEnum:
+-			/*Initialize mesh velocity*/
+-			for(i=0;i<6;i++)nodeinputs[i]=0;
+-			this->inputs->AddInput(new PentaInput(VxMeshEnum,nodeinputs,P1Enum));
+-			this->inputs->AddInput(new PentaInput(VyMeshEnum,nodeinputs,P1Enum));
+-			this->inputs->AddInput(new PentaInput(VzMeshEnum,nodeinputs,P1Enum));
+-			if(dakota_analysis){
+-				this->inputs->AddInput(new PentaInput(QmuVxMeshEnum,nodeinputs,P1Enum));
+-				this->inputs->AddInput(new PentaInput(QmuVyMeshEnum,nodeinputs,P1Enum));
+-				this->inputs->AddInput(new PentaInput(QmuVzMeshEnum,nodeinputs,P1Enum));
+-			}
+-			break;
+ 
+ 		case EnthalpyAnalysisEnum:
+ 			/*Initialize mesh velocity*/
+ 			for(i=0;i<6;i++)nodeinputs[i]=0;
+-			this->inputs->AddInput(new PentaInput(VxMeshEnum,nodeinputs,P1Enum));
+-			this->inputs->AddInput(new PentaInput(VyMeshEnum,nodeinputs,P1Enum));
+-			this->inputs->AddInput(new PentaInput(VzMeshEnum,nodeinputs,P1Enum));
+ 			if (iomodel->Data(TemperatureEnum) && iomodel->Data(WaterfractionEnum) && iomodel->Data(PressureEnum)) {
+ 				for(i=0;i<6;i++){
+ 					if(iomodel->Data(TemperatureEnum)[penta_vertex_ids[i]-1] < meltingpoint-beta*iomodel->Data(PressureEnum)[penta_vertex_ids[i]-1]){
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16217)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16218)
+@@ -5,7 +5,6 @@
+ 
+ classdef damage
+ 	properties (SetAccess=public)  
+-	% {{{
+ 		%damage 
+ 		D                   = NaN;
+ 		law                 = '';
+@@ -26,8 +25,7 @@
+ 		c3                  = NaN;
+ 		c4                  = NaN;
+ 		healing             = NaN;
+-
+-	end % }}}
++	end
+ 	methods
+ 		function obj = damage(varargin) % {{{
+ 			switch nargin
Index: issm/oecreview/Archive/16133-16554/ISSM-16218-16219.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16218-16219.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16218-16219.diff	(revision 16556)
@@ -0,0 +1,228 @@
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16219)
+@@ -22,12 +22,12 @@
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	if(dakota_analysis && solution_type!=TransientSolutionEnum){
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzMeshEnum,VzMeshEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuTemperatureEnum,TemperatureEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
++		InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
++		InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
++		InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
++		InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
++		InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
++		InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+ 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+ 		ResetConstraintsx(femmodel);
+ 	}
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16219)
+@@ -60,31 +60,31 @@
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+ 	if(dakota_analysis){
+ 		if(isstressbalance){
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
++			InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
++			InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
+ 			if(dim==3){
+-				InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-				if(isFS)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++				InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
++				if(isFS)InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
+ 			}
+ 		}
+ 		if(ismasstransport || isgroundingline){
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
++			InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
++			InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
++			InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
++			InputDuplicatex(femmodel,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
+ 		}
+-		if(isgroundingline) InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
+-		if(dim==2)InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
++		if(dim==2)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+ 		if(isthermal && dim==3){
+ 			//Update Vertex Position after updating Thickness and Bed
+ 			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+ 			femmodel->UpdateVertexPositionsx();
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxMeshEnum,VxMeshEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyMeshEnum,VyMeshEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzMeshEnum,VzMeshEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuTemperatureEnum,TemperatureEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
++			InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
++			InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
++			InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
++			InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
++			InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
++			InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+ 			//Reset Thermal Constraints
+ 			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+ 			ResetConstraintsx(femmodel);
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16219)
+@@ -35,9 +35,9 @@
+ 
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+ 	if(dakota_analysis && solution_type==MasstransportSolutionEnum){
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuSurfaceEnum,SurfaceEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuThicknessEnum,ThicknessEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuBedEnum,BedEnum);
++		InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
++		InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
++		InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
+ 	}
+ 
+ 	if(issmbgradients){
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16219)
+@@ -63,7 +63,7 @@
+ 
+ 			/*transfer water column thickness to old water column thickness: */
+ 
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum,WaterColumnOldEnum);
++			InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
+ 
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+@@ -78,10 +78,10 @@
+ 		}
+ 
+ 		else if (hydrology_model==HydrologydcEnum){
+-			InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadEnum,SedimentHeadOldEnum);
++			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+ 			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 			if (isefficientlayer){
+-				InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EplHeadEnum,EplHeadOldEnum);
++				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+ 			}
+ 
+ 			if(VerboseSolution()) _printf0_("   computing water head\n");
+Index: ../trunk-jpl/src/c/analyses/enthalpy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16219)
+@@ -22,7 +22,7 @@
+ 	solutionsequence_nonlinear(femmodel,true);
+ 
+ 	/*transfer enthalpy to enthalpy picard for the next step: */
+-	InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum,EnthalpyPicardEnum);
++	InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16219)
+@@ -38,10 +38,10 @@
+ 
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+ 	if(dakota_analysis && solution_type==StressbalanceSolutionEnum){
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
+-		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVzEnum,VzEnum);
+-		if(isFS) InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuPressureEnum,PressureEnum);
++		InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
++		InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
++		InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
++		if(isFS) InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
+ 	}
+ 
+ 	/*Compute slopes: */
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 16219)
+@@ -7,16 +7,15 @@
+ #include "../../classes/classes.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void InputDuplicatex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int original_enum, int new_enum){
++void InputDuplicatex(FemModel* femmodel,int original_enum, int new_enum){
+ 
+ 	/*Go through elemnets, and ask to reinitialie the input: */
+-	int      i;
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++	for(int i=0;i<femmodel->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->InputDuplicate(original_enum,new_enum);
+ 	}
+-	for(i=0;i<materials->Size();i++){
+-		Material* material=(Material*)materials->GetObjectByOffset(i);
++	for(int i=0;i<femmodel->materials->Size();i++){
++		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
+ 		material->InputDuplicate(original_enum,new_enum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 16218)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 16219)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void InputDuplicatex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int reinitialized_enum, int original_enum);
++void InputDuplicatex(FemModel* femmodel,int reinitialized_enum, int original_enum);
+ 
+ #endif  /* _INPUTDUPLICATEX_H */
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16218)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16219)
+@@ -2425,25 +2425,12 @@
+ void Tria::Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){
+ 
+ 	/*Intermediaries*/
+-	int        i;
+-	IssmDouble nodeinputs[3];
+-	IssmDouble yts;
+-	int        progstabilization,balancestabilization;
+-	int        fe_ssa;
+-	bool       dakota_analysis;
+-	int        numnodes;
+-	int*       tria_node_ids = NULL;
++	int  numnodes;
++	int* tria_node_ids = NULL;
+ 
+ 	/*Checks if debuging*/
+ 	_assert_(iomodel->elements);
+ 
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&progstabilization,MasstransportStabilizationEnum);
+-	iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum);
+-	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-
+ 	/*Recover element type*/
+ 	this->SetElementType(finiteelement_type,analysis_counter);
+ 
+@@ -2491,7 +2478,6 @@
+ 
+ 	/*Fill with IoModel*/
+ 	this->InputUpdateFromIoModel(index,iomodel);
+-
+ }
+ /*}}}*/
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16219-16220.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16219-16220.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16219-16220.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16219)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 16220)
+@@ -9,6 +9,7 @@
+ #endif
+ 
+ #include <cstring>
++#include <cstdio>
+ #include "./exceptions.h"
+ #include "../io/Print/Print.h"
+ #include "../io/Comm/IssmComm.h"
Index: issm/oecreview/Archive/16133-16554/ISSM-16220-16221.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16220-16221.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16220-16221.diff	(revision 16556)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16220)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16221)
+@@ -6951,11 +6951,11 @@
+ ElementVector* Tria::CreatePVectorDamageEvolution_CG(void){
+ 
+ 	/*Intermediaries */
+-	IssmDouble Jdet,dt;
+-	IssmDouble f,damage;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	Input* damage_input  = NULL;
+-	Input* f_input  = NULL;
++	IssmDouble  Jdet ,dt;
++	IssmDouble  f,damage;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  f_list[NUMVERTICES];
++	Input      *damage_input             = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -6970,7 +6970,7 @@
+ 	damage_input  = this->material->inputs->GetInput(DamageDbarEnum);     _assert_(damage_input);
+ 	
+ 	/*retrieve damage evolution forcing function: */
+-	f_input=this->DamageEvolutionF();
++	this->DamageEvolutionF(&f_list[0]);
+ 
+ 	/*Initialize forcing function f to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+@@ -6982,7 +6982,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		f_input->GetInputValue(&f,gauss);
++		TriaRef::GetInputValue(&f,f_list,gauss);
+ 		damage_input->GetInputValue(&damage,gauss);
+ 
+ 		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(damage+dt*f)*basis[i];
+@@ -6995,7 +6995,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::DamageEvolutionF{{{*/
+-Input* Tria::DamageEvolutionF(void){
++void Tria::DamageEvolutionF(IssmDouble* f){
+ 
+ 	/*Intermediaries */
+ 	IssmDouble c1,c2,c3,healing,stress_threshold;
+@@ -7006,16 +7006,11 @@
+ 	IssmDouble PosPsi;
+ 	IssmDouble NegPsi;
+ 	Input* damage_input=NULL;
+-	Input* z_input=NULL;
+ 	Input* sigma_xx_input  = NULL;
+ 	Input* sigma_xy_input  = NULL;
+ 	Input* sigma_yy_input  = NULL;
+ 	GaussTria* gauss=NULL;
+ 	IssmDouble damage,sigma_xx,sigma_xy,sigma_yy;
+-	
+-	/*output: */
+-	IssmDouble f[NUMVERTICES];
+-	Input* f_input=NULL;
+ 
+ 	/*retrieve parameters:*/
+ 	this->parameters->FindParam(&c1,DamageC1Enum);
+@@ -7060,11 +7055,9 @@
+ 		f[iv]= c1* ( pow(PosPsi,c2)   -  healing * pow(NegPsi,c2) )  *   pow((1 - damage),-c3);
+ 
+ 	}
+-	f_input=new TriaInput(NoneEnum,&f[0],P1Enum);
+ 	
+ 	/*Clean up and return*/
+ 	delete gauss;
+-	return f_input;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionDamageEvolution {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16220)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16221)
+@@ -282,8 +282,8 @@
+ 		ElementMatrix* CreateKMatrixDamageEvolution_CG(void);
+ 		ElementVector* CreatePVectorDamageEvolution(void);
+ 		ElementVector* CreatePVectorDamageEvolution_CG(void);
+-		Input* DamageEvolutionF(void);
+-		void	       InputUpdateFromSolutionDamageEvolution(IssmDouble* solution);
++		void           DamageEvolutionF(IssmDouble* flist);
++		void	         InputUpdateFromSolutionDamageEvolution(IssmDouble* solution);
+ 		#endif
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16221-16222.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16221-16222.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16221-16222.diff	(revision 16556)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16221)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16222)
+@@ -10,7 +10,7 @@
+ void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+ 
+ 	Parameters *parameters = NULL;
+-	char*       law;
++	char*       law        = NULL;
+ 
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+@@ -18,8 +18,6 @@
+ 	/*retrieve some parameters: */
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
+-	
+-	iomodel->Constant(&law,DamageLawEnum);
+ 		
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));
+@@ -28,6 +26,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
+ 
+ 	/*Retrieve law dependent parameters: */
++	iomodel->Constant(&law,DamageLawEnum);
+ 	if (strcmp(law,"pralong")==0){
+ 		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
+ 		parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
+@@ -38,5 +37,6 @@
+ 	}
+ 	
+ 	/*Assign output pointer: */
++	xDelete<char>(law);
+ 	*pparameters=parameters;
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16222-16223.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16222-16223.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16222-16223.diff	(revision 16556)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16222)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16223)
+@@ -30,6 +30,6 @@
+ 	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VxEnum,0.);
++	iomodel->FetchDataToInput(elements,VyEnum,0.);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16222)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16223)
+@@ -95,9 +95,9 @@
+ 	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VxEnum,0.);
+ 	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VyEnum,0.);
+ 	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+@@ -109,7 +109,7 @@
+ 		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
+ 		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,VzEnum,0.);
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+ 		if(isFS){
+ 			iomodel->FetchDataToInput(elements,PressureEnum);
Index: issm/oecreview/Archive/16133-16554/ISSM-16223-16224.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16223-16224.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16223-16224.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 16223)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 16224)
+@@ -5,7 +5,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+ md=extrude(md,3,1.);
+-md.cluster=generic('name',oshostname(),'np',2);
++md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.isthermal=0;
+ 
+ md.timestepping.time_step=1.;
Index: issm/oecreview/Archive/16133-16554/ISSM-16224-16225.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16224-16225.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16224-16225.diff	(revision 16556)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 16225)
+@@ -28,7 +28,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[2.5e-11,1.5e-11,1e-11,1.5e-11]
++field_tolerances=[4e-11,2e-11,4e-11,2e-11]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 16225)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,2e-07,1e-06,2e-07,1e-07]
++field_tolerances=[2e-07,2e-07,2e-06,2e-07,5e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 16225)
+@@ -22,7 +22,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+-field_tolerances={1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
++field_tolerances={1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,3e-09,1e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 16225)
+@@ -15,7 +15,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={4e-11,2e-11,2e-11,2e-11};
++field_tolerances={4e-11,2e-11,4e-11,2e-11};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 16225)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+-field_tolerances={1e-07,2e-07,2e-06,2e-07,5e-07};
++field_tolerances={2e-07,2e-07,2e-06,2e-07,5e-07};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 16224)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 16225)
+@@ -38,7 +38,7 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+-field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,3e-09,1e-09]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
Index: issm/oecreview/Archive/16133-16554/ISSM-16225-16226.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16225-16226.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16225-16226.diff	(revision 16556)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16225)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16226)
+@@ -483,6 +483,7 @@
+ 		fi
+ 	fi
+ 	AC_MSG_RESULT($HAVE_SCOTCH)
++	AM_CONDITIONAL([SCOTCH],[test x$HAVE_SCOTCH = xyes])
+ 	
+ 	dnl scotch libraries
+ 	if test "x$HAVE_SCOTCH" = "xyes"; then
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16225)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16226)
+@@ -816,11 +816,6 @@
+ 			./shared/TriMesh/OrderSegments.cpp\
+ 			./shared/TriMesh/SplitMeshForRifts.cpp\
+ 			./shared/TriMesh/TriMeshUtils.cpp\
+-			./modules/Chacox/Chacox.h\
+-			./modules/Chacox/Chacox.cpp\
+-			./modules/Chacox/input_parse.cpp\
+-			./modules/Chacox/chaco_seconds.cpp\
+-			./modules/Chacox/user_params.cpp\
+ 			./modules/TriaSearchx/TriaSearchx.h\
+ 			./modules/TriaSearchx/TriaSearchx.cpp\
+ 			./modules/TriMeshx/TriMeshx.h\
+@@ -860,10 +855,19 @@
+ 			./modules/NodeConnectivityx/NodeConnectivityx.h\
+ 			./modules/ElementConnectivityx/ElementConnectivityx.cpp\
+ 			./modules/ElementConnectivityx/ElementConnectivityx.h\
+-			./modules/Scotchx/Scotchx.cpp\
+-			./modules/Scotchx/Scotchx.h\
+ 			./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp\
+ 			./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h
++if CHACO
++modules_sources+= ./modules/Chacox/Chacox.h\
++						./modules/Chacox/Chacox.cpp\
++						./modules/Chacox/input_parse.cpp\
++						./modules/Chacox/chaco_seconds.cpp\
++						./modules/Chacox/user_params.cpp
++endif
++if SCOTCH
++modules_sources+= ./modules/Scotchx/Scotchx.cpp\
++						./modules/Scotchx/Scotchx.h
++endif
+ #}}}
+ 
+ #{{{ Conditional build-up of sources
+@@ -961,7 +965,6 @@
+ if DAMAGE
+ issm_sources +=  $(damage_sources)
+ endif
+-
+ #}}}
+ #Library flags and sources {{{
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
Index: issm/oecreview/Archive/16133-16554/ISSM-16226-16227.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16226-16227.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16226-16227.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 16226)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 16227)
+@@ -41,4 +41,4 @@
+ disp('      boundary conditions for thermal model');
+ md.thermal.spctemperature(:)=md.initialization.temperature;
+ md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1); 
+-md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.)=1.*10^-3; %1 mW/m^2
++md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.))=1.*10^-3; %1 mW/m^2
Index: issm/oecreview/Archive/16133-16554/ISSM-16227-16228.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16227-16228.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16227-16228.diff	(revision 16556)
@@ -0,0 +1,818 @@
+Index: ../trunk-jpl/src/c/bamg/SetOfE4.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/SetOfE4.h	(revision 16227)
++++ ../trunk-jpl/src/c/bamg/SetOfE4.h	(revision 16228)
+@@ -36,7 +36,6 @@
+ 			long SortAndFind (long ii,long jj);
+ 			long i(long k);
+ 			long j(long k);
+-			long newarete(long k);
+ 	};
+ }
+ #endif 
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 16227)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 16228)
+@@ -91,7 +91,6 @@
+ 			Edge** MakeGeomEdgeToEdge();
+ 			long SplitInternalEdgeWithBorderVertices();
+ 			void MakeQuadrangles(double costheta);
+-			int  SplitElement(int choice);
+ 			void MakeBamgQuadtree();
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+ 			long InsertNewPoints(long nbvold,long & NbTSwap) ; 
+Index: ../trunk-jpl/src/c/bamg/SetOfE4.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/SetOfE4.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/bamg/SetOfE4.cpp	(revision 16228)
+@@ -102,11 +102,6 @@
+ 		return NbOfEdges;
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION  SetOfEdges4::newarete{{{*/
+-	long SetOfEdges4::newarete(long k){
+-		return NbOfEdges == k+1;
+-	}
+-	/*}}}*/
+ 	/*FUNCTION  SetOfEdges4::SortAndAdd{{{*/
+ 	long SetOfEdges4::SortAndAdd (long ii,long jj) {
+ 		return ii <=jj ? add (ii,jj)  : add (jj,ii) ;
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16228)
+@@ -4181,512 +4181,6 @@
+ 	delete [] first_np_or_next_t1;
+ }
+ /*}}}*/
+-	/*FUNCTION Mesh::SplitElement{{{*/
+-	int  Mesh::SplitElement(int choice){
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshQuad.cpp/SplitElement)*/
+-
+-		long int verbose=0;
+-
+-		Direction NoDirOfSearch;
+-		const  int withBackground = &BTh != this && &BTh;
+-
+-		TrianglesRenumberBySubDomain();
+-		//int nswap =0;
+-		const long nfortria( choice ? 4 : 6);
+-		if(withBackground) 
+-		  {
+-			BTh.SetVertexFieldOn();
+-			SetVertexFieldOnBTh();
+-		  }
+-		else
+-		 BTh.SetVertexFieldOn();
+-
+-		long newnbt=0,newnbv=0;
+-		long * kedge = 0;
+-		long newnbq=nbq;
+-		long * ksplit= 0, * ksplitarray=0;
+-		long kkk=0;
+-		int ret =0;
+-		if (maxnbv<nbv+nbe) return 1;//   
+-		// 1) create  the new points by spliting the internal edges 
+-		// set the 
+-		long nbvold = nbv;
+-		long nbtold = nbt;
+-		long nbtoutold  = nbtout;
+-		long  NbEdgeOnGeom=0;
+-		long i;
+-
+-		nbt = nbt - nbtout; // remove all the  the ouside triangles 
+-		long nbtsave = nbt;
+-		Triangle * lastT = triangles + nbt;
+-		for (i=0;i<nbe;i++)
+-		 if(edges[i].GeomEdgeHook) NbEdgeOnGeom++;
+-		long newnbe=nbe+nbe;
+-		//  long newNbVerticesOnGeomVertex=NbVerticesOnGeomVertex;
+-		long newNbVerticesOnGeomEdge=NbVerticesOnGeomEdge+NbEdgeOnGeom;
+-		// long newNbVertexOnBThVertex=NbVertexOnBThVertex;
+-		long newNbVertexOnBThEdge=withBackground ? NbVertexOnBThEdge+NbEdgeOnGeom:0;
+-
+-		// do allocation for pointeur to the geometry and background
+-		VertexOnGeom * newVerticesOnGeomEdge = new VertexOnGeom[newNbVerticesOnGeomEdge];
+-		VertexOnEdge *newVertexOnBThEdge = newNbVertexOnBThEdge ?  new VertexOnEdge[newNbVertexOnBThEdge]:0;
+-		if (NbVerticesOnGeomEdge)
+-		 memcpy(newVerticesOnGeomEdge,VerticesOnGeomEdge,sizeof(VertexOnGeom)*NbVerticesOnGeomEdge);
+-		if (NbVertexOnBThEdge)
+-		 memcpy(newVertexOnBThEdge,VertexOnBThEdge,sizeof(VertexOnEdge)*NbVertexOnBThEdge);
+-		Edge *newedges = new Edge [newnbe];
+-		//  memcpy(newedges,edges,sizeof(Edge)*nbe);
+-		SetOfEdges4 * edge4= new SetOfEdges4(nbe,nbv);
+-		long k=nbv;
+-		long kk=0;
+-		long kvb = NbVertexOnBThEdge;
+-		long kvg = NbVerticesOnGeomEdge;
+-		long ie =0;
+-		Edge ** edgesGtoB=0;
+-		if (withBackground)
+-		 edgesGtoB= BTh.MakeGeomEdgeToEdge();
+-		long ferr=0;
+-		for (i=0;i<nbe;i++)
+-		 newedges[ie].GeomEdgeHook=0;
+-
+-		for (i=0;i<nbe;i++)
+-		  {
+-			GeomEdge *ong =  edges[i].GeomEdgeHook;
+-
+-			newedges[ie]=edges[i];
+-			newedges[ie].adj[0]=newedges+(edges[i].adj[0]-edges) ;
+-			newedges[ie].adj[1]=newedges + ie +1;
+-			R2 A = edges[i][0],B = edges[i][1];
+-
+-			kk += (i == edge4->SortAndAdd(GetId(edges[i][0]),GetId(edges[i][1])));
+-			if (ong) // a geometrical edges 
+-			  { 
+-				if (withBackground){
+-					// walk on back ground mesh 
+-					//  newVertexOnBThEdge[ibe++] = VertexOnEdge(vertices[k],bedge,absicsseonBedge); 
+-					// a faire -- difficile 
+-					// the first PB is to now a background edge between the 2 vertices
+-					if (!edgesGtoB){
+-						_error_("!edgesGtoB");
+-					}
+-					ong= ProjectOnCurve(*edgesGtoB[Gh.GetId(edges[i].GeomEdgeHook)],
+-								edges[i][0],edges[i][1],0.5,vertices[k],
+-								newVertexOnBThEdge[kvb],
+-								newVerticesOnGeomEdge[kvg++]);
+-					vertices[k].ReferenceNumber= edges[i].ReferenceNumber;
+-					vertices[k].DirOfSearch =   NoDirOfSearch;        
+-					;
+-					// get the Info on background mesh 
+-					double s =        newVertexOnBThEdge[kvb];
+-					BamgVertex &  bv0  = newVertexOnBThEdge[kvb][0];
+-					BamgVertex &  bv1  = newVertexOnBThEdge[kvb][1];
+-					// compute the metrix of the new points 
+-					vertices[k].m =  Metric(1-s,bv0,s,bv1); 
+-					kvb++;
+-				  }
+-				else 
+-				  {
+-					ong=Gh.ProjectOnCurve(edges[i],
+-								0.5,vertices[k],newVerticesOnGeomEdge[kvg++]);
+-					// vertices[k].i = R2ToI2( vertices[k].r);
+-					vertices[k].ReferenceNumber = edges[i].ReferenceNumber;
+-					vertices[k].DirOfSearch = NoDirOfSearch;
+-					vertices[k].m =  Metric(0.5,edges[i][0],0.5,edges[i][1]);	      
+-				  }  
+-			  }
+-			else // straigth line edge ---
+-			  { 
+-				vertices[k].r = ((R2) edges[i][0] + (R2)  edges[i][1] )*0.5;
+-				vertices[k].m =  Metric(0.5,edges[i][0],0.5,edges[i][1]);
+-				vertices[k].GeomEdgeHook = 0;
+-			  }
+-			//vertices[k].i = R2ToI2( vertices[k].r);
+-			R2 AB =  vertices[k].r;
+-			R2 AA = (A+AB)*0.5;
+-			R2 BB = (AB+B)*0.5;
+-			vertices[k].ReferenceNumber = edges[i].ReferenceNumber;
+-			vertices[k].DirOfSearch = NoDirOfSearch;
+-
+-			newedges[ie].GeomEdgeHook = Gh.Containing(AA,ong);
+-			newedges[ie++].v[1]=vertices+k;
+-
+-			newedges[ie]=edges[i];
+-			newedges[ie].adj[0]=newedges + ie -1;
+-			newedges[ie].adj[1]=newedges+(edges[i].adj[1]-edges) ;
+-			newedges[ie].GeomEdgeHook =  Gh.Containing(BB,ong);
+-			newedges[ie++].v[0]=vertices+k;
+-			k++;
+-		  }
+-		if (edgesGtoB) delete [] edgesGtoB;
+-		edgesGtoB=0;
+-
+-		newnbv=k;
+-		newNbVerticesOnGeomEdge=kvg;
+-		if (newnbv> maxnbv) goto Error;// bug 
+-
+-		nbv = k;
+-
+-		kedge = new long[3*nbt+1];
+-		ksplitarray = new long[nbt+1];
+-		ksplit = ksplitarray +1; // because ksplit[-1] == ksplitarray[0]
+-
+-		for (i=0;i<3*nbt;i++)
+-		 kedge[i]=-1;
+-
+-		//  
+-
+-		for (i=0;i<nbt;i++) {
+-			Triangle & t = triangles[i];
+-			if (!t.link){
+-				_error_("!t.link");
+-			}
+-			for(int j=0;j<3;j++)
+-			  {
+-				const AdjacentTriangle ta = t.Adj(j);
+-				const Triangle & tt = ta;
+-				if (&tt >= lastT)
+-				 t.SetAdj2(j,0,0);// unset adj
+-				const BamgVertex & v0 = t[VerticesOfTriangularEdge[j][0]];
+-				const BamgVertex & v1 = t[VerticesOfTriangularEdge[j][1]];
+-				long  ke =edge4->SortAndFind(GetId(v0),GetId(v1));
+-				if (ke>0) 
+-				  {
+-					long ii = GetId(tt);
+-					int  jj = ta;
+-					long ks = ke + nbvold;
+-					kedge[3*i+j] = ks;
+-					if (ii<nbt) // good triangle
+-					 kedge[3*ii+jj] = ks;
+-					BamgVertex &A=vertices[ks];
+-					double aa,bb,cc,dd;
+-					if ((dd=Area2(v0.r,v1.r,A.r)) >=0){
+-						// warning PB roundoff error 
+-						if (t.link && ( (aa=Area2( A.r    , t[1].r , t[2].r )) < 0.0 
+-										||   (bb=Area2( t[0].r , A.r    , t[2].r )) < 0.0  
+-										||   (cc=Area2( t[0].r , t[1].r , A.r    )) < 0.0)){
+-							_printf_(ke + nbvold << " not in triangle " << i << " In= " << !!t.link << " " << aa << " " << bb << " " << cc << " " << dd << "\n");
+-							_error_("Number of triangles with P2 interpolation Problem");
+-						}
+-					}
+-					else {
+-						if (tt.link && ( (aa=Area2( A.r     , tt[1].r , tt[2].r )) < 0 
+-										||   (bb=Area2( tt[0].r , A.r     , tt[2].r )) < 0 
+-										||   (cc=Area2( tt[0].r , tt[1].r , A.r     )) < 0)){
+-							_printf_(ke + nbvold << " not in triangle " << ii << " In= " << !!tt.link << " " << aa << " " << bb << " " << cc << " " << dd << "\n");
+-							_error_("Number of triangles with P2 interpolation Problem");
+-						}
+-					} 
+-				  }
+-			  }
+-		}
+-
+-		for (i=0;i<nbt;i++){
+-			ksplit[i]=1; // no split by default
+-			const Triangle & t = triangles[ i];
+-			int nbsplitedge =0;
+-			int nbinvisible =0;
+-			int invisibleedge=0;
+-			int kkk[3];      
+-			for (int j=0;j<3;j++)
+-			  {
+-				if (t.Hidden(j)) invisibleedge=j,nbinvisible++;
+-
+-				const AdjacentTriangle ta = t.Adj(j);
+-				const Triangle & tt = ta;
+-
+-				const BamgVertex & v0 = t[VerticesOfTriangularEdge[j][0]];
+-				const BamgVertex & v1 = t[VerticesOfTriangularEdge[j][1]];
+-				if ( kedge[3*i+j] < 0) 
+-				  {
+-					long  ke =edge4->SortAndFind(GetId(v0),GetId(v1));
+-					if (ke<0) // new 
+-					  {
+-						if (&tt) // internal triangles all the boundary 
+-						  { // new internal edges 
+-							long ii = GetId(tt);
+-							int  jj = ta;
+-
+-							kedge[3*i+j]=k;// save the vertex number 
+-							kedge[3*ii+jj]=k;
+-							if (k<maxnbv) 
+-							  {
+-								vertices[k].r = ((R2) v0+(R2) v1 )/2;
+-								//vertices[k].i = R2ToI2( vertices[k].r);
+-								vertices[k].ReferenceNumber=0;
+-								vertices[k].DirOfSearch =NoDirOfSearch;
+-								vertices[k].m =  Metric(0.5,v0,0.5,v1);
+-							  }
+-							k++;
+-							kkk[nbsplitedge++]=j;		      
+-						  } // tt 
+-						else
+-						 _error_("Bug...");
+-					  } // ke<0	       
+-					else
+-					  { // ke >=0
+-						kedge[3*i+j]=nbvold+ke;
+-						kkk[nbsplitedge++]=j;// previously splited
+-					  }
+-				  }
+-				else 
+-				 kkk[nbsplitedge++]=j;// previously splited
+-
+-			  } 
+-			if (nbinvisible>=2){
+-				_error_("nbinvisible>=2");
+-			}
+-			switch (nbsplitedge) {
+-				case 0: ksplit[i]=10; newnbt++; break;   // nosplit
+-				case 1: ksplit[i]=20+kkk[0];newnbt += 2; break; // split in 2 
+-				case 2: ksplit[i]=30+3-kkk[0]-kkk[1];newnbt += 3; break; // split in 3 
+-				case 3:
+-						  if (nbinvisible) ksplit[i]=40+invisibleedge,newnbt += 4;
+-						  else   ksplit[i]=10*nfortria,newnbt+=nfortria;
+-						  break;
+-			} 
+-			if (ksplit[i]<40){
+-				_error_("ksplit[i]<40");
+-			}
+-		  }
+-		//  now do the element split
+-		newnbq = 4*nbq;
+-		nbv = k;
+-		kkk = nbt;
+-		ksplit[-1] = nbt;
+-		// look on  old true  triangles 
+-
+-		for (i=0;i<nbtsave;i++){
+-			int  nbmkadj=0;
+-			long mkadj [100];
+-			mkadj[0]=i;
+-			long kk=ksplit[i]/10;
+-			int  ke=(int) (ksplit[i]%10);
+-			if (kk>=7 || kk<=0){
+-				_error_("kk>=7 || kk<=0");
+-			}
+-
+-			// def the numbering   k (edge) i vertex 
+-			int k0 = ke;
+-			int k1 = NextEdge[k0];
+-			int k2 = PreviousEdge[k0];
+-			int i0 = OppositeVertex[k0];
+-			int i1 = OppositeVertex[k1];
+-			int i2 = OppositeVertex[k2];
+-
+-			Triangle &t0=triangles[i];
+-			BamgVertex * v0=t0(i0);           
+-			BamgVertex * v1=t0(i1);           
+-			BamgVertex * v2=t0(i2);
+-
+-			if (nbmkadj>=10){
+-				_error_("nbmkadj>=10");
+-			}
+-			// --------------------------
+-			AdjacentTriangle ta0(t0.Adj(i0)),ta1(t0.Adj(i1)),ta2(t0.Adj(i2));
+-			// save the flag Hidden
+-			int hid[]={t0.Hidden(0),t0.Hidden(1),t0.Hidden(2)};
+-			// un set all adj -- save Hidden flag --
+-			t0.SetAdj2(0,0,hid[0]);
+-			t0.SetAdj2(1,0,hid[1]);
+-			t0.SetAdj2(2,0,hid[2]);
+-			// --  remake 
+-			switch  (kk) {
+-				case 1: break;// nothing 
+-				case 2: // 
+-						  {
+-							Triangle &t1=triangles[kkk++];
+-							t1=t0;
+-							if (kedge[3*i+i0]<0){
+-								_error_("kedge[3*i+i0]<0");
+-							}
+-							BamgVertex * v3 = vertices + kedge[3*i+k0];
+-
+-							t0(i2) = v3;
+-							t1(i1) = v3;
+-							t0.SetAllFlag(k2,0);
+-							t1.SetAllFlag(k1,0);
+-						  } 
+-						break; 
+-				case 3: //
+-						  {
+-							Triangle &t1=triangles[kkk++];
+-							Triangle &t2=triangles[kkk++];
+-							t2=t1=t0;
+-							if (kedge[3*i+k1]<0){
+-								_error_("kedge[3*i+k1]<0");
+-							}
+-							if (kedge[3*i+k2]<0){
+-								_error_("kedge[3*i+k2]<0");
+-							}
+-
+-							BamgVertex * v01 = vertices + kedge[3*i+k2];
+-							BamgVertex * v02 = vertices + kedge[3*i+k1]; 
+-							t0(i1) = v01; 
+-							t0(i2) = v02; 
+-							t1(i2) = v02;
+-							t1(i0) = v01; 
+-							t2(i0) = v02; 
+-							t0.SetAllFlag(k0,0);
+-							t1.SetAllFlag(k1,0);
+-							t1.SetAllFlag(k0,0);
+-							t2.SetAllFlag(k2,0);
+-						  } 
+-						break;
+-				case 4: // 
+-				case 6: // split in 4 
+-						  {
+-							Triangle &t1=triangles[kkk++];
+-							Triangle &t2=triangles[kkk++];
+-							Triangle &t3=triangles[kkk++];
+-							t3=t2=t1=t0;
+-							if (kedge[3*i+k0] <0 || kedge[3*i+k1]<0 || kedge[3*i+k2]<0){
+-								_error_("kedge[3*i+k0] <0 || kedge[3*i+k1]<0 || kedge[3*i+k2]<0");
+-							}
+-							BamgVertex * v12 = vertices + kedge[3*i+k0];
+-							BamgVertex * v02 = vertices + kedge[3*i+k1]; 
+-							BamgVertex * v01 = vertices + kedge[3*i+k2];
+-							t0(i1) = v01;
+-							t0(i2) = v02;
+-							t0.SetAllFlag(k0,hid[k0]);
+-
+-							t1(i0) = v01;
+-							t1(i2) = v12;
+-							t0.SetAllFlag(k1,hid[k1]);
+-
+-							t2(i0) = v02;
+-							t2(i1) = v12;
+-							t2.SetAllFlag(k2,hid[k2]);
+-
+-							t3(i0) = v12;
+-							t3(i1) = v02;
+-							t3(i2) = v01;
+-
+-							t3.SetAllFlag(0,hid[0]);	   
+-							t3.SetAllFlag(1,hid[1]);	   
+-							t3.SetAllFlag(2,hid[2]);
+-
+-							if ( kk == 6)
+-							  {
+-
+-								Triangle &t4=triangles[kkk++];
+-								Triangle &t5=triangles[kkk++];
+-
+-								t4 = t3;
+-								t5 = t3;
+-
+-								t0.SetHidden(k0);
+-								t1.SetHidden(k1);
+-								t2.SetHidden(k2);
+-								t3.SetHidden(0);
+-								t4.SetHidden(1);
+-								t5.SetHidden(2);
+-
+-								if (nbv < maxnbv ) 
+-								  {
+-									vertices[nbv].r = ((R2) *v01 + (R2) *v12  + (R2) *v02 ) / 3.0;
+-									vertices[nbv].ReferenceNumber =0;
+-									vertices[nbv].DirOfSearch =NoDirOfSearch;
+-									//vertices[nbv].i = R2ToI2(vertices[nbv].r);
+-									double a3[]={1./3.,1./3.,1./3.};
+-									vertices[nbv].m = Metric(a3,v0->m,v1->m,v2->m);
+-									BamgVertex * vc =  vertices +nbv++;
+-									t3(i0) = vc;
+-									t4(i1) = vc;
+-									t5(i2) = vc;
+-
+-								  }
+-								else
+-								 goto Error; 
+-							  }
+-
+-						  } 
+-						break;         
+-			}
+-
+-			// save all the new triangles
+-			mkadj[nbmkadj++]=i;
+-			long jj;
+-			if (t0.link) 
+-			 for (jj=nbt;jj<kkk;jj++)
+-				{
+-				 triangles[jj].link=t0.link;
+-				 t0.link= triangles+jj;
+-				 mkadj[nbmkadj++]=jj;
+-				}
+-			if (nbmkadj>13){// 13 = 6 + 4 +
+-				_error_("nbmkadj>13");
+-			}
+-
+-			if (kk==6)  newnbq+=3;
+-			for (jj=ksplit[i-1];jj<kkk;jj++) nbt = kkk;
+-			ksplit[i]= nbt; // save last adresse of the new triangles
+-			kkk = nbt;
+-		  }
+-
+-		for (i=0;i<nbv;i++) vertices[i].m = vertices[i].m*2.;
+-
+-		if(withBackground)
+-		 for (i=0;i<BTh.nbv;i++)
+-		  BTh.vertices[i].m =  BTh.vertices[i].m*2.;
+-
+-		ret = 2;
+-		if (nbt>= maxnbt) goto Error; // bug 
+-		if (nbv>= maxnbv) goto Error; // bug 
+-		// generation of the new triangles 
+-
+-		SetIntCoor("In SplitElement"); 
+-
+-		CreateSingleVertexToTriangleConnectivity();
+-		if(withBackground)
+-		 BTh.CreateSingleVertexToTriangleConnectivity();
+-
+-		delete [] edges;
+-		edges = newedges;
+-		nbe = newnbe;
+-		nbq = newnbq;
+-
+-		for (i=0;i<nbsubdomains;i++)
+-		  { 
+-			long k = subdomains[i].edge- edges;
+-			subdomains[i].edge =  edges+2*k; // spilt all edge in 2 
+-		  }
+-
+-		if (ksplitarray) delete [] ksplitarray;
+-		if (kedge) delete [] kedge;
+-		if (edge4) delete edge4;
+-		if (VerticesOnGeomEdge) delete [] VerticesOnGeomEdge;
+-		VerticesOnGeomEdge= newVerticesOnGeomEdge;
+-		if(VertexOnBThEdge) delete []  VertexOnBThEdge;
+-		VertexOnBThEdge = newVertexOnBThEdge;
+-		NbVerticesOnGeomEdge = newNbVerticesOnGeomEdge;
+-		NbVertexOnBThEdge=newNbVertexOnBThEdge;
+-		//  CreateSingleVertexToTriangleConnectivity();
+-
+-		ReconstructExistingMesh();
+-
+-		if (verbose>2){
+-			_printf_("   number of quadrilaterals    = " << nbq << "\n");
+-			_printf_("   number of triangles         = " << nbt-nbtout- nbq*2 << "\n");
+-			_printf_("   number of outside triangles = " << nbtout << "\n");
+-		}
+-
+-		return 0; //ok
+-
+-Error:
+-		nbv = nbvold;
+-		nbt = nbtold;
+-		nbtout = nbtoutold;
+-		// cleaning memory ---
+-		delete [] newedges;
+-		if (ksplitarray) delete [] ksplitarray;
+-		if (kedge) delete [] kedge;
+-		if (newVerticesOnGeomEdge) delete [] newVerticesOnGeomEdge;
+-		if (edge4) delete edge4;
+-		if(newVertexOnBThEdge) delete []  newVertexOnBThEdge;
+-
+-		return ret; // ok 
+-	}
+-	/*}}}*/
+ /*FUNCTION Mesh::SplitInternalEdgeWithBorderVertices{{{*/
+ long  Mesh::SplitInternalEdgeWithBorderVertices(){
+ 	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SplitInternalEdgeWithBorderVertices)*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 16228)
+@@ -1,48 +0,0 @@
+-/*!\file:  exprintf
+- * \brief this is a modification of the sprintf function. 
+- * Instead of returning an int, it will return the char* itself.
+- * The advantage is to be able to do things like: 
+- * ErrorException(exprintf("%s%i\n","test failed for id:",id));
+- */ 
+-
+-#include <stdarg.h>
+-#include <stdio.h>
+-#include "../MemOps/MemOps.h"
+-
+-char* exprintf(const char* format,...){
+-
+-	/*returned string: */
+-	char *buffer = NULL;
+-	int   n,size = 100;
+-
+-	//variable list of arguments
+-	va_list args;
+-
+-	while(true){
+-
+-		/*allocate buffer for given string size*/
+-		buffer=xNew<char>(size);
+-
+-		/* Try to print in the allocated space. */
+-		va_start(args, format);
+-#ifndef WIN32
+-		n=vsnprintf(buffer,size,format,args);
+-#else
+-		n=vsnprintf(buffer,size,format,args);
+-#endif
+-		va_end(args);
+-
+-		/* If that worked, return the string. */
+-		if(n>-1 && n<size) break;
+-
+-		/* Else try again with more space. */
+-		if(n>-1)   /* glibc 2.1 */
+-		 size=n+1; /* precisely what is needed */
+-		else       /* glibc 2.0 */
+-		 size*=2;  /* twice the old size */
+-
+-		xDelete<char>(buffer);
+-	}
+-
+-	return buffer;
+-}
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16227)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 16228)
+@@ -91,7 +91,4 @@
+ 
+ };
+ /*}}}*/
+-
+-char* exprintf(const char* format,...);
+-
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16228)
+@@ -112,7 +112,7 @@
+ 		iomodel->FetchDataToInput(elements,VzEnum,0.);
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+ 		if(isFS){
+-			iomodel->FetchDataToInput(elements,PressureEnum);
++			iomodel->FetchDataToInput(elements,PressureEnum,0.);
+ 			if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16228)
+@@ -181,11 +181,16 @@
+ 			_error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
+ 	}
+ 
+-	/*Update Elements and Materials For Control methods*/
++	/*Update Elements and Materials For Inversions*/
+ 	#ifdef _HAVE_CONTROL_
+ 	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
+ 	#endif
+ 
++	/*Update Elements and Materials For Dakota*/
++	#ifdef _HAVE_DAKOTA_
++	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
++	#endif
++
+ 	/*Generate objects that are not dependent on any analysis_type: */
+ 	CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter);
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 16228)
+@@ -1,21 +0,0 @@
+-/*!\file:  VecDuplicatePatch.cpp
+- * \brief VecDuplicate + VecCopy wrapped together
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include <petscmat.h>
+-#include <petscvec.h>
+-#include <petscksp.h>
+-
+-void VecDuplicatePatch(Vec* output, Vec input){
+-
+-	VecDuplicate(input,output);
+-	VecCopy(input,*output);
+-
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 16227)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 16228)
+@@ -33,7 +33,6 @@
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size);
+ void MatMultPatch(Mat A,Vec X, Vec AX,ISSM_MPI_Comm comm);
+ void MatToSerial(double** poutmatrix,Mat matrix,ISSM_MPI_Comm comm);
+-void VecDuplicatePatch(Vec* output, Vec input);
+ Vec  SerialToVec(double* vector,int vector_size);
+ InsertMode ISSMToPetscInsertMode(InsMode mode);
+ NormType ISSMToPetscNormMode(NormMode mode);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16227)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16228)
+@@ -196,7 +196,6 @@
+ 					./shared/Numerics/OptPars.h\
+ 					./shared/Exceptions/exceptions.h\
+ 					./shared/Exceptions/Exceptions.cpp\
+-					./shared/Exceptions/exprintf.cpp\
+ 					./shared/Sorting/binary_search.cpp\
+ 					./shared/Sorting/sorting.h\
+ 					./shared/Elements/elements.h\
+@@ -769,7 +768,6 @@
+ 					./toolkits/petsc/patches/VecFree.cpp\
+ 					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp\
+ 					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp\
+-					./toolkits/petsc/patches/VecDuplicatePatch.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16227)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16228)
+@@ -516,7 +516,6 @@
+ 					./toolkits/petsc/patches/VecFree.cpp
+ 					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+ 					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
+-					./toolkits/petsc/patches/VecDuplicatePatch.cpp
+ 					./toolkits/petsc/patches/KSPFree.cpp
+ 					./toolkits/petsc/patches/MatFree.cpp
+ 					./toolkits/petsc/patches/MatMultPatch.cpp
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 16228)
+@@ -819,8 +819,3 @@
+ 	zigzag_counter = 0;
+ }
+ /*}}}*/
+-/*FUNCTION Pengrid::UpdateInputs {{{*/
+-void  Pengrid::UpdateInputs(IssmDouble* solution){
+-	_error_("not supported yet!");
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16227)
++++ ../trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 16228)
+@@ -102,7 +102,6 @@
+ 		void           ConstraintActivateHydrologyDCInefficient(int* punstable);
+ 		#endif
+ 		void  ConstraintActivate(int* punstable);
+-		void  UpdateInputs(IssmDouble* solution);
+ 		void  ResetConstraint(void);
+ 		/*}}}*/
+ 
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 16228)
+@@ -586,15 +586,3 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION ElementMatrix::SetDiag{{{*/
+-void ElementMatrix::SetDiag(IssmDouble scalar){
+-
+-	int i;
+-
+-	if(this->nrows!=this->ncols)_error_("need square matrix in input!");
+-
+-	for(i=0;i<this->nrows;i++){
+-		this->values[this->ncols*i+i]=scalar;
+-	}
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 16227)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 16228)
+@@ -64,6 +64,5 @@
+ 		void StaticCondensation(int numindices,int* indices);
+ 		void Transpose(void);
+ 		void Init(ElementMatrix* Ke);
+-		void SetDiag(IssmDouble scalar);
+ };
+ #endif //#ifndef _ELEMENT_MATRIX_H_
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16227)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16228)
+@@ -74,7 +74,6 @@
+ 		bool  IsActive(void);
+ 		void  Activate(void);
+ 		void  Deactivate(void);
+-		void  UpdateSpcs(IssmDouble* ys);
+ 		void  ReindexingDone(void);
+ 		bool  RequiresDofReindexing(void);
+ 		int   IsFloating();
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16227)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16228)
+@@ -575,18 +575,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Node::UpdateSpcs {{{*/
+-void   Node::UpdateSpcs(IssmDouble* ys){
+-
+-	int count = 0;
+-	for(int i=0;i<this->indexing.gsize;i++){
+-		if(this->indexing.s_set[i]){
+-			this->indexing.svalues[i]=ys[this->indexing.sdoflist[count]];
+-			count++;
+-		}
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Node::VecMerge {{{*/
+ void Node::VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum){
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16228-16229.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16228-16229.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16228-16229.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16228)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16229)
+@@ -45,9 +45,11 @@
+ 			trace_off();
+ 
+ 			/*preliminary checks: */
+-			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-			if(!(num_dependents*num_independents)) return;
++			if (my_rank==0) {
++				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++				if(!(num_dependents*num_independents)) return;
++			}
+ 
+ 			if(VerboseAutodiff())_printf0_("   start ad core\n");
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16229-16230.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16229-16230.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16229-16230.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 16229)
++++ ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 16230)
+@@ -30,7 +30,7 @@
+ 	  return NULL;\
+   } \
+ 	catch (exception &e){\
+-		PyErr_SetString(PyExc_TypeError,exprintf("Standard exception: %s\n",e.what()));\
++		PyErr_SetString(PyExc_TypeError,e.what());\
+ 		return NULL;\
+ 	}\
+ 	catch(...){\
+Index: ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h	(revision 16229)
++++ ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h	(revision 16230)
+@@ -25,7 +25,7 @@
+ 		mexErrMsgTxt(exception.MatlabReport()); \
+ 	}\
+ 	catch (exception &e){\
+-		mexErrMsgTxt(exprintf("Standard exception: %s\n",e.what()));\
++		mexErrMsgTxt(e.what());\
+ 	}\
+ 	catch(...){\
+ 		mexErrMsgTxt("An unexpected error occurred");\
Index: issm/oecreview/Archive/16133-16554/ISSM-16230-16231.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16230-16231.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16230-16231.diff	(revision 16556)
@@ -0,0 +1,1015 @@
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16231)
+@@ -331,11 +331,6 @@
+ 	void   Triangle::SetAllFlag(int a,int f){
+ 		AdjEdgeIndex[a] = (AdjEdgeIndex[a] &3) + (1020 & f);
+ 	}/*}}}*/
+-	/*FUNCTION Triangle::SetDet{{{*/
+-	void Triangle::SetDet() {
+-		if(vertices[0] && vertices[1] && vertices[2])    det = bamg::det(*vertices[0],*vertices[1],*vertices[2]);
+-		else det = -1; 
+-	}/*}}}*/
+ 	/*FUNCTION Triangle::SetHidden{{{*/
+ 	void Triangle::SetHidden(int a){
+ 		//Get Adjacent Triangle number a
+Index: ../trunk-jpl/src/c/bamg/GeomEdge.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/GeomEdge.h	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/GeomEdge.h	(revision 16231)
+@@ -27,7 +27,6 @@
+ 			//Methods
+ 			R2     F(double theta) const ; // parametrization of the curve edge
+ 			double R1tg(double theta,R2 &t) const ; // 1/radius of curvature + tangente
+-			int    Tg(int i) const;
+ 			int    Cracked() const;
+ 			int    TgA()     const;
+ 			int    TgB()     const;
+Index: ../trunk-jpl/src/c/bamg/Curve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Curve.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Curve.cpp	(revision 16231)
+@@ -19,13 +19,6 @@
+ 	/*}}}*/
+ 
+ 	/*Methods*/
+-	/*FUNCTION Curve::Reverse {{{*/
+-	void Curve::Reverse() {
+-		/*reverse the direction of the curve */
+-		Exchange(FirstEdge,LastEdge);
+-		Exchange(FirstVertexIndex,LastVertexIndex);
+-	}
+-	/*}}}*/
+ 	/*FUNCTION Curve::Set {{{*/
+ 	void Curve::Set(const Curve & rec,const Geometry & Gh ,Geometry & GhNew){
+ 		*this = rec;
+Index: ../trunk-jpl/src/c/bamg/Mesh.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.h	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Mesh.h	(revision 16231)
+@@ -82,9 +82,7 @@
+ 			void FindSubDomain(int OutSide=0);
+ 			long TriangleReferenceList(long*) const;
+ 			void TriangleIntNumbering(long* renumbering);
+-			void ShowHistogram() const;
+ 			void CrackMesh(BamgOpts* bamgopts);
+-			void ShowRegulaty() const;
+ 			void SmoothMetric(double raisonmax) ;
+ 			void BoundAnisotropy(double anisomax,double hminaniso= 1e-100) ;
+ 			void MaxSubDivision(double maxsubdiv);
+@@ -95,7 +93,6 @@
+ 			void NewPoints(Mesh &,BamgOpts* bamgopts,int KeepVertices=1);
+ 			long InsertNewPoints(long nbvold,long & NbTSwap) ; 
+ 			void TrianglesRenumberBySubDomain(bool justcompress=false);
+-			void VerticesRenumber(long * renu);
+ 			void SmoothingVertex(int =3,double=0.3);
+ 			Metric MetricAt (const R2 &) const;
+ 			GeomEdge* ProjectOnCurve( Edge & AB, BamgVertex &  A, BamgVertex & B,double theta, BamgVertex & R,VertexOnEdge & BR,VertexOnGeom & GR);
+@@ -117,7 +114,6 @@
+ 			void BuildMetric0(BamgOpts* bamgopts);
+ 			void BuildMetric1(BamgOpts* bamgopts);
+ 			void AddGeometryMetric(BamgOpts* bamgopts);
+-			int  isCracked() const;
+ 			void BuildGeometryFromMesh(BamgOpts* bamgopts=NULL);
+ 			void ReconstructExistingMesh();
+ 
+Index: ../trunk-jpl/src/c/bamg/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16231)
+@@ -62,7 +62,6 @@
+ 			void              SetLocked(int a);
+ 			void              SetMarkUnSwap(int a);
+ 			void              SetUnMarkUnSwap(int a);
+-			void              SetDet();
+ 
+ 			//Inline methods
+ 			double qualite() ;
+Index: ../trunk-jpl/src/c/bamg/GeomEdge.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/GeomEdge.cpp	(revision 16231)
+@@ -174,10 +174,6 @@
+ 	void   GeomEdge::SetRequired()    { 
+ 		type |= 64;/*=>6th digit to 1*/ 
+ 	}/*}}}*/
+-	  /*FUNCTION GeomEdge::Tg{{{*/
+-	int    GeomEdge::Tg(int i) const  {
+-		return i==0 ? TgA() : TgB();
+-	}/*}}}*/
+ 	/*FUNCTION GeomEdge::TgA{{{*/
+ 	int    GeomEdge::TgA()     const  {
+ 		return type &4;  
+Index: ../trunk-jpl/src/c/bamg/Curve.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Curve.h	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Curve.h	(revision 16231)
+@@ -18,7 +18,6 @@
+ 
+ 			//Methods
+ 			Curve();
+-			void Reverse(void);
+ 			void Set(const Curve & rec,const Geometry & Th ,Geometry & ThNew);
+ 	};
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16231)
+@@ -3011,11 +3011,6 @@
+ 		return nbv-nbvold;
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION Mesh::isCracked{{{*/
+-	int Mesh::isCracked() const {
+-		return NbCrackedVertices != 0;
+-	}
+-	/*}}}*/
+ 	/*FUNCTION Mesh::MakeGeomEdgeToEdge{{{*/
+ 	Edge** Mesh::MakeGeomEdgeToEdge() {
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/MakeGeomEdgeToEdge)*/
+@@ -3816,80 +3811,6 @@
+ 
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION Mesh::VerticesRenumber{{{*/
+-	void Mesh::VerticesRenumber(long * renu) {
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ReNumberingVertex)*/
+-
+-		// warning be carfull because pointer
+-		// from on mesh to over mesh 
+-		//  --  so do ReNumbering at the beginning
+-		BamgVertex * ve = vertices+nbv;
+-		long it,ie,i;
+-
+-		_printf_("renumbering triangles\n");
+-		for ( it=0;it<nbt;it++) 
+-		 triangles[it].Renumbering(vertices,ve,renu);
+-
+-		_printf_("renumbering edges\n");
+-		for ( ie=0;ie<nbe;ie++) 
+-		 edges[ie].Renumbering(vertices,ve,renu);
+-
+-		_printf_("renumbering vertices on geom\n");
+-		for (i=0;i< NbVerticesOnGeomVertex;i++)
+-		  {
+-			BamgVertex *v = VerticesOnGeomVertex[i].meshvertex;
+-			if (v>=vertices && v < ve)
+-			 VerticesOnGeomVertex[i].meshvertex=vertices+renu[GetId(v)];
+-		  }
+-
+-		_printf_("renumbering vertices on edge\n");
+-		for (i=0;i< NbVerticesOnGeomEdge;i++)
+-		  {
+-			BamgVertex *v =VerticesOnGeomEdge[i].meshvertex;
+-			if (v>=vertices && v < ve)
+-			 VerticesOnGeomEdge[i].meshvertex=vertices+renu[GetId(v)];
+-		  }
+-
+-		_printf_("renumbering vertices on Bth vertex\n");
+-		for (i=0;i< NbVertexOnBThVertex;i++)
+-		  {
+-			BamgVertex *v=VertexOnBThVertex[i].v;
+-			if (v>=vertices && v < ve)
+-			 VertexOnBThVertex[i].v=vertices+renu[GetId(v)];
+-		  }
+-
+-		for (i=0;i< NbVertexOnBThEdge;i++)
+-		  {
+-			BamgVertex *v=VertexOnBThEdge[i].v;
+-			if (v>=vertices && v < ve)
+-			 VertexOnBThEdge[i].v=vertices+renu[GetId(v)];
+-		  }
+-
+-		// move the Vertices without a copy of the array 
+-		// be carefull not trivial code 
+-		long j;
+-		for ( it=0;it<nbv;it++) // for all sub cycles of the permutation renu
+-		 if (renu[it] >= 0) // a new sub cycle
+-			{ 
+-			 i=it;
+-			 BamgVertex ti=vertices[i],tj;
+-			 while ( (j=renu[i]) >= 0){
+-				 // i is old, and j is new 
+-				 renu[i] = -1-renu[i]; // mark 
+-				 tj = vertices[j];     // save new
+-				 vertices[j]= ti;      // new <- old
+-				 i=j;     // next 
+-				 ti = tj;
+-				}  
+-			}
+-		if (quadtree){
+-			delete quadtree;
+-			quadtree = new BamgQuadtree(this);
+-		}
+-
+-		for ( it=0;it<nbv;it++) renu[i]= -renu[i]-1;
+-	}
+-	/*}}}*/
+ /*FUNCTION Mesh::SetIntCoor{{{*/
+ void Mesh::SetIntCoor(const char * strfrom) {
+ 	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SetIntCoor)*/
+@@ -3952,115 +3873,6 @@
+ 	if (number_of_errors) _error_("Fatal error: some triangles have negative areas, see above");
+ }
+ /*}}}*/
+-/*FUNCTION Mesh::ShowRegulaty{{{*/
+-void  Mesh::ShowRegulaty() const {
+-	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr>*/
+-
+-	const  double  sqrt32=sqrt(3.)*0.5; 
+-	const double  aireKh=sqrt32*0.5;
+-	D2  Beq(1,0),Heq(0.5,sqrt32);
+-	D2xD2 Br(D2xD2(Beq,Heq).t());
+-	D2xD2 B1r(Br.inv());
+-	double gammamn=1e100,hmin=1e100;
+-	double gammamx=0,hmax=0;
+-	double beta=1e100;
+-	double beta0=0;
+-	double  alpha2=0;
+-	double area=0,Marea=0;
+-	// double cf= double(coefIcoor);
+-	// double cf2= 6.*cf*cf;
+-	int nt=0;
+-	for (int it=0;it<nbt;it++)
+-	 if ( triangles[it].link){
+-		 Triangle &K=triangles[it];
+-		 double  area3= Area2((R2) K[0],(R2) K[1],(R2) K[2])/6.;
+-		 area+= area3;
+-		 D2xD2 B_Kt(K[0],K[1],K[2]);
+-		 D2xD2 B_K(B_Kt.t());
+-		 D2xD2 B1K = Br*B_K.inv();
+-		 D2xD2 BK =  B_K*B1r;
+-		 D2xD2 B1B1 = B1K.t()*B1K;
+-		 Metric MK(B1B1.x.x,B1B1.x.y,B1B1.y.y);
+-		 EigenMetric VMK(MK);
+-		 alpha2 = Max(alpha2,Max(VMK.lambda1/VMK.lambda2,VMK.lambda2/VMK.lambda1));
+-		 double betaK=0;
+-
+-		 for (int j=0;j<3;j++)
+-			{
+-			 double he= Norme2(R2(K[j],K[(j+1)%3]));
+-			 hmin=Min(hmin,he);
+-			 hmax=Max(hmax,he);
+-			 BamgVertex & v=K[j];
+-			 D2xD2 M((Metric)v);
+-			 betaK += sqrt(M.det());
+-
+-			 D2xD2 BMB = BK.t()*M*BK;
+-			 Metric M1(BMB.x.x,BMB.x.y,BMB.y.y);
+-			 EigenMetric VM1(M1);
+-			 gammamn=Min3(gammamn,VM1.lambda1,VM1.lambda2);
+-			 gammamx=Max3(gammamx,VM1.lambda1,VM1.lambda2);		
+-			}
+-		 betaK *= area3;//  1/2 (somme sqrt(det))* area(K)
+-		 Marea+= betaK;
+-		 beta=min(beta,betaK);
+-		 beta0=max(beta0,betaK);
+-		}   
+-	area*=3; 
+-	gammamn=sqrt(gammamn);
+-	gammamx=sqrt(gammamx);    
+-	_printf_("   Adaptmesh info:\n");
+-	_printf_("      number of triangles = " << nt << "\n");
+-	_printf_("      hmin = " << hmin << ", hmax=" << hmax << "\n");
+-	_printf_("      area = " << area << ", M area = " << Marea << ", M area/( |Khat| nt) = " <<  Marea/(aireKh*nt) << "\n");
+-	_printf_("      infinite-regularity(?): min = " << gammamn << ", max = " << gammamx << "\n");
+-	_printf_("      anisomax = " << pow(alpha2,0.5) << ", beta max = " << 1./pow(beta/aireKh,0.5) << ", min = " << 1./pow(beta0/aireKh,0.5) << "\n");
+-}
+-/*}}}*/
+-/*FUNCTION Mesh::ShowHistogram{{{*/
+-void  Mesh::ShowHistogram() const {
+-	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/ShowHistogram)*/
+-
+-	const long kmax=10;
+-	const double llmin = 0.5,llmax=2;
+-	const double lmin=log(llmin),lmax=log(llmax),delta= kmax/(lmax-lmin);
+-	long histo[kmax+1];
+-	long i,it,k, nbedges =0;
+-	for (i=0;i<=kmax;i++) histo[i]=0;
+-	for (it=0;it<nbt;it++)
+-	 if ( triangles[it].link) 
+-		{
+-
+-		 for (int j=0;j<3;j++)
+-			{
+-			 Triangle *ta = triangles[it].TriangleAdj(j);
+-			 if ( !ta || !ta->link || GetId(ta) >= it) 
+-				{ 
+-				 BamgVertex & vP = triangles[it][VerticesOfTriangularEdge[j][0]];
+-				 BamgVertex & vQ = triangles[it][VerticesOfTriangularEdge[j][1]];
+-				 if ( !& vP || !&vQ) continue;
+-				 R2 PQ = vQ.r - vP.r;
+-				 double l = log(LengthInterpole(vP,vQ,PQ));
+-				 nbedges++;
+-				 k = (int) ((l - lmin)*delta);
+-				 k = Min(Max(k,0L),kmax);
+-				 histo[k]++;
+-				}
+-			}
+-		}  
+-	_printf_(" --- Histogram of the unit mesh,  nb of edges = " << nbedges << "\n");
+-	_printf_("      length of edge in   | %% of edge  | Nb of edges \n"); 
+-	_printf_("      --------------------+-------------+-------------\n"); 
+-	for   (i=0;i<=kmax;i++){ 
+-		if (i==0) _printf_( "      " << setw(10) << 0.);
+-		else      _printf_( "      " << setw(10) << exp(lmin+i/delta));
+-		if (i==kmax) _printf_("          +inf   ");
+-		else      _printf_( "      " << setw(10) << exp(lmin+(i+1)/delta));
+-		_printf_("|  " << setw(10) << (long((10000. * histo[i])/ nbedges)/100.) << " |\n");
+-		_printf_("  " << histo[i] << "\n");
+-	}
+-	_printf_("      --------------------+-------------+-------------\n"); 
+-}
+-/*}}}*/
+ /*FUNCTION Mesh::SmoothingVertex{{{*/
+ void Mesh::SmoothingVertex(int nbiter,double omega ) { 
+ 	/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/SmoothingVertex)*/
+Index: ../trunk-jpl/src/c/shared/TriMesh/trimesh.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(revision 16230)
++++ ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(revision 16231)
+@@ -22,7 +22,6 @@
+ int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift,int segmentnumber, int nriftsegs,int* riftsegments, int node,int* index,int nel);
+ int UpdateSegments(int** psegments,int** psegmentmarkerlist, int* pnsegs,int* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel);
+ int FindElement(double A,double B,int* index,int nel);
+-int RemoveRifts(int** pindex,double** px,double** py,int* pnods,int** psegments,int* pnumsegs,int numrifts1,int* rifts1numsegs,int** rifts1segments,double** rifts1pairs,int nel);
+ int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs);
+ int SplitRiftSegments(int** psegments,int** psegmentmarkerlist, int* pnumsegs, int* pnumrifts,int** priftsnumsegs,int*** priftssegments,int numrifts,int nods,int nels);
+ int OrderRifts(int** priftstips,int** riftssegments,int** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels);
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16231)
+@@ -489,180 +489,6 @@
+ 	*priftspairs=riftspairs;
+ 	return noerr;
+ }/*}}}*/
+-/*FUNCTION RemoveRifts{{{*/
+-int RemoveRifts(int** pindex,double** px,double** py,int* pnods,int** psegments,int* pnumsegs,int numrifts1,int* rifts1numsegs,int** rifts1segments,int** rifts1pairs,int nel){
+-
+-	int noerr=1;
+-	int i,j,k,counter,counter1,counter2;
+-
+-	/*intermediary: */
+-	int    *riftsegments = NULL;
+-	int    *riftpairs    = NULL;
+-	int     node1,node2,node3,node4,temp_node;
+-	int     el2;
+-	int     newnods; //temporary # node counter.
+-	double  xmin,ymin;
+-	double *xreal        = NULL;
+-	double *yreal        = NULL;
+-	int    *nodes        = NULL;
+-	int    *mergingnodes = NULL;
+-	int     max_size;
+-	int     redundant;
+-
+-	/*Recover input: */
+-	int    *index    = *pindex;
+-	double *x        = *px;
+-	double *y        = *py;
+-	int     nods     = *pnods;     ;
+-	int    *segments = *psegments;
+-	int     numsegs  = *pnumsegs;
+-
+-	/*initialize newnods : */
+-	newnods=nods;
+-
+-	/*Figure out a unique value to flag x and y for node removal: */
+-	xmin=x[0];
+-	ymin=y[0];
+-	for (i=0;i<nods;i++){
+-		if (x[i]<xmin)xmin=x[i];
+-		if (y[i]<ymin)ymin=y[i];
+-	}
+-	xmin=xmin-fabs(xmin); 
+-	ymin=ymin-fabs(ymin);
+-
+-	/*Initialize two arrays, one for nodes that are going to be merged, the other with corresponding nodes being merge into: */
+-	max_size=0;
+-	for (i=0;i<numrifts1;i++){
+-		max_size+=rifts1numsegs[i];
+-	}
+-	nodes=xNew<int>(max_size);
+-	mergingnodes=xNew<int>(max_size);
+-
+-	/*Go through the rifts segments, and identify which node we are going to merge with its counterpart on the other side 
+-	 *of the rift. The way we identify this node is by looking at the element pairs, and the corresponding nodes: */
+-	counter=0;
+-	for (i=0;i<numrifts1;i++){
+-		riftsegments=rifts1segments[i];
+-		riftpairs=rifts1pairs[i];
+-		for (j=0;j<rifts1numsegs[i];j++){
+-			el2=riftpairs[2*j+1];
+-			node1=(int)*(riftsegments+3*j+0);
+-			node2=(int)*(riftsegments+3*j+1);
+-			/*Summary, el1 and el2 are facing one another across the rift. node1 and node2 belong to el1 and 
+-			 *are located on the rift. Find node3 and node4, nodes belonging to el2 and located on the rift: */
+-			for (k=0;k<rifts1numsegs[i];k++){
+-				if (*(riftsegments+3*k+2)==el2){
+-					node3=*(riftsegments+3*k+0);
+-					node4=*(riftsegments+3*k+1);
+-					break;
+-				}
+-			}
+-			/* Make sure node3 faces node1 and node4 faces node2: */
+-			if ((x[node1]==x[node4]) && (y[node1]==y[node4])){
+-				/*Swap node3 and node4:*/
+-				temp_node=node3;
+-				node3=node4;
+-				node4=temp_node;
+-			}
+-			/* Is any of these two node pairs on the tip of a rift, in which case, we don't include it in nodes or mergingnodes: */
+-			if ((node1==node3) || (node2==node4)){
+-				if(node1!=node3){
+-					/*Add node1 and node3 to nodes and mergingnodes if they have not already been added: */
+-					redundant=0;
+-					for (k=0;k<counter;k++){
+-						if ((mergingnodes[k]==node1) || (nodes[k]==node1))redundant=1;
+-					}
+-					if(!redundant){
+-						/*Ok, add node1 to nodes, and node3 to mergingnodes: */
+-						nodes[counter]=node1;
+-						mergingnodes[counter]=node3;
+-						counter++;
+-					}
+-				}
+-				if(node2!=node4){
+-					/*Add node2 and node4 to nodes and mergingnodes if they have not already been added: */
+-					redundant=0;
+-					for (k=0;k<counter;k++){
+-						if ((mergingnodes[k]==node2) || (nodes[k]==node2))redundant=1;
+-					}
+-					if(!redundant){
+-						/*Ok, add node2 to nodes, and node4 to mergingnodes: */
+-						nodes[counter]=node2;
+-						mergingnodes[counter]=node4;
+-						counter++;
+-					}
+-				}
+-			}
+-			else{
+-				/*Check that node1 is not already present in the mergingnodes: */
+-				redundant=0;
+-				for (k=0;k<counter;k++){
+-					if ((mergingnodes[k]==node1) || (nodes[k]==node1))redundant=1;
+-				}
+-				if(!redundant){
+-					/*Ok, add node1 to nodes, and node3 to mergingnodes: */
+-					nodes[counter]=node1;
+-					mergingnodes[counter]=node3;
+-					counter++;
+-				}
+-				/*Check that node2 is not already present in the mergingnodes: */
+-				redundant=0;
+-				for (k=0;k<counter;k++){
+-					if ((mergingnodes[k]==node1) || (nodes[k]==node1))redundant=1;
+-				}
+-				if(!redundant){
+-					/*Ok, add node2 to nodes, and node4 to mergingnodes: */
+-					nodes[counter]=node2;
+-					mergingnodes[counter]=node4;
+-					counter++;
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Ok, we have counter pairs of nodes (nodes and mergingnodes): start merging nodes in the triangulation: */
+-	newnods=nods;
+-	for (i=0;i<counter;i++){
+-		node1=nodes[i];
+-		node3=mergingnodes[i];
+-		/*Merge node3 into node1: */ 
+-		x[node3]=xmin; //flag  for later removal from x
+-		y[node3]=ymin; //flag  for later removal from y
+-		newnods--;
+-		for (k=0;k<nel;k++){
+-			if (*(index+3*k+0)==node3)*(index+3*k+0)=node1;
+-			if (*(index+3*k+1)==node3)*(index+3*k+1)=node1;
+-			if (*(index+3*k+2)==node3)*(index+3*k+2)=node1;
+-		}
+-	}
+-
+-	/*Reallocate x and y: */
+-	xreal=xReNew<double>(x,nods,newnods);
+-	yreal=xReNew<double>(y,nods,newnods);
+-	counter1=0;
+-	counter2=0;
+-	for (i=0;i<nods;i++){
+-		if (x[i]!=xmin){
+-			xreal[counter1]=x[i];
+-			counter1++;
+-		}
+-		if (y[i]!=ymin){
+-			yreal[counter2]=y[i];
+-			counter2++;
+-		}
+-	}
+-	xDelete<double>(x); x=xreal;
+-	xDelete<double>(y); y=yreal;
+-
+-	/*Assign output pointers:*/
+-	*pindex=index;
+-	*px=x;
+-	*py=y;
+-	*pnods=newnods;
+-	*psegments=segments;
+-	*pnumsegs=numsegs;
+-	return noerr;
+-}/*}}}*/
+ /*FUNCTION IsRiftPresent{{{*/
+ int IsRiftPresent(int* priftflag,int* pnumrifts,int* segmentmarkerlist,int nsegs){
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16230)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 16231)
+@@ -20,12 +20,4 @@
+ int  RiftIsFrozen(Loads* loads,int analysis_type);
+ void RiftFreezeConstraints(Loads* loads,int analysis_type);
+ 
+-/*rifts, trial and errors: */
+-int  RiftIsPreStable(Loads* loads);
+-void RiftSetPreStable(Loads* loads);
+-void RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads);
+-void RiftMaxPenetrationInInputs(Loads* loads);
+-int  RiftPotentialUnstableConstraints(Loads* loads);
+-int  RiftIsMaterialStable(Loads* loads);
+-
+ #endif  /* _CONSTRAINTSSTATEX_H */
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 16231)
+@@ -158,190 +158,3 @@
+ 
+ }
+ /*}}}*/
+-
+-/*diverse trials and errors: */
+-/*RiftIsMaterialStable(Loads* loads){{{*/
+-int RiftIsMaterialStable(Loads* loads){
+-
+-	int i;
+-
+-	Riftfront* riftfront=NULL;
+-	int found=0;
+-	int mpi_found=0;
+-
+-	/*go though loads, and if non-linearity of the material has converged, let all penalties know: */
+-	for (i=0;i<loads->Size();i++){
+-
+-		if(RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-
+-			if (riftfront->IsMaterialStable()){
+-				found=1;
+-				/*do not break! all penalties should get informed the non-linearity converged!*/
+-			}
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	found=mpi_found;
+-
+-	return found;
+-}
+-/*}}}*/
+-/*RiftIsPreStable(Loads* loads){{{*/
+-int RiftIsPreStable(Loads* loads){
+-
+-	int i;
+-
+-	Riftfront* riftfront=NULL;
+-	int found=0;
+-	int mpi_found=0;
+-
+-	/*go though loads, and figure out if one of the penpair loads is still not stable: */
+-	for (i=0;i<loads->Size();i++){
+-
+-		if(RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-
+-			if (riftfront->PreStable()==0){
+-				found=1;
+-				break;
+-			}
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&found,&mpi_found,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&mpi_found,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	found=mpi_found;
+-
+-	if (found){
+-		/*We found an unstable constraint. : */
+-		return 0;
+-	}
+-	else{
+-		return 1;
+-	}
+-}
+-/*}}}*/
+-/*RiftSetPreStable(Loads* loads){{{*/
+-void RiftSetPreStable(Loads* loads){
+-
+-	/*go though loads, and set loads to pre stable.:*/
+-	for(int i=0;i<loads->Size();i++){
+-		if(RiftfrontEnum==loads->GetEnum(i)){
+-			Riftfront* riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-			riftfront->SetPreStable();
+-		}
+-	}
+-}
+-/*}}}*/
+-/*RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads){{{*/
+-void RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads){
+-
+-	int			i;
+-
+-	/* generic object pointer: */
+-	Riftfront* riftfront=NULL;
+-
+-	int unstable;
+-	int sum_num_unstable_constraints;
+-	int num_unstable_constraints=0;	
+-
+-	/*Enforce constraints: */
+-	for (i=0;i<loads->Size();i++){
+-
+-		if (RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-
+-			riftfront->PreConstrain(&unstable);
+-
+-			num_unstable_constraints+=unstable;
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	num_unstable_constraints=sum_num_unstable_constraints;
+-
+-	/*Assign output pointers: */
+-	*pnum_unstable_constraints=num_unstable_constraints;
+-
+-}
+-/*}}}*/
+-/*RiftMaxPenetrationInInputs(Loads* loads){{{*/
+-void RiftMaxPenetrationInInputs(Loads* loads){
+-
+-	int			i;
+-
+-	/* generic object pointer: */
+-	Riftfront* riftfront=NULL;
+-
+-	/*rift penetration: */
+-	IssmDouble max_penetration=0;
+-	IssmDouble mpi_max_penetration;
+-	IssmDouble penetration;
+-
+-	/*Ok, we are going to find the node pairs which are not penetrating, even though they 
+-	 * are penalised. We will release only the one with has least <0 penetration. : */
+-
+-	max_penetration=0;
+-	for (i=0;i<loads->Size();i++){
+-
+-		if (RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-
+-			riftfront->MaxPenetration(&penetration);
+-
+-			if (penetration>max_penetration)max_penetration=penetration;
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&max_penetration,&mpi_max_penetration,1,ISSM_MPI_DOUBLE,ISSM_MPI_MAX,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&mpi_max_penetration,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());                
+-	max_penetration=mpi_max_penetration;
+-
+-	/*feed max_penetration to inputs: */
+-	for(i=0;i<loads->Size();i++){
+-		Load* load=(Load*)loads->GetObjectByOffset(i);
+-		load->InputUpdateFromVector(&max_penetration,MaxPenetrationEnum,ConstantEnum);
+-	}
+-}
+-/*}}}*/
+-/*RiftPotentialUnstableConstraints(Loads* loads){{{*/
+-int RiftPotentialUnstableConstraints(Loads* loads){
+-
+-	int			i;
+-
+-	/* generic object pointer: */
+-	Riftfront* riftfront=NULL;
+-
+-	/*Ok, we are going to find the node pairs which are not penetrating, even though they 
+-	 * are penalised. We will release only the one with has least <0 penetration. : */
+-	int unstable=0;
+-	int sum_num_unstable_constraints=0;
+-	int num_unstable_constraints=0;
+-
+-	for (i=0;i<loads->Size();i++){
+-
+-		if (RiftfrontEnum==loads->GetEnum(i)){
+-
+-			riftfront=(Riftfront*)loads->GetObjectByOffset(i);
+-
+-			riftfront->PotentialUnstableConstraint(&unstable);
+-
+-			num_unstable_constraints+=unstable;
+-		}
+-	}
+-
+-	ISSM_MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&sum_num_unstable_constraints,1,ISSM_MPI_INT,0,IssmComm::GetComm());                
+-	num_unstable_constraints=sum_num_unstable_constraints;
+-
+-	return num_unstable_constraints;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 16231)
+@@ -1,42 +0,0 @@
+-/* \file PetscVectorToDoubleVector.cpp
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <string>
+-
+-/*Petsc includes: */
+-#include <petscmat.h>
+-#include <petscvec.h>
+-#include <petscksp.h>
+-
+-#include "../../../shared/shared.h"
+-
+-void PetscVectorToDoubleVector(double** pvector, int* prows, Vec petsc_vector){
+-
+-	int     rows;
+-	double *vector = NULL;
+-
+-	/*Get size of vector: */
+-	if(petsc_vector){
+-		VecGetSize(petsc_vector,&rows);
+-		if(rows){
+-			int* idxm=xNew<int>(rows);
+-			vector=xNew<double>(rows);
+-			for(int i=0;i<rows;i++)idxm[i]=i;
+-			VecGetValues(petsc_vector,rows,idxm,vector);
+-			xDelete<int>(idxm);
+-		}
+-	}
+-	else{
+-		rows=0;
+-	}
+-
+-	/*Assign output pointers: */
+-	*pvector=vector;
+-	*prows=rows;
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 16231)
+@@ -1,47 +0,0 @@
+-/* \file PetscMatrixToDoubleMatrix.cpp
+- * \brief: convert a sparse or dense Petsc matrix into a matlab matrix
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <string>
+-
+-/*Petsc includes: */
+-#include <petscmat.h>
+-#include <petscvec.h>
+-#include <petscksp.h>
+-
+-/*Petsc includes: */
+-#include "../../../shared/shared.h"
+-
+-void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat petsc_matrix){
+-
+-	/*output: */
+-	int     i;
+-	double* matrix=NULL;
+-	int     rows,cols;
+-
+-	/*Some needed information: */
+-	MatGetSize(petsc_matrix,&rows,&cols);
+-
+-	int* idxm=xNew<int>(rows);
+-	int* idxn=xNew<int>(cols);
+-
+-	for(i=0;i<rows;i++)idxm[i]=i;
+-	for(i=0;i<cols;i++)idxn[i]=i;
+-
+-	matrix=xNew<double>(rows*cols);
+-	MatGetValues(petsc_matrix,rows,idxm,cols,idxn,matrix);
+-
+-	xDelete<int>(idxm);
+-	xDelete<int>(idxn);
+-
+-	/*Assign output pointers: */
+-	*pmatrix=matrix;
+-	*prows=rows;
+-	*pcols=cols;
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 16230)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 16231)
+@@ -38,7 +38,4 @@
+ NormType ISSMToPetscNormMode(NormMode mode);
+ MatType ISSMToPetscMatrixType(MatrixType type);
+ 
+-void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat matrix);
+-void PetscVectorToDoubleVector(double** pvector, int* prows, Vec vector);
+-
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16230)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16231)
+@@ -766,8 +766,6 @@
+ 					./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\
+ 					./toolkits/petsc/patches/NewMat.cpp\
+ 					./toolkits/petsc/patches/VecFree.cpp\
+-					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp\
+-					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16230)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16231)
+@@ -514,8 +514,6 @@
+ 					./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+ 					./toolkits/petsc/patches/NewMat.cpp
+ 					./toolkits/petsc/patches/VecFree.cpp
+-					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+-					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
+ 					./toolkits/petsc/patches/KSPFree.cpp
+ 					./toolkits/petsc/patches/MatFree.cpp
+ 					./toolkits/petsc/patches/MatMultPatch.cpp
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16230)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16231)
+@@ -95,7 +95,6 @@
+ 		int   Penetration(IssmDouble* ppenetration);
+ 		int   MaxPenetration(IssmDouble* ppenetration);
+ 		int   PotentialUnstableConstraint(int* punstable);
+-		int   IsMaterialStable(void);
+ 		bool  IsInput(int name);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16231)
+@@ -732,23 +732,6 @@
+ 	else return 0;
+ }
+ /*}}}*/
+-/*FUNCTION Riftfront::IsMaterialStable {{{*/
+-int   Riftfront::IsMaterialStable(void){
+-
+-	IssmDouble converged=0;
+-
+-	this->inputs->GetInputValue(&converged,ConvergedEnum);
+-
+-	if(reCast<int,IssmDouble>(converged)){
+-		/*ok, material non-linearity has converged. If that was already the case, we keep 
+-		 * constraining the rift front. If it was not, and this is the first time the material 
+-		 * has converged, we start constraining now!: */
+-		this->material_converged=1;
+-	}
+-
+-	return this->material_converged;
+-}
+-/*}}}*/
+ /*FUNCTION Riftfront::MaxPenetration {{{*/
+ int   Riftfront::MaxPenetration(IssmDouble* ppenetration){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16230)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16231)
+@@ -3030,83 +3030,6 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::ReduceMatrixFS {{{*/
+-void Penta::ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){
+-
+-	int    i,j;
+-	IssmDouble Kii[24][24];
+-	IssmDouble Kib[24][3];
+-	IssmDouble Kbb[3][3];
+-	IssmDouble Kbi[3][24];
+-	IssmDouble Kbbinv[3][3];
+-	IssmDouble Kright[24][24];
+-
+-	/*Create the four matrices used for reduction */
+-	for(i=0;i<24;i++){
+-		for(j=0;j<24;j++){
+-			Kii[i][j]=*(Ke_temp+27*i+j);
+-		}
+-		for(j=0;j<3;j++){
+-			Kib[i][j]=*(Ke_temp+27*i+j+24);
+-		}
+-	}
+-	for(i=0;i<3;i++){
+-		for(j=0;j<24;j++){
+-			Kbi[i][j]=*(Ke_temp+27*(i+24)+j);
+-		}
+-		for(j=0;j<3;j++){
+-			Kbb[i][j]=*(Ke_temp+27*(i+24)+j+24);
+-		}
+-	}
+-
+-	/*Inverse the matrix corresponding to bubble part Kbb */
+-	Matrix3x3Invert(&Kbbinv[0][0], &Kbb[0][0]);
+-
+-	/*Multiply matrices to create the reduce matrix Ke_reduced */
+-	TripleMultiply(&Kib[0][0],24,3,0,
+-				&Kbbinv[0][0],3,3,0,
+-				&Kbi[0][0],3,24,0,
+-				&Kright[0][0],0);
+-
+-	/*Affect value to the reduced matrix */
+-	for(i=0;i<24;i++) for(j=0;j<24;j++) *(Ke_reduced+24*i+j)=Kii[i][j]-Kright[i][j];
+-}
+-/*}}}*/
+-/*FUNCTION Penta::ReduceVectorFS {{{*/
+-void Penta::ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){
+-
+-	int    i,j;
+-	IssmDouble Pi[24];
+-	IssmDouble Pb[3];
+-	IssmDouble Kbb[3][3];
+-	IssmDouble Kib[24][3];
+-	IssmDouble Kbbinv[3][3];
+-	IssmDouble Pright[24];
+-
+-	/*Create the four matrices used for reduction */
+-	for(i=0;i<24;i++) Pi[i]=*(Pe_temp+i);
+-	for(i=0;i<3;i++) Pb[i]=*(Pe_temp+i+24);
+-	for(j=0;j<3;j++){
+-		for(i=0;i<24;i++){
+-			Kib[i][j]=*(Ke_temp+3*i+j);
+-		}
+-		for(i=0;i<3;i++){
+-			Kbb[i][j]=*(Ke_temp+3*(i+24)+j);
+-		}
+-	}
+-
+-	/*Inverse the matrix corresponding to bubble part Kbb */
+-	Matrix3x3Invert(&Kbbinv[0][0], &Kbb[0][0]);
+-
+-	/*Multiply matrices to create the reduce matrix Ke_reduced */
+-	TripleMultiply(&Kib[0][0],24,3,0,
+-				&Kbbinv[0][0],3,3,0,
+-				&Pb[0],3,1,0,&Pright[0],0);
+-
+-	/*Affect value to the reduced matrix */
+-	for(i=0;i<24;i++) *(Pe_reduced+i)=Pi[i]-Pright[i];
+-}
+-/*}}}*/
+ /*FUNCTION Penta::RequestedOutput{{{*/
+ void Penta::RequestedOutput(int output_enum,int step,IssmDouble time){
+ 	if(IsInput(output_enum)){
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16230)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16231)
+@@ -223,8 +223,6 @@
+ 		bool           IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool           NoIceInElement(void); 
+ 		IssmDouble     MinEdgeLength(IssmDouble xyz_list[6][3]);
+-		void	         ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
+-		void	         ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
+ 		void	         SetClone(int* minranks);
+ 		Tria*	         SpawnTria(int location);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16231-16232.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16231-16232.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16231-16232.diff	(revision 16556)
@@ -0,0 +1,181 @@
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 16231)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 16232)
+@@ -37,7 +37,6 @@
+ 			int  swap();
+ 			AdjacentTriangle Adj() const;
+ 			BamgVertex* EdgeVertex(const int & i) const;
+-			BamgVertex* OppositeVertex() const;
+ 			Icoor2& det() const;
+ 	};
+ }
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 16231)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 16232)
+@@ -43,11 +43,6 @@
+ 		return t->vertices[VerticesOfTriangularEdge[a][i]];
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION AdjacentTriangle::OppositeVertex {{{*/
+-	BamgVertex* AdjacentTriangle::OppositeVertex() const {
+-		return t->vertices[bamg::OppositeVertex[a]]; 
+-	}
+-	/*}}}*/
+ 	/*FUNCTION AdjacentTriangle::det {{{*/
+ 	Icoor2 & AdjacentTriangle::det() const {
+ 		return t->det;
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 16231)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 16232)
+@@ -1,13 +0,0 @@
+-/*!\file:  OutputRiftsx.h
+- * \brief header file for rift results output.
+- */ 
+-
+-#ifndef _OUTPUTRIFTSX_H
+-#define _OUTPUTRIFTSX_H
+-
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void OutputRiftsx( Vec* priftproperties, Loads* loads, int numrifts);
+-
+-#endif  /* _OUTPUTRIFTSX_H */
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 16231)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 16232)
+@@ -1,28 +0,0 @@
+-/*!\file OutputRiftsx
+- * \brief: output results from stressbalance solution, for rifts. Notably: fraction of 
+- * melange, and penetration.
+- */
+-
+-#include "./OutputRiftsx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-
+-void OutputRiftsx( Vec* priftproperties, Loads* loads, int numrifts){
+-
+-	/*output: */
+-	Vec riftproperties=NULL;
+-
+-	/*Allocate grad_g: */
+-	riftproperties=NewVec(numrifts,IssmComm::GetComm());
+-
+-	/*Compute rift properties : */
+-	loads->OutputRifts(riftproperties);
+-
+-	/*Assemble vector: */
+-	VecAssemblyBegin(riftproperties);
+-	VecAssemblyEnd(riftproperties);
+-
+-	/*Assign output pointers: */
+-	*priftproperties=riftproperties;
+-}
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16231)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16232)
+@@ -92,8 +92,6 @@
+ 		int   Constrain(int* punstable);
+ 		void  FreezeConstraints(void);
+ 		bool  IsFrozen(void);
+-		int   Penetration(IssmDouble* ppenetration);
+-		int   MaxPenetration(IssmDouble* ppenetration);
+ 		int   PotentialUnstableConstraint(int* punstable);
+ 		bool  IsInput(int name);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16231)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16232)
+@@ -732,84 +732,6 @@
+ 	else return 0;
+ }
+ /*}}}*/
+-/*FUNCTION Riftfront::MaxPenetration {{{*/
+-int   Riftfront::MaxPenetration(IssmDouble* ppenetration){
+-
+-	IssmDouble penetration;
+-	IssmDouble vx1;
+-	IssmDouble vy1;
+-	IssmDouble vx2;
+-	IssmDouble vy2;
+-
+-	/*Objects: */
+-	Tria  *tria1 = NULL;
+-	Tria  *tria2 = NULL;
+-
+-	/*enum of element? */
+-	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+-
+-	/*recover elements on both side of rift: */
+-	tria1=(Tria*)elements[0];
+-	tria2=(Tria*)elements[1];
+-
+-	/*recover velocity: */
+-	tria1->GetInputValue(&vx1,nodes[0],VxEnum);
+-	tria2->GetInputValue(&vx2,nodes[1],VxEnum);
+-	tria1->GetInputValue(&vy1,nodes[0],VyEnum);
+-	tria2->GetInputValue(&vy2,nodes[1],VyEnum);
+-
+-	/*Node1 faces node2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */
+-	penetration=(vx2-vx1)*normal[0]+(vy2-vy1)*normal[1];
+-
+-	/*Now, we return penetration only if we are active!: */
+-	if(this->active==0) penetration=-1.;
+-
+-	/*If we are zigzag locked, same thing: */
+-	if(this->counter>this->penalty_lock) penetration=-1.;
+-
+-	/*assign output pointer: */
+-	*ppenetration=penetration;
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION Riftfront::Penetration {{{*/
+-int   Riftfront::Penetration(IssmDouble* ppenetration){
+-
+-	IssmDouble    vx1;
+-	IssmDouble    vy1;
+-	IssmDouble    vx2;
+-	IssmDouble    vy2;
+-
+-	IssmDouble    penetration;
+-
+-	/*Objects: */
+-	Tria     *tria1       = NULL;
+-	Tria     *tria2       = NULL;
+-
+-	/*enum of element? */
+-	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+-
+-	/*recover elements on both side of rift: */
+-	tria1=(Tria*)elements[0];
+-	tria2=(Tria*)elements[1];
+-
+-	/*First recover velocity: */
+-	tria1->GetInputValue(&vx1,nodes[0],VxEnum);
+-	tria2->GetInputValue(&vx2,nodes[1],VxEnum);
+-	tria1->GetInputValue(&vy1,nodes[0],VyEnum);
+-	tria2->GetInputValue(&vy2,nodes[1],VyEnum);
+-
+-	/*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */
+-	penetration=(vx2-vx1)*normal[0]+(vy2-vy1)*normal[1];
+-
+-	/*Now, we return penetration only if we are active!: */
+-	if(this->active==0)penetration=0;
+-
+-	/*assign output pointer: */
+-	*ppenetration=penetration;
+-	return 1;
+-}
+-/*}}}*/
+ /*FUNCTION Riftfront::PotentialUnstableConstraint {{{*/
+ int   Riftfront::PotentialUnstableConstraint(int* punstable){
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16232-16233.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16232-16233.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16232-16233.diff	(revision 16556)
@@ -0,0 +1,1344 @@
+Index: ../trunk-jpl/src/c/kml/KML_Object.h
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Object.h	(revision 16232)
++++ ../trunk-jpl/src/c/kml/KML_Object.h	(revision 16233)
+@@ -36,11 +36,9 @@
+ 		virtual void  Read(FILE* fid,char* kstr)=0;
+ 		virtual void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		virtual void  AddAttrib(const char* name,const char* value);
+-		virtual void  FindAttrib(char** pvalue,char* name,char* deflt);
+ 		virtual void  WriteAttrib(FILE* fid,const char* indent);
+ 		virtual void  AddCommnt(int ncom,char** pcom);
+ 		virtual void  AddCommnt(char* value);
+-		virtual void  FindCommnt(char** pvalue,int inum);
+ 		virtual void  WriteCommnt(FILE* fid,const char* indent);
+ 
+ };
+Index: ../trunk-jpl/src/c/kml/KML_Object.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Object.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/kml/KML_Object.cpp	(revision 16233)
+@@ -294,33 +294,6 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION KML_Object::FindAttrib {{{*/
+-void  KML_Object::FindAttrib(char** pvalue,char* name,char* deflt){
+-
+-	int   i;
+-	KML_Attribute* katt=NULL;
+-
+-/*  loop over any attributes for the object  */
+-
+-	if (attrib->Size())
+-		for (i=0; i<attrib->Size(); i++)
+-			if (!strcmp(((KML_Attribute *)attrib->GetObjectByOffset(i))->name,name)) {
+-				katt=(KML_Attribute *)attrib->GetObjectByOffset(i);
+-				break;
+-			}
+-
+-/*  if found, get the value; otherwise use the default  */
+-
+-	if (katt)
+-		katt->Get(pvalue,deflt);
+-	else {
+-		*pvalue=xNew<char>(strlen(deflt)+1);
+-		memcpy(*pvalue,deflt,(strlen(deflt)+1)*sizeof(char));
+-	}
+-
+-	return;
+-}
+-/*}}}*/
+ /*FUNCTION KML_Object::WriteAttrib {{{*/
+ void  KML_Object::WriteAttrib(FILE* filout,const char* indent){
+ 
+@@ -362,24 +335,6 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION KML_Object::FindCommnt {{{*/
+-void  KML_Object::FindCommnt(char** pvalue,int inum){
+-
+-	KML_Comment* kcom=NULL;
+-
+-/*  loop over any comments for the object  */
+-
+-	if (inum <= commnt->Size())
+-		kcom=(KML_Comment *)commnt->GetObjectByOffset(inum-1);
+-
+-/*  if found, get the value; otherwise use the NULL  */
+-
+-	if (kcom)
+-		kcom->Get(pvalue);
+-
+-	return;
+-}
+-/*}}}*/
+ /*FUNCTION KML_Object::WriteCommnt {{{*/
+ void  KML_Object::WriteCommnt(FILE* filout,const char* indent){
+ 
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 16233)
+@@ -179,28 +179,6 @@
+ 		return nbv-nbvold;
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION ListofIntersectionTriangles::NewSubSeg{{{*/
+-	void  ListofIntersectionTriangles::NewSubSeg(GeomEdge *e,double s0,double s1){ 
+-		long int verbosity=0;
+-		if (NbSeg>=MaxNbSeg) {
+-			int mneo= MaxNbSeg;
+-			MaxNbSeg *= 2;
+-			if (verbosity>3){
+-				_printf_("   reshape lSegsI from " << mneo << " to " << MaxNbSeg << "\n");
+-			}
+-			_assert_(lSegsI && NbSeg<MaxNbSeg);
+-			SegInterpolation * lEn =  new SegInterpolation[MaxNbSeg];
+-			for (int i=0;i< NbSeg;i++) lEn[i] = lSegsI[MaxNbSeg]; // copy old to new            
+-			delete []  lSegsI; // remove old
+-			lSegsI = lEn;        
+-		}
+-		if (NbSeg) lSegsI[NbSeg-1].last=Size;
+-		lSegsI[NbSeg].e=e;
+-		lSegsI[NbSeg].sBegin=s0;
+-		lSegsI[NbSeg].sEnd=s1;     
+-		NbSeg++;           
+-	}
+-	/*}}}*/
+ 	/*FUNCTION ListofIntersectionTriangles::ReShape{{{*/
+ 	void ListofIntersectionTriangles::ReShape(){ 
+ 
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.h	(revision 16233)
+@@ -30,7 +30,6 @@
+ 
+ 			//Methods
+ 			int  Locked() const;
+-			int  MarkUnSwap() const;
+ 			int  GetAllFlag_UnSwap() const;
+ 			void SetLock();
+ 			void SetAdj2(const AdjacentTriangle &ta, int l=0);
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16233)
+@@ -52,35 +52,6 @@
+ 	AdjacentTriangle Triangle::Adj(int i)  const {
+ 		return AdjacentTriangle(adj[i],AdjEdgeIndex[i]&3);
+ 	};/*}}}*/
+-	/*FUNCTION Triangle::Anisotropy{{{*/
+-	double Triangle::Anisotropy() const{
+-
+-		double lmin,lmax;
+-
+-		/*Get three vertices A,B and C*/
+-		R2 A=*this->vertices[0];
+-		R2 B=*this->vertices[1];
+-		R2 C=*this->vertices[2];
+-
+-		/*Compute edges*/
+-		R2 e1=B-A;
+-		R2 e2=C-A;
+-		R2 e3=B-C;
+-
+-		/*Compute edge length*/
+-		double l1=Norme2(e1);
+-		double l2=Norme2(e2);
+-		double l3=Norme2(e3);
+-
+-		lmin=l1;
+-		lmin=min(lmin,l2);
+-		lmin=min(lmin,l3);
+-		lmax=l1;
+-		lmax=max(lmax,l2);
+-		lmax=max(lmax,l3);
+-
+-		return lmax/lmin;
+-	};/*}}}*/
+ 	/*FUNCTION Triangle::Length{{{*/
+ 	double Triangle::Length() const{
+ 
+@@ -134,53 +105,6 @@
+ 		return;
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION Triangle::FindBoundaryEdge{{{*/
+-	AdjacentTriangle Triangle::FindBoundaryEdge(int i) const{
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Mesh2.cpp/FindBoundaryEdge)*/
+-
+-		/*Intermediary*/
+-		Triangle* ttc=NULL;
+-		int k,j,jc;
+-
+-		// call current triangle t
+-		Triangle* t = (Triangle*)this;
+-
+-		//is the current triangle inside or outside?
+-		int outside=!link  ;
+-
+-		// EdgesVertexTriangle[3][2] = {{1,2},{2,0},{0,1}};
+-		// initialize j as the first vertex of the ith edge
+-		j=EdgesVertexTriangle[i][0];
+-
+-		//Loop over the adjacent triangle of t
+-		k=0;
+-		do{
+-			//keep track of outside
+-			int outsidep = outside;
+-			//increment k
+-			k++;
+-			//Get ttc, adjacent triangle of t with respect to vertex j
+-			ttc =  t->adj[j];
+-			//is the current triangle inside or outside?
+-			outside = !ttc->link;
+-			//if both previous triangle are outside, return
+-			if (outside+outsidep == 1) return AdjacentTriangle(t,j);
+-
+-			//update t and j
+-			t = ttc;
+-			//NextEdge[3] = {1,2,0};
+-			jc = NextEdge[t->AdjEdgeIndex[j]&3];
+-			j = NextEdge[jc];
+-
+-			//check number of iterations
+-			if (k>=2000){
+-				_error_("too many iteration in Triangle::FindBoundaryEdge (k>=2000)");
+-			}
+-		} while (this!= t);
+-		//not found, return empty triangle
+-		return AdjacentTriangle(NULL,0);
+-	}
+-	/*}}}*/
+ 	/*FUNCTION Triangle::GetAllflag{{{*/
+ 	int    Triangle::GetAllflag(int a){
+ 		return AdjEdgeIndex[a] & 1020;
+Index: ../trunk-jpl/src/c/bamg/BamgQuadtree.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgQuadtree.h	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/BamgQuadtree.h	(revision 16233)
+@@ -51,7 +51,6 @@
+ 			~BamgQuadtree();
+ 
+ 			BamgVertex      *NearestVertex(Icoor1 i,Icoor1 j);
+-			BamgVertex      *NearestVertexWithNormal(Icoor1  i,Icoor1 j);
+ 			BamgQuadtreeBox *NewBamgQuadtreeBox(void);
+ 			BamgVertex      *ToClose(BamgVertex &,double ,Icoor1,Icoor1);
+ 			void             Add(BamgVertex &w);
+Index: ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/AdjacentTriangle.cpp	(revision 16233)
+@@ -17,11 +17,6 @@
+ 		return t->AdjEdgeIndex[a] & 4;
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION AdjacentTriangle::MarkUnSwap {{{*/
+-	int  AdjacentTriangle::MarkUnSwap() const {
+-		return t->AdjEdgeIndex[a] & 8;
+-	}
+-	/*}}}*/
+ 	/*FUNCTION AdjacentTriangle::GetAllFlag_UnSwap {{{*/
+ 	int  AdjacentTriangle::GetAllFlag_UnSwap() const {
+ 		// take all flag except MarkUnSwap
+Index: ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16233)
+@@ -390,113 +390,6 @@
+ 
+ 	}
+ 	/*}}}*/
+-	/*FUNCTION BamgQuadtree::NearestVertexWithNormal{{{*/
+-	BamgVertex*  BamgQuadtree::NearestVertexWithNormal(Icoor1 i,Icoor1 j) {
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, BamgQuadtree.cpp/NearestVertexWithNormal)*/
+-
+-		BamgQuadtreeBox * pb[ MaxDepth ];
+-		int  pi[ MaxDepth  ];
+-		Icoor1 ii[  MaxDepth ], jj [ MaxDepth];
+-		int l; // level
+-		BamgQuadtreeBox * b;
+-		long     h =MaxISize,h0;
+-		long     hb=MaxISize;
+-		Icoor1  i0=0,j0=0;
+-		Icoor1  iplus( i<MaxISize?(i<0?0:i):MaxISize-1);
+-		Icoor1  jplus( j<MaxISize?(j<0?0:j):MaxISize-1);
+-
+-		BamgVertex *vn=0;
+-
+-		// init for optimisation ---
+-		b = root;
+-		register long  n0;
+-		if (!root->nbitems)
+-		 return vn; // empty tree 
+-
+-		while( (n0 = b->nbitems) < 0) 
+-		  {
+-			// search the non empty 
+-			// BamgQuadtreeBox containing  the point (i,j)
+-			register Icoor1 hb2 = hb >> 1 ;
+-			register  int k = IJ(iplus,jplus,hb2);// BamgQuadtreeBox number of size hb2 contening i;j
+-			register BamgQuadtreeBox * b0= b->b[k];
+-			if ( ( b0 == 0) || (b0->nbitems == 0) ) 
+-			 break; // null box or empty   => break 	    
+-			b=b0;	
+-			i0 += I_IJ(k,hb2); // i orign of BamgQuadtreeBox
+-			j0 += J_IJ(k,hb2); // j orign of BamgQuadtreeBox 
+-			hb = hb2; 
+-		  }
+-
+-		if ( n0 > 0) 
+-		  {  
+-			for(register int k=0;k<n0;k++)
+-			  {
+-				I2 i2 =  b->v[k]->i;
+-				//   try if is in the right direction -- 
+-				h0 = NORM(iplus,i2.x,jplus,i2.y);
+-				if (h0 <h) {
+-					h = h0;
+-					vn = b->v[k];}
+-			  }
+-			if (vn) return vn; 
+-		  }
+-		// general case -----
+-		// INITIALISATION OF THE HEAP 
+-		l =0; // level 
+-		pb[0]= b;
+-		pi[0]=b->nbitems>0 ?(int)  b->nbitems : 4  ;
+-		ii[0]=i0;
+-		jj[0]=j0;
+-		h=hb;
+-		do {   // walk on the tree  
+-			b= pb[l];
+-			while (pi[l]--) // loop on 4 element of the box
+-			  { 	      
+-				int k = pi[l];
+-
+-				if (b->nbitems>0) // BamgVertex BamgQuadtreeBox none empty
+-				  { 
+-					I2 i2 =  b->v[k]->i;
+-					// if good direction when try -- 
+-
+-					h0 = NORM(iplus,i2.x,jplus,i2.y);
+-					if (h0 <h) 
+-					  {
+-						h = h0;
+-						vn = b->v[k];
+-					  }
+-				  }
+-				else // Pointer BamgQuadtreeBox 
+-				  { 
+-					register BamgQuadtreeBox *b0=b;
+-					if ((b=b->b[k])) 
+-					  {
+-						hb >>=1 ; // div by 2
+-						register Icoor1 iii = ii[l]+I_IJ(k,hb);
+-						register Icoor1 jjj = jj[l]+J_IJ(k,hb);
+-
+-						if  (INTER_SEG(iii,iii+hb,iplus-h,iplus+h) && INTER_SEG(jjj,jjj+hb,jplus-h,jplus+h)) 
+-						  {
+-							pb[++l]=  b;
+-							pi[l]= b->nbitems>0 ?(int)  b->nbitems : 4  ;
+-							ii[l]= iii;
+-							jj[l]= jjj;
+-
+-						  }
+-						else
+-						 b=b0, hb <<=1 ;
+-					  }
+-					else
+-					 b=b0;
+-				  }
+-			  }
+-			hb <<= 1; // mul by 2 
+-		} while (l--);
+-
+-		return vn;
+-	}
+-	/*}}}*/
+ 	/*FUNCTION BamgQuadtree::NewBamgQuadtreeBox {{{*/
+ 	BamgQuadtree::BamgQuadtreeBox* BamgQuadtree::NewBamgQuadtreeBox(void){
+ 
+Index: ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h	(revision 16233)
+@@ -65,7 +65,6 @@
+ 			void   SplitEdge(const Mesh &,const R2 &,const R2 &,int nbegin=0);
+ 			double Length();
+ 			long   NewPoints(BamgVertex *,long &nbv,long maxnbv);
+-			void   NewSubSeg(GeomEdge *e,double s0,double s1);
+ 			void   ReShape();
+ 	};
+ 
+Index: ../trunk-jpl/src/c/bamg/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16233)
+@@ -39,7 +39,6 @@
+ 
+ 			//Methods
+ 			void              Echo();
+-			double            Anisotropy() const;
+ 			double            Length() const;
+ 			int               swap(short a1,int=0);
+ 			long              Optim(short a,int =0);
+@@ -49,7 +48,6 @@
+ 			void              SetAllFlag(int a,int f);
+ 			double            QualityQuad(int a,int option=1) const;
+ 			short             NuEdgeTriangleAdj(int i) const;
+-			AdjacentTriangle  FindBoundaryEdge(int  i) const;
+ 			AdjacentTriangle  Adj(int i) const;
+ 			Triangle         *TriangleAdj(int i) const;
+ 			Triangle         *Quadrangle(BamgVertex  *& v0,BamgVertex *& v1,BamgVertex *& v2,BamgVertex *& v3) const;
+Index: ../trunk-jpl/src/c/bamg/Metric.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Metric.h	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/Metric.h	(revision 16233)
+@@ -71,7 +71,6 @@
+ 			void   Max(double  a);
+ 			void   Minh(double h);
+ 			void   Maxh(double h);
+-			void   Isotrope();
+ 			double hmin()   const;
+ 			double hmax()   const;
+ 			double lmax()   const;
+Index: ../trunk-jpl/src/c/bamg/EigenMetric.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 16233)
+@@ -130,10 +130,6 @@
+ 	double EigenMetric::hmax() const {
+ 		return sqrt(1/bamg::Max(bamg::Min(lambda1,lambda2),1e-30));
+ 	}/*}}}*/
+-	/*FUNCTION EigenMetric::Isotrope{{{*/
+-	void   EigenMetric::Isotrope() {
+-		lambda1=lambda2=bamg::Max(lambda1,lambda2);
+-	}/*}}}*/
+ 	/*FUNCTION EigenMetric::lmax{{{*/
+ 	double EigenMetric::lmax() const {
+ 		return bamg::Max3(lambda1,lambda2,1e-30);
+Index: ../trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 16233)
+@@ -366,21 +366,3 @@
+ 	Ainv[8]=(A[0]*A[4]-A[1]*A[3])/det; /* = (a*e-b*d)/det */
+ 
+ }/*}}}*/
+-/*FUNCTION MatrixTranspose(IssmDouble* Adet,IssmDouble* A) {{{*/
+-void MatrixTranspose(IssmDouble* tA,IssmDouble* A, int nrows, int ncols){
+-	/*Transpose a n*m matrix*/
+-
+-	int i,j;
+-
+-	/*Check the the matrix has been allocated*/
+-	_assert_(tA);
+-
+-	/*Transpose*/
+-	for(i=0;i<ncols;i++){
+-		for(j=0;j<nrows;j++){
+-			tA[i*nrows+j]=A[j*ncols+i];
+-		}
+-	}
+-
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Matrix/matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Matrix/matrix.h	(revision 16232)
++++ ../trunk-jpl/src/c/shared/Matrix/matrix.h	(revision 16233)
+@@ -14,6 +14,5 @@
+ void Matrix2x2Determinant(IssmDouble* Adet,IssmDouble* A);
+ void Matrix3x3Invert(IssmDouble* Ainv, IssmDouble* A);
+ void Matrix3x3Determinant(IssmDouble* Adet,IssmDouble* A);
+-void MatrixTranspose(IssmDouble* tA,IssmDouble* A,int nrows, int ncols);
+ 
+ #endif //ifndef _MATRIXUTILS_H_
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16233)
+@@ -184,25 +184,6 @@
+ 	return D;
+ }
+ /*}}}*/
+-/*FUNCTION Matice::GetZ {{{*/
+-IssmDouble Matice::GetZ(){
+-
+-	/*Output*/
+-	IssmDouble D;
+-
+-	inputs->GetInputAverage(&D,DamageDEnum);
+-	return 1/(1-D);
+-}
+-/*}}}*/
+-/*FUNCTION Matice::GetZbar {{{*/
+-IssmDouble Matice::GetZbar(){
+-
+-	/*Output*/
+-	IssmDouble Dbar;
+-	inputs->GetInputAverage(&Dbar,DamageDbarEnum);
+-	return 1/(1-Dbar);
+-}
+-/*}}}*/
+ /*FUNCTION Matice::GetDbar {{{*/
+ IssmDouble Matice::GetDbar(){
+ 
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16233)
+@@ -37,9 +37,7 @@
+ 		virtual IssmDouble GetB()=0;
+ 		virtual IssmDouble GetBbar()=0;
+ 		virtual IssmDouble GetN()=0;
+-		virtual IssmDouble GetZ()=0;
+ 		virtual IssmDouble GetD()=0;
+-		virtual IssmDouble GetZbar()=0;
+ 		virtual IssmDouble GetDbar()=0;
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16233)
+@@ -63,9 +63,7 @@
+ 		IssmDouble GetA();
+ 		IssmDouble GetB();
+ 		IssmDouble GetBbar();
+-		IssmDouble GetZ();
+ 		IssmDouble GetD();
+-		IssmDouble GetZbar();
+ 		IssmDouble GetDbar();
+ 		IssmDouble GetN();
+ 		bool       IsInput(int name);
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16233)
+@@ -95,8 +95,6 @@
+ 		IssmDouble GetBbar(){_error_("not supported");};
+ 		IssmDouble GetN(){_error_("not supported");};
+ 		IssmDouble GetD(){_error_("not supported");};
+-		IssmDouble GetZ(){_error_("not supported");};
+-		IssmDouble GetZbar(){_error_("not supported");};
+ 		IssmDouble GetDbar(){_error_("not supported");};
+ 		/*}}}*/
+ 		/*Numerics: {{{*/
+Index: ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 16233)
+@@ -68,8 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+ #endif  /* _DOUBLEVECPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 16233)
+@@ -54,8 +54,6 @@
+                 /*}}}*/
+                 /*Param vritual function definitions: {{{*/
+                 int   InstanceEnum(){return myEnumVal;}
+-                void GetParameterName(char**pname) {EnumToStringx(pname,this->myEnumVal);}
+-
+                 P& GetParameterValue() { return myP;}
+                 const P& GetParameterValue()const { return myP;};
+ 
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 16233)
+@@ -69,9 +69,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _DOUBLEMATPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Param.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/Param.h	(revision 16233)
+@@ -54,6 +54,5 @@
+ 		virtual void  SetValue(Matrix<IssmDouble>* mat)=0;
+ 		virtual void  SetValue(FILE* fid)=0;
+ 		virtual void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array)=0;
+-		virtual void  GetParameterName(char**pname)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/FileParam.h	(revision 16233)
+@@ -67,9 +67,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("File param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("File param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _INTPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 16233)
+@@ -109,11 +109,6 @@
+ 	*pintarray=output;
+ }
+ /*}}}*/
+-/*FUNCTION IntVecParam::GetParameterName{{{*/
+-void IntVecParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION IntVecParam::SetValue{{{*/
+ void  IntVecParam::SetValue(int* intarray,int in_M){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(DataSet* dataset){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a DataSet yet");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _INTPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/BoolParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/BoolParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/BoolParam.cpp	(revision 16233)
+@@ -64,10 +64,3 @@
+ 
+ }
+ /*}}}*/
+-
+-/*BoolParam virtual functions definitions: */
+-/*FUNCTION BoolParam::GetParameterName{{{*/
+-void BoolParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 16233)
+@@ -95,11 +95,6 @@
+ 	*pintarray=output;
+ }
+ /*}}}*/
+-/*FUNCTION IntMatParam::GetParameterName{{{*/
+-void IntMatParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION IntMatParam::SetValue{{{*/
+ void  IntMatParam::SetValue(int* intarray,int in_M,int in_N){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _INTPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/StringParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 16233)
+@@ -82,11 +82,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION StringParam::GetParameterName{{{*/
+-void StringParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION StringParam::SetValue{{{*/
+ void  StringParam::SetValue(char* string){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _VECTORPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 16233)
+@@ -115,11 +115,6 @@
+ 	_error_("DoubleVec param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return an array of int");
+ }
+ /*}}}*/
+-/*FUNCTION DoubleVecParam::GetParameterName{{{*/
+-void DoubleVecParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION DoubleVecParam::SetValue{{{*/
+ void  DoubleVecParam::SetValue(IssmDouble* IssmDoublearray,int in_M){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat);
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _MATRIXPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 16233)
+@@ -69,8 +69,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+ #endif  /* _STRINGARRAYPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/TransientParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 16233)
+@@ -69,9 +69,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _TRANSIENTPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 16233)
+@@ -100,11 +100,6 @@
+ 	_error_("DoubleMat of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return an array of int");
+ }
+ /*}}}*/
+-/*FUNCTION DoubleMatParam::GetParameterName{{{*/
+-void DoubleMatParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION DoubleMatParam::SetValue{{{*/
+ void  DoubleMatParam::SetValue(IssmDouble* IssmDoublearray,int in_M,int in_N){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/FileParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/FileParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/FileParam.cpp	(revision 16233)
+@@ -64,10 +64,3 @@
+ 
+ }
+ /*}}}*/
+-
+-/*FileParam virtual functions definitions: */
+-/*FUNCTION FileParam::GetParameterName{{{*/
+-void FileParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _DOUBLEPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 16233)
+@@ -70,9 +70,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << "cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Bool param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array);
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _DOUBLEMATARRAYPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 16233)
+@@ -67,11 +67,6 @@
+ /*}}}*/
+ 
+ /*DataSetParam virtual functions definitions: */
+-/*FUNCTION DataSetParam::GetParameterName{{{*/
+-void DataSetParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION DataSetParam::GetParameterValue{{{*/
+ void DataSetParam::GetParameterValue(DataSet** pdataset){
+ 	*pdataset=value->Copy();
+Index: ../trunk-jpl/src/c/classes/Params/IntParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntParam.cpp	(revision 16233)
+@@ -64,10 +64,3 @@
+ 
+ }
+ /*}}}*/
+-
+-/*IntParam virtual functions definitions: */
+-/*FUNCTION IntParam::GetParameterName{{{*/
+-void IntParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 16233)
+@@ -69,8 +69,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 16233)
+@@ -67,8 +67,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+ #endif  /* _BOOLPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 16233)
+@@ -69,9 +69,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _INTMATPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/VectorParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/VectorParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/VectorParam.cpp	(revision 16233)
+@@ -86,11 +86,6 @@
+ 	*poutput=output;
+ }
+ /*}}}*/
+-/*FUNCTION VectorParam::GetParameterName{{{*/
+-void VectorParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION VectorParam::SetValue{{{*/
+ void  VectorParam::SetValue(Vector<IssmDouble>* vector){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/MatrixParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/MatrixParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/MatrixParam.cpp	(revision 16233)
+@@ -83,11 +83,6 @@
+ 	*poutput=output;
+ }
+ /*}}}*/
+-/*FUNCTION MatrixParam::GetParameterName{{{*/
+-void MatrixParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION MatrixParam::SetValue{{{*/
+ void  MatrixParam::SetValue(Matrix<IssmDouble>* matrix){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 16233)
+@@ -127,11 +127,6 @@
+ 	*pstringarray=outstrings;
+ }
+ /*}}}*/
+-/*FUNCTION StringArrayParam::GetParameterName{{{*/
+-void StringArrayParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION StringArrayParam::SetValue{{{*/
+ void  StringArrayParam::SetValue(char** stringarray,int M){
+ 
+Index: ../trunk-jpl/src/c/classes/Params/TransientParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 16233)
+@@ -126,8 +126,3 @@
+ 	*pdouble=output;
+ }
+ /*}}}*/
+-/*FUNCTION TransientParam::GetParameterName{{{*/
+-void TransientParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Params/DoubleParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleParam.cpp	(revision 16233)
+@@ -63,11 +63,6 @@
+ /*}}}*/
+ 
+ /*DoubleParam virtual functions definitions: */
+-/*FUNCTION DoubleParam::GetParameterName{{{*/
+-void DoubleParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION DoubleParam::GetParameterValue(int* pinteger){{{*/
+ void DoubleParam::GetParameterValue(int* pinteger){
+ 	_error_("Double param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return an integer");
+Index: ../trunk-jpl/src/c/classes/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/StringParam.h	(revision 16233)
+@@ -68,9 +68,6 @@
+ 		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+-
+-		void GetParameterName(char**pname);
+-
+ 		/*}}}*/
+ };
+ #endif  /* _STRINGPARAM_H */
+Index: ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp	(revision 16233)
+@@ -182,11 +182,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION DoubleMatArrayParam::GetParameterName{{{*/
+-void DoubleMatArrayParam::GetParameterName(char**pname){
+-	EnumToStringx(pname,this->enum_type);
+-}
+-/*}}}*/
+ /*FUNCTION DoubleMatArrayParam::SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){{{*/
+ void  DoubleMatArrayParam::SetValue(IssmDouble** in_array, int in_M, int* in_mdim_array, int* in_ndim_array){
+ 
+Index: ../trunk-jpl/src/c/classes/Hook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Hook.h	(revision 16233)
+@@ -39,9 +39,7 @@
+ 		Object**   deliverp(void); //deliver all objects
+ 		void       configure(DataSet* dataset);
+ 		Hook*      Spawn(int* indices, int numindices);
+-		Object**   GetObjects(void);
+ 		int*       Ids(void);
+-		int*       GetOffsets(void);
+ 		int        GetNum(void);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16233)
+@@ -67,7 +67,6 @@
+ 		void  DofInSSet(int dof);
+ 		void  DofInFSet(int dof);
+ 		int   GetDof(int dofindex,int setenum);
+-		void  CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s);
+ 		void  GetDofList(int* poutdoflist,int approximation_enum,int setenum);
+ 		void  GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
+ 		void  FreezeDof(int dof);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16233)
+@@ -1893,26 +1893,6 @@
+ 	dbasis[NUMNODESP1*2+5]=0.5*gauss->coord3;
+ }
+ /*}}}*/
+-/*FUNCTION PentaRef::GetQuadNodalFunctions {{{*/
+-void PentaRef::GetQuadNodalFunctions(IssmDouble* l1l4,GaussPenta* gauss,int index1,int index2,int index3,int index4){
+-	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+-
+-	IssmDouble BasisFunctions[6];
+-
+-	GetNodalFunctionsP1(&BasisFunctions[0],gauss);
+-
+-	_assert_(index1>=0 && index1<6);
+-	_assert_(index2>=0 && index2<6);
+-	_assert_(index3>=0 && index3<6);
+-	_assert_(index4>=0 && index4<6);
+-
+-	l1l4[0]=BasisFunctions[index1];
+-	l1l4[1]=BasisFunctions[index2];
+-	l1l4[2]=BasisFunctions[index3];
+-	l1l4[3]=BasisFunctions[index4];
+-
+-}
+-/*}}}*/
+ /*FUNCTION PentaRef::GetQuadJacobianDeterminant{{{*/
+ void PentaRef::GetQuadJacobianDeterminant(IssmDouble* Jdet,IssmDouble xyz_list[4][3],GaussPenta* gauss){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16233)
+@@ -1530,17 +1530,14 @@
+ 		GetSolutionFromInputsStressbalanceSIA(solution);
+ 		break;
+ 	case StressbalanceVerticalAnalysisEnum:
+-		//GetSolutionFromInputsStressbalanceVert(solution);
+ 		GetSolutionFromInputsOneDof(solution, VzEnum);
+ 		break;
+ 	#endif
+ 	#ifdef _HAVE_THERMAL_
+ 	case ThermalAnalysisEnum:
+-		//GetSolutionFromInputsThermal(solution);
+ 		GetSolutionFromInputsOneDof(solution, TemperatureEnum);
+ 		break;
+ 	case EnthalpyAnalysisEnum:
+-		//GetSolutionFromInputsEnthalpy(solution);
+ 		GetSolutionFromInputsOneDof(solution, EnthalpyEnum);
+ 		break;
+ 	#endif
+@@ -4852,67 +4849,6 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsThermal{{{*/
+-void  Penta::GetSolutionFromInputsThermal(Vector<IssmDouble>* solution){
+-
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+-	int         i;
+-	int        *doflist = NULL;
+-	IssmDouble  values[numdof];
+-	IssmDouble  temp;
+-	GaussPenta *gauss = NULL;
+-
+-	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	Input* t_input=inputs->GetInput(TemperatureEnum); _assert_(t_input);
+-
+-	gauss=new GaussPenta();
+-	for(i=0;i<NUMVERTICES;i++){
+-		/*Recover temperature*/
+-		gauss->GaussVertex(i);
+-		t_input->GetInputValue(&temp,gauss);
+-		values[i]=temp;
+-	}
+-
+-	/*Add value to global vector*/
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<int>(doflist);
+-}
+-/*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsEnthalpy{{{*/
+-void  Penta::GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solution){
+-
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+-	int*        doflist=NULL;
+-	IssmDouble  values[numdof];
+-	IssmDouble  enthalpy;
+-	GaussPenta *gauss=NULL;
+-
+-	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	Input* h_input=inputs->GetInput(EnthalpyEnum); _assert_(h_input);
+-
+-	gauss=new GaussPenta();
+-	for(int i=0;i<NUMVERTICES;i++){
+-		/*Recover temperature*/
+-		gauss->GaussVertex(i);
+-		h_input->GetInputValue(&enthalpy,gauss);
+-		values[i]=enthalpy;
+-	}
+-
+-	/*Add value to global vector*/
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<int>(doflist);
+-}
+-/*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionThermal {{{*/
+ void  Penta::InputUpdateFromSolutionThermal(IssmDouble* solution){
+ 
+@@ -9847,39 +9783,6 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSolutionFromInputsStressbalanceVert{{{*/
+-void  Penta::GetSolutionFromInputsStressbalanceVert(Vector<IssmDouble>* solution){
+-
+-	const int    numdof=NDOF1*NUMVERTICES;
+-
+-	int          i;
+-	int*         doflist=NULL;
+-	IssmDouble       vz;
+-	IssmDouble       values[numdof];
+-	GaussPenta*  gauss=NULL;
+-
+-	/*Get dof list: */
+-	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+-	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+-
+-	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+-	/*P1 element only for now*/
+-	gauss=new GaussPenta();
+-	for(i=0;i<NUMVERTICES;i++){
+-		/*Recover vz */
+-		gauss->GaussVertex(i);
+-		vz_input->GetInputValue(&vz,gauss);
+-		values[i]=vz;
+-	}
+-
+-	/*Add value to global vector*/
+-	solution->SetValues(numdof,doflist,values,INS_VAL);
+-
+-	/*Free ressources:*/
+-	delete gauss;
+-	xDelete<int>(doflist);
+-}
+-/*}}}*/
+ /*FUNCTION Penta::GetSolutionFromInputsStressbalanceFS{{{*/
+ void  Penta::GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 16233)
+@@ -34,7 +34,6 @@
+ 		void GetNodalFunctionsMINIDerivatives(IssmDouble* dh1dh7,IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetNodalFunctionsP1DerivativesReference(IssmDouble* dl1dl6,GaussPenta* gauss);
+ 		void GetNodalFunctionsMINIDerivativesReference(IssmDouble* dl1dl7,GaussPenta* gauss);
+-		void GetQuadNodalFunctions(IssmDouble* l1l4,GaussPenta* gauss,int index1,int index2,int index3,int index4);
+ 		void GetQuadJacobianDeterminant(IssmDouble*  Jdet, IssmDouble xyz_list[4][3],GaussPenta* gauss);
+ 		void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussPenta* gauss);
+ 		void GetJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16233)
+@@ -202,7 +202,6 @@
+ 		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
+ 		void	         GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
+ 		void           GetQuadNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+-		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
+ 		IssmDouble     GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
+ 		void           GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
+ 		void           GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
+@@ -277,7 +276,6 @@
+ 		void	         GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solutiong);
+ 		void	         GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solutiong);
+ 		void	         GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solutiong);
+-		void	         GetSolutionFromInputsStressbalanceVert(Vector<IssmDouble>* solutiong);
+ 		ElementVector* CreatePVectorCouplingSSAFS(void);
+ 		ElementVector* CreatePVectorCouplingSSAFSViscous(void);
+ 		ElementVector* CreatePVectorCouplingSSAFSFriction(void);
+@@ -347,7 +345,6 @@
+ 		ElementVector* CreatePVectorThermalVolume(void);
+ 		ElementVector* CreatePVectorThermalShelf(void);
+ 		ElementVector* CreatePVectorThermalSheet(void);
+-		void	         GetSolutionFromInputsThermal(Vector<IssmDouble>* solutiong);
+ 		void           InputUpdateFromSolutionThermal(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+ 		void           UpdateThermalBasalConstraints(void);
+Index: ../trunk-jpl/src/c/classes/Hook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Hook.cpp	(revision 16233)
+@@ -205,16 +205,6 @@
+ 	return this->num;
+ }
+ /*}}}*/
+-/*FUNCTION Hook::GetObjects{{{*/
+-Object** Hook::GetObjects(void){
+-	return this->objects;
+-}
+-/*}}}*/
+-/*FUNCTION Hook::GetOffsets{{{*/
+-int* Hook::GetOffsets(void){
+-	return this->offsets;
+-}
+-/*}}}*/
+ /*FUNCTION Hook::Spawn{{{*/
+ Hook* Hook::Spawn(int* indices, int numindices){
+ 
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 16233)
+@@ -46,7 +46,6 @@
+ 		void GaussVertex(int iv);
+ 		void GaussNode(int finitelement,int iv);
+ 		void GaussFaceTria(int index1, int index2, int index3, int order);
+-		void GaussCenter(void);
+ 		void SynchronizeGaussTria(GaussTria* gauss_tria);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 16233)
+@@ -340,16 +340,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION GaussTria::GaussCenter{{{*/
+-void GaussTria::GaussCenter(void){
+-
+-	/*update static arrays*/
+-	coord1=ONETHIRD;
+-	coord2=ONETHIRD;
+-	coord3=ONETHIRD;
+-
+-}
+-/*}}}*/
+ /*FUNCTION GaussTria::GaussEdgeCenter{{{*/
+ void GaussTria::GaussEdgeCenter(int index1,int index2){
+ 
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16232)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 16233)
+@@ -41,7 +41,6 @@
+ 		void GaussPoint(int ig);
+ 		void GaussVertex(int iv);
+ 		void GaussNode(int finitelement,int iv);
+-		void GaussCenter(void);
+ 		void GaussEdgeCenter(int index1,int index2);
+ };
+ #endif  /* _GAUSSTRIA_H_ */
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 16233)
+@@ -494,17 +494,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION GaussPenta::GaussCenter{{{*/
+-void GaussPenta::GaussCenter(void){
+-
+-	/*update static arrays*/
+-	coord1=ONETHIRD;
+-	coord2=ONETHIRD;
+-	coord3=ONETHIRD;
+-	coord4=0.0;
+-
+-}
+-/*}}}*/
+ /*FUNCTION GaussPenta::GaussPoint{{{*/
+ void GaussPenta::GaussPoint(int ig){
+ 
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16232)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16233)
+@@ -402,29 +402,6 @@
+ 	this->indexing.svalues[dof-1]=0.;
+ }
+ /*}}}*/
+-/*FUNCTION Node::CreateVecSets {{{*/
+-void  Node::CreateVecSets(Vector<IssmDouble>* pv_g,Vector<IssmDouble>* pv_f,Vector<IssmDouble>* pv_s){
+-
+-	IssmDouble gvalue=1.; //all nodes are in the g set;
+-	IssmDouble value;
+-
+-	for(int i=0;i<this->indexing.gsize;i++){
+-
+-		/*g set: */
+-		pv_g->SetValue(indexing.gdoflist[i],gvalue,INS_VAL);
+-
+-		/*f set: */
+-		value=(IssmDouble)this->indexing.f_set[i];
+-		pv_f->SetValue(indexing.gdoflist[i],value,INS_VAL);
+-
+-		/*s set: */
+-		value=(IssmDouble)this->indexing.s_set[i];
+-		pv_s->SetValue(indexing.gdoflist[i],value,INS_VAL);
+-
+-	}
+-
+-}
+-/*}}}*/
+ /*FUNCTION Node::CreateNodalConstraints{{{*/
+ void  Node::CreateNodalConstraints(Vector<IssmDouble>* ys){
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16233-16234.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16233-16234.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16233-16234.diff	(revision 16556)
@@ -0,0 +1,451 @@
+Index: ../trunk-jpl/src/m/enum/NumberNodeToElementConnectivityEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/NumberNodeToElementConnectivityEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/NumberNodeToElementConnectivityEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=NumberNodeToElementConnectivityEnum()
+-%NUMBERNODETOELEMENTCONNECTIVITYENUM - Enum of NumberNodeToElementConnectivity
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=NumberNodeToElementConnectivityEnum()
+-
+-macro=StringToEnum('NumberNodeToElementConnectivity');
+Index: ../trunk-jpl/src/m/enum/MaxPenetrationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaxPenetrationEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/MaxPenetrationEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=MaxPenetrationEnum()
+-%MAXPENETRATIONENUM - Enum of MaxPenetration
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MaxPenetrationEnum()
+-
+-macro=StringToEnum('MaxPenetration');
+Index: ../trunk-jpl/src/m/enum/HookEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HookEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/HookEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=HookEnum()
+-%HOOKENUM - Enum of Hook
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=HookEnum()
+-
+-macro=StringToEnum('Hook');
+Index: ../trunk-jpl/src/m/enum/IceFrontTypeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IceFrontTypeEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/IceFrontTypeEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=IceFrontTypeEnum()
+-%ICEFRONTTYPEENUM - Enum of IceFrontType
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=IceFrontTypeEnum()
+-
+-macro=StringToEnum('IceFrontType');
+Index: ../trunk-jpl/src/m/enum/AdjointSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AdjointSolutionEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/AdjointSolutionEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=AdjointSolutionEnum()
+-%ADJOINTSOLUTIONENUM - Enum of AdjointSolution
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=AdjointSolutionEnum()
+-
+-macro=StringToEnum('AdjointSolution');
+Index: ../trunk-jpl/src/m/enum/IcefrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IcefrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/IcefrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=IcefrontEnum()
+-%ICEFRONTENUM - Enum of Icefront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=IcefrontEnum()
+-
+-macro=StringToEnum('Icefront');
+Index: ../trunk-jpl/src/m/enum/OptionDoubleEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OptionDoubleEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/OptionDoubleEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=OptionDoubleEnum()
+-%OPTIONDOUBLEENUM - Enum of OptionDouble
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OptionDoubleEnum()
+-
+-macro=StringToEnum('OptionDouble');
+Index: ../trunk-jpl/src/m/enum/InversionVelObsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/InversionVelObsEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/InversionVelObsEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=InversionVelObsEnum()
+-%INVERSIONVELOBSENUM - Enum of InversionVelObs
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=InversionVelObsEnum()
+-
+-macro=StringToEnum('InversionVelObs');
+Index: ../trunk-jpl/src/m/enum/DofIndexingEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DofIndexingEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/DofIndexingEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=DofIndexingEnum()
+-%DOFINDEXINGENUM - Enum of DofIndexing
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DofIndexingEnum()
+-
+-macro=StringToEnum('DofIndexing');
+Index: ../trunk-jpl/src/m/enum/FSIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/FSIceFrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/FSIceFrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=FSIceFrontEnum()
+-%FSICEFRONTENUM - Enum of FSIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=FSIceFrontEnum()
+-
+-macro=StringToEnum('FSIceFront');
+Index: ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=SSA3dIceFrontEnum()
+-%SSA3DICEFRONTENUM - Enum of SSA3dIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SSA3dIceFrontEnum()
+-
+-macro=StringToEnum('SSA3dIceFront');
+Index: ../trunk-jpl/src/m/enum/ConstantEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ConstantEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/ConstantEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=ConstantEnum()
+-%CONSTANTENUM - Enum of Constant
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=ConstantEnum()
+-
+-macro=StringToEnum('Constant');
+Index: ../trunk-jpl/src/m/enum/HOIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/HOIceFrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/HOIceFrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=HOIceFrontEnum()
+-%HOICEFRONTENUM - Enum of HOIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=HOIceFrontEnum()
+-
+-macro=StringToEnum('HOIceFront');
+Index: ../trunk-jpl/src/m/enum/BasisIntegralEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BasisIntegralEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/BasisIntegralEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=BasisIntegralEnum()
+-%BASISINTEGRALENUM - Enum of BasisIntegral
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=BasisIntegralEnum()
+-
+-macro=StringToEnum('BasisIntegral');
+Index: ../trunk-jpl/src/m/enum/OptionLogicalEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OptionLogicalEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/OptionLogicalEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=OptionLogicalEnum()
+-%OPTIONLOGICALENUM - Enum of OptionLogical
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OptionLogicalEnum()
+-
+-macro=StringToEnum('OptionLogical');
+Index: ../trunk-jpl/src/m/enum/L1L2IceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/L1L2IceFrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/L1L2IceFrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=L1L2IceFrontEnum()
+-%L1L2ICEFRONTENUM - Enum of L1L2IceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=L1L2IceFrontEnum()
+-
+-macro=StringToEnum('L1L2IceFront');
+Index: ../trunk-jpl/src/m/enum/OptionCharEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OptionCharEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/OptionCharEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=OptionCharEnum()
+-%OPTIONCHARENUM - Enum of OptionChar
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OptionCharEnum()
+-
+-macro=StringToEnum('OptionChar');
+Index: ../trunk-jpl/src/m/enum/TemperatureOldEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TemperatureOldEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/TemperatureOldEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=TemperatureOldEnum()
+-%TEMPERATUREOLDENUM - Enum of TemperatureOld
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=TemperatureOldEnum()
+-
+-macro=StringToEnum('TemperatureOld');
+Index: ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=StressbalanceIcefrontEnum()
+-%STRESSBALANCEICEFRONTENUM - Enum of StressbalanceIcefront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=StressbalanceIcefrontEnum()
+-
+-macro=StringToEnum('StressbalanceIcefront');
+Index: ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=ThermalIsdynamicbasalspcEnum()
+-%THERMALISDYNAMICBASALSPCENUM - Enum of ThermalIsdynamicbasalspc
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=ThermalIsdynamicbasalspcEnum()
+-
+-macro=StringToEnum('ThermalIsdynamicbasalspc');
+Index: ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m	(revision 16233)
++++ ../trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m	(revision 16234)
+@@ -1,11 +0,0 @@
+-function macro=SSA2dIceFrontEnum()
+-%SSA2DICEFRONTENUM - Enum of SSA2dIceFront
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SSA2dIceFrontEnum()
+-
+-macro=StringToEnum('SSA2dIceFront');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16233)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16234)
+@@ -41,7 +41,6 @@
+ def ConstantsYtsEnum(): return StringToEnum("ConstantsYts")[0]
+ def DependentObjectEnum(): return StringToEnum("DependentObject")[0]
+ def StressbalanceAbstolEnum(): return StringToEnum("StressbalanceAbstol")[0]
+-def StressbalanceIcefrontEnum(): return StringToEnum("StressbalanceIcefront")[0]
+ def StressbalanceIsnewtonEnum(): return StringToEnum("StressbalanceIsnewton")[0]
+ def StressbalanceMaxiterEnum(): return StringToEnum("StressbalanceMaxiter")[0]
+ def StressbalanceNumRequestedOutputsEnum(): return StringToEnum("StressbalanceNumRequestedOutputs")[0]
+@@ -117,7 +116,6 @@
+ def HydrologySedimentEnum(): return StringToEnum("HydrologySediment")[0]
+ def HydrologyEfficientEnum(): return StringToEnum("HydrologyEfficient")[0]
+ def HydrologySedimentKmaxEnum(): return StringToEnum("HydrologySedimentKmax")[0]
+-def BasisIntegralEnum(): return StringToEnum("BasisIntegral")[0]
+ def WaterTransferEnum(): return StringToEnum("WaterTransfer")[0]
+ def IndependentObjectEnum(): return StringToEnum("IndependentObject")[0]
+ def InversionControlParametersEnum(): return StringToEnum("InversionControlParameters")[0]
+@@ -137,7 +135,6 @@
+ def InversionNumCostFunctionsEnum(): return StringToEnum("InversionNumCostFunctions")[0]
+ def InversionStepThresholdEnum(): return StringToEnum("InversionStepThreshold")[0]
+ def InversionThicknessObsEnum(): return StringToEnum("InversionThicknessObs")[0]
+-def InversionVelObsEnum(): return StringToEnum("InversionVelObs")[0]
+ def InversionVxObsEnum(): return StringToEnum("InversionVxObs")[0]
+ def InversionVyObsEnum(): return StringToEnum("InversionVyObs")[0]
+ def InversionVzObsEnum(): return StringToEnum("InversionVzObs")[0]
+@@ -280,7 +277,6 @@
+ def ConfigurationTypeEnum(): return StringToEnum("ConfigurationType")[0]
+ def AdjointBalancethicknessAnalysisEnum(): return StringToEnum("AdjointBalancethicknessAnalysis")[0]
+ def AdjointHorizAnalysisEnum(): return StringToEnum("AdjointHorizAnalysis")[0]
+-def AdjointSolutionEnum(): return StringToEnum("AdjointSolution")[0]
+ def AnalysisCounterEnum(): return StringToEnum("AnalysisCounter")[0]
+ def NoneAnalysisEnum(): return StringToEnum("NoneAnalysis")[0]
+ def DefaultAnalysisEnum(): return StringToEnum("DefaultAnalysis")[0]
+@@ -352,7 +348,6 @@
+ def ContourEnum(): return StringToEnum("Contour")[0]
+ def ControlInputEnum(): return StringToEnum("ControlInput")[0]
+ def DatasetInputEnum(): return StringToEnum("DatasetInput")[0]
+-def DofIndexingEnum(): return StringToEnum("DofIndexing")[0]
+ def DoubleInputEnum(): return StringToEnum("DoubleInput")[0]
+ def DataSetParamEnum(): return StringToEnum("DataSetParam")[0]
+ def DoubleMatArrayParamEnum(): return StringToEnum("DoubleMatArrayParam")[0]
+@@ -363,24 +358,17 @@
+ def ElementResultEnum(): return StringToEnum("ElementResult")[0]
+ def ExternalResultEnum(): return StringToEnum("ExternalResult")[0]
+ def FileParamEnum(): return StringToEnum("FileParam")[0]
+-def HookEnum(): return StringToEnum("Hook")[0]
+-def IcefrontEnum(): return StringToEnum("Icefront")[0]
+ def InputEnum(): return StringToEnum("Input")[0]
+ def IntInputEnum(): return StringToEnum("IntInput")[0]
+ def IntParamEnum(): return StringToEnum("IntParam")[0]
+ def IntVecParamEnum(): return StringToEnum("IntVecParam")[0]
+ def TransientParamEnum(): return StringToEnum("TransientParam")[0]
+-def IceFrontTypeEnum(): return StringToEnum("IceFrontType")[0]
+-def SSA2dIceFrontEnum(): return StringToEnum("SSA2dIceFront")[0]
+-def SSA3dIceFrontEnum(): return StringToEnum("SSA3dIceFront")[0]
+ def MaticeEnum(): return StringToEnum("Matice")[0]
+ def MatparEnum(): return StringToEnum("Matpar")[0]
+ def NodeEnum(): return StringToEnum("Node")[0]
+ def NumericalfluxEnum(): return StringToEnum("Numericalflux")[0]
+ def NumericalfluxTypeEnum(): return StringToEnum("NumericalfluxType")[0]
+ def ParamEnum(): return StringToEnum("Param")[0]
+-def L1L2IceFrontEnum(): return StringToEnum("L1L2IceFront")[0]
+-def HOIceFrontEnum(): return StringToEnum("HOIceFront")[0]
+ def PengridEnum(): return StringToEnum("Pengrid")[0]
+ def PenpairEnum(): return StringToEnum("Penpair")[0]
+ def PentaEnum(): return StringToEnum("Penta")[0]
+@@ -396,7 +384,6 @@
+ def SpcDynamicEnum(): return StringToEnum("SpcDynamic")[0]
+ def SpcStaticEnum(): return StringToEnum("SpcStatic")[0]
+ def SpcTransientEnum(): return StringToEnum("SpcTransient")[0]
+-def FSIceFrontEnum(): return StringToEnum("FSIceFront")[0]
+ def StringArrayParamEnum(): return StringToEnum("StringArrayParam")[0]
+ def StringParamEnum(): return StringToEnum("StringParam")[0]
+ def TriaEnum(): return StringToEnum("Tria")[0]
+@@ -419,7 +406,6 @@
+ def BedSlopeXEnum(): return StringToEnum("BedSlopeX")[0]
+ def BedSlopeYEnum(): return StringToEnum("BedSlopeY")[0]
+ def BoundaryEnum(): return StringToEnum("Boundary")[0]
+-def ConstantEnum(): return StringToEnum("Constant")[0]
+ def ConvergedEnum(): return StringToEnum("Converged")[0]
+ def FillEnum(): return StringToEnum("Fill")[0]
+ def FractionIncrementEnum(): return StringToEnum("FractionIncrement")[0]
+@@ -427,10 +413,8 @@
+ def GroundinglineMeltingRateEnum(): return StringToEnum("GroundinglineMeltingRate")[0]
+ def InternalEnum(): return StringToEnum("Internal")[0]
+ def MassFluxEnum(): return StringToEnum("MassFlux")[0]
+-def MaxPenetrationEnum(): return StringToEnum("MaxPenetration")[0]
+ def MeltingOffsetEnum(): return StringToEnum("MeltingOffset")[0]
+ def MisfitEnum(): return StringToEnum("Misfit")[0]
+-def NumberNodeToElementConnectivityEnum(): return StringToEnum("NumberNodeToElementConnectivity")[0]
+ def PressureEnum(): return StringToEnum("Pressure")[0]
+ def PressurePicardEnum(): return StringToEnum("PressurePicard")[0]
+ def QmuPressureEnum(): return StringToEnum("QmuPressure")[0]
+@@ -456,7 +440,6 @@
+ def SurfaceSlopeXEnum(): return StringToEnum("SurfaceSlopeX")[0]
+ def SurfaceSlopeYEnum(): return StringToEnum("SurfaceSlopeY")[0]
+ def TemperatureEnum(): return StringToEnum("Temperature")[0]
+-def TemperatureOldEnum(): return StringToEnum("TemperatureOld")[0]
+ def TemperaturePicardEnum(): return StringToEnum("TemperaturePicard")[0]
+ def ThicknessAbsMisfitEnum(): return StringToEnum("ThicknessAbsMisfit")[0]
+ def VelEnum(): return StringToEnum("Vel")[0]
+@@ -597,10 +580,7 @@
+ def OptionEnum(): return StringToEnum("Option")[0]
+ def GenericOptionEnum(): return StringToEnum("GenericOption")[0]
+ def OptionCellEnum(): return StringToEnum("OptionCell")[0]
+-def OptionCharEnum(): return StringToEnum("OptionChar")[0]
+ def OptionStructEnum(): return StringToEnum("OptionStruct")[0]
+-def OptionDoubleEnum(): return StringToEnum("OptionDouble")[0]
+-def OptionLogicalEnum(): return StringToEnum("OptionLogical")[0]
+ def PatersonEnum(): return StringToEnum("Paterson")[0]
+ def ArrheniusEnum(): return StringToEnum("Arrhenius")[0]
+ def LliboutryDuvalEnum(): return StringToEnum("LliboutryDuval")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16234-16235.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16234-16235.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16234-16235.diff	(revision 16556)
@@ -0,0 +1,432 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16234)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16235)
+@@ -41,7 +41,6 @@
+ 	ConstantsYtsEnum,
+ 	DependentObjectEnum,
+ 	StressbalanceAbstolEnum,
+-	StressbalanceIcefrontEnum,
+ 	StressbalanceIsnewtonEnum,
+ 	StressbalanceMaxiterEnum,
+ 	StressbalanceNumRequestedOutputsEnum,
+@@ -117,7 +116,6 @@
+ 	HydrologySedimentEnum,
+ 	HydrologyEfficientEnum,
+ 	HydrologySedimentKmaxEnum,
+-	BasisIntegralEnum,
+ 	WaterTransferEnum,
+ 	IndependentObjectEnum,
+ 	InversionControlParametersEnum,
+@@ -137,7 +135,6 @@
+ 	InversionNumCostFunctionsEnum,
+ 	InversionStepThresholdEnum,
+ 	InversionThicknessObsEnum,
+-	InversionVelObsEnum,
+ 	InversionVxObsEnum,
+ 	InversionVyObsEnum,
+ 	InversionVzObsEnum,
+@@ -282,7 +279,6 @@
+ 	ConfigurationTypeEnum,
+ 	AdjointBalancethicknessAnalysisEnum,
+ 	AdjointHorizAnalysisEnum,
+-	AdjointSolutionEnum,
+ 	AnalysisCounterEnum,
+ 	NoneAnalysisEnum,
+ 	DefaultAnalysisEnum,
+@@ -360,7 +356,6 @@
+ 	ContourEnum,
+ 	ControlInputEnum,
+ 	DatasetInputEnum,
+-	DofIndexingEnum,
+ 	DoubleInputEnum,
+ 	DataSetParamEnum,
+ 	DoubleMatArrayParamEnum,
+@@ -371,24 +366,17 @@
+ 	ElementResultEnum,
+ 	ExternalResultEnum,
+ 	FileParamEnum,
+-	HookEnum,
+-	IcefrontEnum,
+ 	InputEnum,
+ 	IntInputEnum,
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
+-	IceFrontTypeEnum,
+-	SSA2dIceFrontEnum,
+-	SSA3dIceFrontEnum,
+ 	MaticeEnum,
+ 	MatparEnum,
+ 	NodeEnum,
+ 	NumericalfluxEnum,
+ 	NumericalfluxTypeEnum,
+ 	ParamEnum,
+-	L1L2IceFrontEnum,
+-	HOIceFrontEnum,
+ 	PengridEnum,
+ 	PenpairEnum,
+ 	PentaEnum,
+@@ -404,7 +392,6 @@
+ 	SpcDynamicEnum,
+ 	SpcStaticEnum,
+ 	SpcTransientEnum,
+-	FSIceFrontEnum,
+ 	StringArrayParamEnum,
+ 	StringParamEnum,
+ 	TriaEnum,
+@@ -433,7 +420,6 @@
+ 	BedSlopeXEnum,
+ 	BedSlopeYEnum,
+ 	BoundaryEnum,
+-	ConstantEnum,
+ 	ConvergedEnum,
+ 	FillEnum,
+ 	FractionIncrementEnum,
+@@ -441,10 +427,8 @@
+ 	GroundinglineMeltingRateEnum,
+ 	InternalEnum,
+ 	MassFluxEnum,
+-	MaxPenetrationEnum,
+ 	MeltingOffsetEnum,
+ 	MisfitEnum,
+-	NumberNodeToElementConnectivityEnum,
+ 	PressureEnum,
+ 	PressurePicardEnum,
+ 	QmuPressureEnum,
+@@ -470,7 +454,6 @@
+ 	SurfaceSlopeXEnum,
+ 	SurfaceSlopeYEnum,
+ 	TemperatureEnum,
+-	TemperatureOldEnum,
+ 	TemperaturePicardEnum,
+ 	ThicknessAbsMisfitEnum,
+ 	VelEnum,
+@@ -633,10 +616,7 @@
+ 	OptionEnum,
+ 	GenericOptionEnum,
+ 	OptionCellEnum,
+-	OptionCharEnum,
+ 	OptionStructEnum,
+-	OptionDoubleEnum,
+-	OptionLogicalEnum,
+ 	/*}}}*/
+ 	/*Rheology law (move too Material) {{{*/
+ 	PatersonEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16234)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16235)
+@@ -49,7 +49,6 @@
+ 		case ConstantsYtsEnum : return "ConstantsYts";
+ 		case DependentObjectEnum : return "DependentObject";
+ 		case StressbalanceAbstolEnum : return "StressbalanceAbstol";
+-		case StressbalanceIcefrontEnum : return "StressbalanceIcefront";
+ 		case StressbalanceIsnewtonEnum : return "StressbalanceIsnewton";
+ 		case StressbalanceMaxiterEnum : return "StressbalanceMaxiter";
+ 		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
+@@ -125,7 +124,6 @@
+ 		case HydrologySedimentEnum : return "HydrologySediment";
+ 		case HydrologyEfficientEnum : return "HydrologyEfficient";
+ 		case HydrologySedimentKmaxEnum : return "HydrologySedimentKmax";
+-		case BasisIntegralEnum : return "BasisIntegral";
+ 		case WaterTransferEnum : return "WaterTransfer";
+ 		case IndependentObjectEnum : return "IndependentObject";
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+@@ -145,7 +143,6 @@
+ 		case InversionNumCostFunctionsEnum : return "InversionNumCostFunctions";
+ 		case InversionStepThresholdEnum : return "InversionStepThreshold";
+ 		case InversionThicknessObsEnum : return "InversionThicknessObs";
+-		case InversionVelObsEnum : return "InversionVelObs";
+ 		case InversionVxObsEnum : return "InversionVxObs";
+ 		case InversionVyObsEnum : return "InversionVyObs";
+ 		case InversionVzObsEnum : return "InversionVzObs";
+@@ -288,7 +285,6 @@
+ 		case ConfigurationTypeEnum : return "ConfigurationType";
+ 		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
+ 		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
+-		case AdjointSolutionEnum : return "AdjointSolution";
+ 		case AnalysisCounterEnum : return "AnalysisCounter";
+ 		case NoneAnalysisEnum : return "NoneAnalysis";
+ 		case DefaultAnalysisEnum : return "DefaultAnalysis";
+@@ -360,7 +356,6 @@
+ 		case ContourEnum : return "Contour";
+ 		case ControlInputEnum : return "ControlInput";
+ 		case DatasetInputEnum : return "DatasetInput";
+-		case DofIndexingEnum : return "DofIndexing";
+ 		case DoubleInputEnum : return "DoubleInput";
+ 		case DataSetParamEnum : return "DataSetParam";
+ 		case DoubleMatArrayParamEnum : return "DoubleMatArrayParam";
+@@ -371,24 +366,17 @@
+ 		case ElementResultEnum : return "ElementResult";
+ 		case ExternalResultEnum : return "ExternalResult";
+ 		case FileParamEnum : return "FileParam";
+-		case HookEnum : return "Hook";
+-		case IcefrontEnum : return "Icefront";
+ 		case InputEnum : return "Input";
+ 		case IntInputEnum : return "IntInput";
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
+-		case IceFrontTypeEnum : return "IceFrontType";
+-		case SSA2dIceFrontEnum : return "SSA2dIceFront";
+-		case SSA3dIceFrontEnum : return "SSA3dIceFront";
+ 		case MaticeEnum : return "Matice";
+ 		case MatparEnum : return "Matpar";
+ 		case NodeEnum : return "Node";
+ 		case NumericalfluxEnum : return "Numericalflux";
+ 		case NumericalfluxTypeEnum : return "NumericalfluxType";
+ 		case ParamEnum : return "Param";
+-		case L1L2IceFrontEnum : return "L1L2IceFront";
+-		case HOIceFrontEnum : return "HOIceFront";
+ 		case PengridEnum : return "Pengrid";
+ 		case PenpairEnum : return "Penpair";
+ 		case PentaEnum : return "Penta";
+@@ -404,7 +392,6 @@
+ 		case SpcDynamicEnum : return "SpcDynamic";
+ 		case SpcStaticEnum : return "SpcStatic";
+ 		case SpcTransientEnum : return "SpcTransient";
+-		case FSIceFrontEnum : return "FSIceFront";
+ 		case StringArrayParamEnum : return "StringArrayParam";
+ 		case StringParamEnum : return "StringParam";
+ 		case TriaEnum : return "Tria";
+@@ -427,7 +414,6 @@
+ 		case BedSlopeXEnum : return "BedSlopeX";
+ 		case BedSlopeYEnum : return "BedSlopeY";
+ 		case BoundaryEnum : return "Boundary";
+-		case ConstantEnum : return "Constant";
+ 		case ConvergedEnum : return "Converged";
+ 		case FillEnum : return "Fill";
+ 		case FractionIncrementEnum : return "FractionIncrement";
+@@ -435,10 +421,8 @@
+ 		case GroundinglineMeltingRateEnum : return "GroundinglineMeltingRate";
+ 		case InternalEnum : return "Internal";
+ 		case MassFluxEnum : return "MassFlux";
+-		case MaxPenetrationEnum : return "MaxPenetration";
+ 		case MeltingOffsetEnum : return "MeltingOffset";
+ 		case MisfitEnum : return "Misfit";
+-		case NumberNodeToElementConnectivityEnum : return "NumberNodeToElementConnectivity";
+ 		case PressureEnum : return "Pressure";
+ 		case PressurePicardEnum : return "PressurePicard";
+ 		case QmuPressureEnum : return "QmuPressure";
+@@ -464,7 +448,6 @@
+ 		case SurfaceSlopeXEnum : return "SurfaceSlopeX";
+ 		case SurfaceSlopeYEnum : return "SurfaceSlopeY";
+ 		case TemperatureEnum : return "Temperature";
+-		case TemperatureOldEnum : return "TemperatureOld";
+ 		case TemperaturePicardEnum : return "TemperaturePicard";
+ 		case ThicknessAbsMisfitEnum : return "ThicknessAbsMisfit";
+ 		case VelEnum : return "Vel";
+@@ -605,10 +588,7 @@
+ 		case OptionEnum : return "Option";
+ 		case GenericOptionEnum : return "GenericOption";
+ 		case OptionCellEnum : return "OptionCell";
+-		case OptionCharEnum : return "OptionChar";
+ 		case OptionStructEnum : return "OptionStruct";
+-		case OptionDoubleEnum : return "OptionDouble";
+-		case OptionLogicalEnum : return "OptionLogical";
+ 		case PatersonEnum : return "Paterson";
+ 		case ArrheniusEnum : return "Arrhenius";
+ 		case LliboutryDuvalEnum : return "LliboutryDuval";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16234)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16235)
+@@ -49,7 +49,6 @@
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
+ 	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
+ 	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
+-	      else if (strcmp(name,"StressbalanceIcefront")==0) return StressbalanceIcefrontEnum;
+ 	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
+ 	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
+ 	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
+@@ -125,7 +124,6 @@
+ 	      else if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
+ 	      else if (strcmp(name,"HydrologyEfficient")==0) return HydrologyEfficientEnum;
+ 	      else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
+-	      else if (strcmp(name,"BasisIntegral")==0) return BasisIntegralEnum;
+ 	      else if (strcmp(name,"WaterTransfer")==0) return WaterTransferEnum;
+ 	      else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+@@ -136,19 +134,18 @@
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+ 	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
++	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
++	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+-	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+-	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
++	      if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+ 	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+ 	      else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
+ 	      else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum;
+ 	      else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum;
+-	      else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum;
+ 	      else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum;
+ 	      else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum;
+ 	      else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum;
+@@ -259,13 +256,13 @@
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
++	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+-	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+-	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+-	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
++	      if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+@@ -294,7 +291,6 @@
+ 	      else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+-	      else if (strcmp(name,"AdjointSolution")==0) return AdjointSolutionEnum;
+ 	      else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
+ 	      else if (strcmp(name,"NoneAnalysis")==0) return NoneAnalysisEnum;
+ 	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
+@@ -366,7 +362,6 @@
+ 	      else if (strcmp(name,"Contour")==0) return ContourEnum;
+ 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
+ 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
+-	      else if (strcmp(name,"DofIndexing")==0) return DofIndexingEnum;
+ 	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
+ 	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
+ 	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
+@@ -377,27 +372,20 @@
+ 	      else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+-	      else if (strcmp(name,"Hook")==0) return HookEnum;
+-	      else if (strcmp(name,"Icefront")==0) return IcefrontEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
++	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+-	      else if (strcmp(name,"IceFrontType")==0) return IceFrontTypeEnum;
+-	      else if (strcmp(name,"SSA2dIceFront")==0) return SSA2dIceFrontEnum;
+-	      else if (strcmp(name,"SSA3dIceFront")==0) return SSA3dIceFrontEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+-	      else if (strcmp(name,"Param")==0) return ParamEnum;
+-	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
+-	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+@@ -413,7 +401,6 @@
+ 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
+ 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+-	      else if (strcmp(name,"FSIceFront")==0) return FSIceFrontEnum;
+ 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+@@ -436,7 +423,6 @@
+ 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
+ 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
+ 	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
+-	      else if (strcmp(name,"Constant")==0) return ConstantEnum;
+ 	      else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+ 	      else if (strcmp(name,"Fill")==0) return FillEnum;
+ 	      else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum;
+@@ -444,10 +430,8 @@
+ 	      else if (strcmp(name,"GroundinglineMeltingRate")==0) return GroundinglineMeltingRateEnum;
+ 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
+ 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
+-	      else if (strcmp(name,"MaxPenetration")==0) return MaxPenetrationEnum;
+ 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+ 	      else if (strcmp(name,"Misfit")==0) return MisfitEnum;
+-	      else if (strcmp(name,"NumberNodeToElementConnectivity")==0) return NumberNodeToElementConnectivityEnum;
+ 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+ 	      else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
+ 	      else if (strcmp(name,"QmuPressure")==0) return QmuPressureEnum;
+@@ -473,7 +457,6 @@
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+-	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+@@ -505,10 +488,7 @@
+ 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
+ 	      else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
+ 	      else if (strcmp(name,"BasalFriction")==0) return BasalFrictionEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
++	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+@@ -525,7 +505,10 @@
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+-	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+@@ -617,10 +600,7 @@
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+-	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+ 	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+-	      else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
+-	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+ 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+ 	      else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
+Index: ../trunk-jpl/src/c/shared/Exp/exp.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 16234)
++++ ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 16235)
+@@ -91,7 +91,7 @@
+ 		if(fscanf(fid,"%255s %255s\n",chardummy,chardummy)!=2) _error_("Could not read " << domainname);
+ 		//# Points Count Value
+ 		if(fscanf(fid,"%255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy)!=4) _error_("Could not read " << domainname);
+-		if(fscanf(fid,"%20u %255s\n",&n,chardummy)!=2) _error_("Could not read number of points in "<<domainname);
++		if(fscanf(fid,"%20i %255s\n",&n,chardummy)!=2) _error_("Could not read number of points in "<<domainname);
+ 		//# X pos Y pos
+ 		if(fscanf(fid,"%255s %255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy,chardummy)!=5) _error_("Could not read " << domainname);
+ 		for (i=0;i<n;i++){
+@@ -129,7 +129,7 @@
+ 		if(fscanf(fid,"%255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy)!=4) _error_("Could not read " << domainname);
+ 
+ 		/*Get number of profile vertices: */
+-		if(fscanf(fid,"%20u %255s\n",&n,chardummy)!=2) _error_("Could not read number of points in "<<domainname);
++		if(fscanf(fid,"%20i %255s\n",&n,chardummy)!=2) _error_("Could not read number of points in "<<domainname);
+ 
+ 		/*Skip next line: */
+ 		//# X pos Y pos
Index: issm/oecreview/Archive/16133-16554/ISSM-16235-16236.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16235-16236.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16235-16236.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 16235)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 16236)
+@@ -15,6 +15,6 @@
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	if(dakota_analysis){
+-		iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
++		iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum,0.);
+ 	}
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16236-16237.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16236-16237.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16236-16237.diff	(revision 16556)
@@ -0,0 +1,415 @@
+Index: ../trunk-jpl/src/c/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.h	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Geometry.h	(revision 16237)
+@@ -59,8 +59,7 @@
+ 			long             GetId(const GeomEdge *t) const;
+ 			long             GetId(const Curve *c) const;
+ 			void             UnMarkEdges();
+-			GeomEdge *ProjectOnCurve(const Edge &,double,BamgVertex &,VertexOnGeom &) const;
+-			GeomEdge *Containing(const R2 P, GeomEdge *start) const;
++			GeomEdge        *ProjectOnCurve(const Edge &,double,BamgVertex &,VertexOnGeom &) const;
+ 			void             WriteGeometry(BamgGeom *bamggeom, BamgOpts*bamgopts);
+ 	};
+ 
+Index: ../trunk-jpl/src/c/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Triangle.cpp	(revision 16237)
+@@ -251,10 +251,6 @@
+ 			t->AdjEdgeIndex[aat]=a;
+ 		}
+ 	}/*}}}*/
+-	/*FUNCTION Triangle::SetAllFlag{{{*/
+-	void   Triangle::SetAllFlag(int a,int f){
+-		AdjEdgeIndex[a] = (AdjEdgeIndex[a] &3) + (1020 & f);
+-	}/*}}}*/
+ 	/*FUNCTION Triangle::SetHidden{{{*/
+ 	void Triangle::SetHidden(int a){
+ 		//Get Adjacent Triangle number a
+Index: ../trunk-jpl/src/c/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Geometry.cpp	(revision 16237)
+@@ -462,32 +462,6 @@
+ 	long Geometry::GetId(const Curve * c) const  {
+ 		return c - curves;
+ 	}/*}}}*/
+-	/*FUNCTION Geometry::Containing{{{*/
+-	GeomEdge* Geometry::Containing(const R2 P,  GeomEdge * start) const {
+-		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/Contening)*/
+-
+-		GeomEdge* on =start,* pon=0;
+-		// walk with the cos on geometry
+-		int counter=0;
+-		while(pon != on){  
+-			counter++;
+-			_assert_(counter<100);
+-			pon = on;
+-			R2 A= (*on)[0];
+-			R2 B= (*on)[1];
+-			R2 AB = B-A;
+-			R2 AP = P-A;
+-			R2 BP = P-B;
+-			if ( (AB,AP) < 0) 
+-			 on = on->Adj[0];
+-			else if ( (AB,BP)  > 0) 
+-			 on = on->Adj[1];
+-			else
+-			 return on;
+-		}
+-		return on;
+-	}
+-	/*}}}*/
+ 	/*FUNCTION Geometry::PostRead{{{*/
+ 	void Geometry::PostRead(){
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/AfterRead)*/
+Index: ../trunk-jpl/src/c/bamg/Triangle.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Triangle.h	(revision 16237)
+@@ -45,7 +45,6 @@
+ 			int               Locked(int a)const;
+ 			int               Hidden(int a)const;
+ 			int               GetAllflag(int a);
+-			void              SetAllFlag(int a,int f);
+ 			double            QualityQuad(int a,int option=1) const;
+ 			short             NuEdgeTriangleAdj(int i) const;
+ 			AdjacentTriangle  Adj(int i) const;
+Index: ../trunk-jpl/src/c/bamg/Metric.h
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Metric.h	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Metric.h	(revision 16237)
+@@ -76,8 +76,6 @@
+ 			double lmax()   const;
+ 			double lmin()   const;
+ 			double Aniso2() const;
+-			double Aniso()  const;
+-			void   BoundAniso(const  double c);
+ 			inline void BoundAniso2(const double coef);
+ 
+ 			//operators
+Index: ../trunk-jpl/src/c/bamg/EigenMetric.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 16237)
+@@ -98,18 +98,10 @@
+ 	void   EigenMetric::Abs(){
+ 		lambda1=bamg::Abs(lambda1),lambda2=bamg::Abs(lambda2);
+ 	}/*}}}*/
+-	/*FUNCTION EigenMetric::Aniso{{{*/
+-	double EigenMetric::Aniso() const  { 
+-		return sqrt( Aniso2());
+-	}/*}}}*/
+ 	/*FUNCTION EigenMetric::Aniso2{{{*/
+ 	double EigenMetric::Aniso2() const  { 
+ 		return lmax()/lmin();
+ 	}/*}}}*/
+-	/*FUNCTION EigenMetric::BoundAniso{{{*/
+-	void   EigenMetric::BoundAniso(const double c){ 
+-		BoundAniso2(1/(c*c));
+-	}/*}}}*/
+ 	/*FUNCTION EigenMetric::Echo {{{*/
+ 	void EigenMetric::Echo(void){
+ 
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16237)
+@@ -138,28 +138,21 @@
+ 				triangles[nbt].color = Tho.subdomains[reft[i]].ReferenceNumber; 
+ 				nbt++;           
+ 			  }
+-		  if (kt!=nbt){
+-			  _error_("kt!=nbt");
+-		  }
+ 		  if (nbt==0 && nbv==0) {
+ 			  _error_("All triangles have been removed");
+ 		  }
+ 		  delete [] kk;
+ 		  delete [] reft;
+ 		  delete [] refv;
+-		  //double cutoffradian = 10.0/180.0*Pi;
+ 		  BuildGeometryFromMesh(bamgopts);
+ 		  Gh.PostRead(); 
+ 		  SetIntCoor();
+ 		  ReconstructExistingMesh();
+ 
+-		  if (!nbsubdomains){
+-			  _error_("nbsubdomains==0");
+-		  }
+-		  if (!subdomains[0].head || !subdomains[0].head->link){
+-			  _error_("!subdomains[0].head || !subdomains[0].head->link");
+-		  }
+-
++		  /*Final checks*/
++		  _assert_(kt==nbt);
++		  _assert_(nbsubdomains);
++		  _assert_(subdomains[0].head && subdomains[0].head->link); 
+ 	  }
+ 	/*}}}*/
+ 	/*FUNCTION Mesh::Mesh(Mesh & Th,Geometry * pGh,Mesh * pBth,long maxnbv_in) COPY{{{*/
+@@ -1724,16 +1717,13 @@
+ 			long i0 = GetId(triangles[it][VerticesOfTriangularEdge[j][0]]);
+ 			long i1 = GetId(triangles[it][VerticesOfTriangularEdge[j][1]]);
+ 			k = edge4->SortAndFind(i0,i1);
+-			if(k>=0){
+-				subdomains[i].direction = (vertices + i0 == edges[k].v[0]) ? 1 : -1;
+-				subdomains[i].edge = edges+k;
+-				Gh.subdomains[i].edge = Gh.edges + k;
+-				Gh.subdomains[i].direction  =  subdomains[i].direction;
+-				Gh.subdomains[i].ReferenceNumber =  subdomains[i].ReferenceNumber;
+-			}
+-			else
+-			 _error_("%i should be >=0");
+-		  }
++			_assert_(k>=0);
++			subdomains[i].direction = (vertices + i0 == edges[k].v[0]) ? 1 : -1;
++			subdomains[i].edge = edges+k;
++			Gh.subdomains[i].edge = Gh.edges + k;
++			Gh.subdomains[i].direction  =  subdomains[i].direction;
++			Gh.subdomains[i].ReferenceNumber =  subdomains[i].ReferenceNumber;
++		}
+ 
+ 		delete edge4;
+ 		delete [] colorV;
+Index: ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 16236)
++++ ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.h	(revision 16237)
+@@ -1,13 +0,0 @@
+-/*!\file:  InputArtificialNoisex.h
+- * \brief header file for updating datasets from inputs
+- */ 
+-
+-#ifndef _INPUTARTIFICIALNOISEX_H
+-#define _INPUTARTIFICIALNOISEX_H
+-
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void	InputArtificialNoisex( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int enum_name,IssmDouble min,IssmDouble max);
+-
+-#endif  /* _UPDATEINPUTSFROMVECTORXX_H */
+Index: ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 16237)
+@@ -1,18 +0,0 @@
+-/*!\file InputArtificialNoisex
+- * \brief: update datasets using  parameter inputs
+- */
+-
+-#include "./InputArtificialNoisex.h"
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-
+-void InputArtificialNoisex( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int enum_name,IssmDouble min,IssmDouble max){
+-
+-	int i;
+-
+-	/*Update elements, nodes, loads and materials from inputs: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->InputArtificialNoise(enum_name,min,max);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16236)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16237)
+@@ -50,7 +50,6 @@
+ #include "./InputUpdateFromVectorx/InputUpdateFromVectorx.h"
+ #include "./InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
+ #include "./InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h"
+-#include "./InputArtificialNoisex/InputArtificialNoisex.h"
+ #include "./IoModelToConstraintsx/IoModelToConstraintsx.h"
+ #include "./KMLFileReadx/KMLFileReadx.h"
+ #include "./KMLMeshWritex/KMLMeshWritex.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16236)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16237)
+@@ -297,8 +297,6 @@
+ 					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp\
+ 					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h\
+ 					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
+-					./modules/InputArtificialNoisex/InputArtificialNoisex.h\
+-					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.h\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
+ 					./modules/ComputeBasalStressx/ComputeBasalStressx.h\
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16236)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16237)
+@@ -56,7 +56,6 @@
+                           $ENV{ISSM_DIR}/src/c/modules/GetSolutionFromInputsx 
+                           $ENV{ISSM_DIR}/src/c/modules/GetVectorFromInputsx 
+                           $ENV{ISSM_DIR}/src/c/modules/InputUpdateFromVectorx 
+-                          $ENV{ISSM_DIR}/src/c/modules/InputArtificialNoisex 
+                           $ENV{ISSM_DIR}/src/c/modules/ConfigureObjectsx 
+                           $ENV{ISSM_DIR}/src/c/modules/ComputeBasalStressx 
+                           $ENV{ISSM_DIR}/src/c/modules/ComputeStrainRatex 
+@@ -205,7 +204,6 @@
+ 					./modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
+ 					./modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+ 					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
+-					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp
+ 					./modules/ComputeBasalStressx/ComputeBasalStressx.cpp
+ 					./modules/ComputeStrainRatex/ComputeStrainRatex.cpp
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16236)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.h	(revision 16237)
+@@ -84,17 +84,12 @@
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Riftfront specific routines: {{{*/
+-		bool  PreStable();
+ 		ElementMatrix* PenaltyCreateKMatrixStressbalanceHoriz(IssmDouble kmax);
+ 		ElementVector* PenaltyCreatePVectorStressbalanceHoriz(IssmDouble kmax);
+-		void  SetPreStable();
+-		int   PreConstrain(int* punstable);
+ 		int   Constrain(int* punstable);
+ 		void  FreezeConstraints(void);
+ 		bool  IsFrozen(void);
+-		int   PotentialUnstableConstraint(int* punstable);
+ 		bool  IsInput(int name);
+ 		/*}}}*/
+ };
+-
+ #endif  /* _RIFTFRONT_H_ */
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16236)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16237)
+@@ -732,127 +732,6 @@
+ 	else return 0;
+ }
+ /*}}}*/
+-/*FUNCTION Riftfront::PotentialUnstableConstraint {{{*/
+-int   Riftfront::PotentialUnstableConstraint(int* punstable){
+-
+-	IssmDouble  penetration;
+-	int         unstable;
+-	IssmDouble  vx1;
+-	IssmDouble  vy1;
+-	IssmDouble  vx2;
+-	IssmDouble  vy2;
+-
+-	/*Objects: */
+-	Tria       *tria1 = NULL;
+-	Tria       *tria2 = NULL;
+-
+-	/*enum of element? */
+-	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+-
+-	/*recover elements on both side of rift: */
+-	tria1=(Tria*)elements[0];
+-	tria2=(Tria*)elements[1];
+-
+-	/*First recover velocity: */
+-	tria1->GetInputValue(&vx1,nodes[0],VxEnum);
+-	tria2->GetInputValue(&vx2,nodes[1],VxEnum);
+-	tria1->GetInputValue(&vy1,nodes[0],VyEnum);
+-	tria2->GetInputValue(&vy2,nodes[1],VyEnum);
+-
+-	/*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */
+-	penetration=(vx2-vx1)*normal[0]+(vy2-vy1)*normal[1];
+-
+-	/*Ok, we are looking for positive penetration in an active constraint: */
+-	if(this->active){
+-		if (penetration>=0){
+-			unstable=1;
+-		}
+-		else{
+-			unstable=0;
+-		}
+-	}
+-	else{
+-		unstable=0;
+-	}
+-
+-	/*assign output pointer: */
+-	*punstable=unstable;
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION Riftfront::PreConstrain {{{*/
+-int   Riftfront::PreConstrain(int* punstable){
+-
+-	IssmDouble  penetration;
+-	int         unstable;
+-	IssmDouble  vx1;
+-	IssmDouble  vy1;
+-	IssmDouble  vx2;
+-	IssmDouble  vy2;
+-
+-	/*Objects: */
+-	Tria *tria1 = NULL;
+-	Tria *tria2 = NULL;
+-
+-	/*enum of element? */
+-	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+-
+-	/*recover elements on both side of rift: */
+-	tria1=(Tria*)elements[0];
+-	tria2=(Tria*)elements[1];
+-
+-	/*First recover velocity: */
+-	tria1->GetInputValue(&vx1,nodes[0],VxEnum);
+-	tria2->GetInputValue(&vx2,nodes[1],VxEnum);
+-	tria1->GetInputValue(&vy1,nodes[0],VyEnum);
+-	tria2->GetInputValue(&vy2,nodes[1],VyEnum);
+-
+-	/*Node 1 faces node 2, compute penetration of 2 into 1 (V2-V1).N (with N normal vector, and V velocity vector: */
+-	penetration=(vx2-vx1)*normal[0]+(vy2-vy1)*normal[1];
+-
+-	/*Ok, we are preconstraining here. Ie, anything that penetrates is constrained until stability of the entire set 
+-	 * of constraints is reached.: */
+-	if(penetration<0){
+-		if (!this->active){
+-			/*This is the first time penetration happens: */
+-			this->active=1;
+-			unstable=1;
+-		}
+-		else{
+-			/*This constraint was already active: */
+-			this->active=1;
+-			unstable=0;
+-		}
+-	}
+-	else{
+-		/*No penetration happening. : */
+-		if (!this->active){
+-			/*This penalty was not active, and no penetration happening. Do nonthing: */
+-			this->active=0;
+-			unstable=0; 
+-		}
+-		else{
+-			/*Ok, this penalty wants to get released. But not now, this is preconstraint, not constraint: */
+-			this->active=1;
+-			unstable=0;
+-		}
+-	}
+-
+-	/*assign output pointer: */
+-	*punstable=unstable;
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION Riftfront::PreStable {{{*/
+-bool  Riftfront::PreStable(){
+-	return prestable;
+-}
+-/*}}}*/
+-/*FUNCTION Riftfront::SetPreStable {{{*/
+-void Riftfront::SetPreStable(){
+-	prestable=1;
+-}
+-/*}}}*/
+ /*FUNCTION Riftfront::IsInput{{{*/
+ bool Riftfront::IsInput(int name){
+ 	if (
Index: issm/oecreview/Archive/16133-16554/ISSM-16237-16238.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16237-16238.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16237-16238.diff	(revision 16556)
@@ -0,0 +1,219 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16238)
+@@ -73,7 +73,6 @@
+ 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
+ 		virtual void   GetVectorFromResults(Vector<IssmDouble>* vector,int id,int enum_in,int interp)=0;
+-		virtual void   InputArtificialNoise(int enum_type,IssmDouble min,IssmDouble max)=0;
+ 		virtual IssmDouble TimeAdapt()=0;
+ 		virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
+ 		virtual void   Delta18oParameterization(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16238)
+@@ -1400,19 +1400,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputArtificialNoise{{{*/
+-void  Tria::InputArtificialNoise(int enum_type,IssmDouble min,IssmDouble max){
+-
+-	Input* input=NULL;
+-
+-	/*Make a copy of the original input: */
+-	input=(Input*)this->inputs->GetInput(enum_type);
+-	if(!input)_error_("could not find old input with enum: " << EnumToStringx(enum_type));
+-
+-	/*ArtificialNoise: */
+-	input->ArtificialNoise(min,max);
+-}
+-/*}}}*/
+ /*FUNCTION Tria::InputDepthAverageAtBase {{{*/
+ void  Tria::InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16238)
+@@ -89,7 +89,6 @@
+ 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+ 		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
+-		void        InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+ 		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void        InputDuplicate(int original_enum,int new_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16238)
+@@ -1857,19 +1857,6 @@
+ 	return id; 
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputArtificialNoise{{{*/
+-void  Penta::InputArtificialNoise(int enum_type,IssmDouble min,IssmDouble max){
+-
+-	Input* input=NULL;
+-
+-	/*Make a copy of the original input: */
+-	input=(Input*)this->inputs->GetInput(enum_type);
+-	if(!input)_error_("could not find old input with enum: " << EnumToStringx(enum_type));
+-
+-	/*ArtificialNoise: */
+-	input->ArtificialNoise(min,max);
+-}
+-/*}}}*/
+ /*FUNCTION Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+ void Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16238)
+@@ -92,7 +92,6 @@
+ 		void   GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int name_enum,int interp);
+ 
+ 		int    Sid();
+-		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+ 		void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void   InputDuplicate(int original_enum,int new_enum);
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16238)
+@@ -67,7 +67,6 @@
+ 		void ConstrainMin(IssmDouble minimum);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
+ 		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16238)
+@@ -57,7 +57,6 @@
+ 		virtual IssmDouble Min(void)=0;
+ 		virtual void Set(IssmDouble setvalue)=0;
+ 		virtual void   Scale(IssmDouble scale_factor)=0;
+-		virtual void   ArtificialNoise(IssmDouble min,IssmDouble max)=0;
+ 		virtual void   AXPY(Input* xinput,IssmDouble scalar)=0;
+ 		virtual void   Constrain(IssmDouble cm_min, IssmDouble cm_max)=0;
+ 		virtual void   VerticallyIntegrate(Input* thickness_input)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16238)
+@@ -73,7 +73,6 @@
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(void);
+ 		void Constrain(IssmDouble min,IssmDouble max);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16238)
+@@ -67,7 +67,6 @@
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
+ 		void Constrain(void){_error_("not implemented yet");};
+ 		void Constrain(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16238)
+@@ -327,22 +327,6 @@
+ 	for(int i=0;i<numnodes;i++)values[i]=setvalue;
+ }
+ /*}}}*/
+-/*FUNCTION TriaInput::ArtificialNoise{{{*/
+-void TriaInput::ArtificialNoise(IssmDouble min,IssmDouble max){
+-
+-	int i;
+-	const int numnodes=this->NumberofNodes();
+-	IssmDouble noise;
+-
+-	/*Compute random number between bounds:
+-	 * rand() outputs an integer in [0 RAND_MAX]
+-	 * (IssmDouble)rand()/RAND_MAX is in [0 1]
+-	 */
+-	 noise=min+(max-min)*(IssmDouble)rand()/RAND_MAX;
+-
+-	for(i=0;i<numnodes;i++)values[i]=values[i]+noise;
+-}
+-/*}}}*/
+ /*FUNCTION TriaInput::AXPY{{{*/
+ void TriaInput::AXPY(Input* xinput,IssmDouble scalar){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16238)
+@@ -69,7 +69,6 @@
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
+ 		IssmDouble InfinityNorm(void){_error_("InfinityNorm not implemented for integers");};
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16238)
+@@ -73,7 +73,6 @@
+ 		IssmDouble MinAbs(void){_error_("Min not implemented for booleans");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("Constrain not implemented for booleans");};
+ 		void Extrude(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16238)
+@@ -69,7 +69,6 @@
+ 		void ConstrainMin(IssmDouble minimum);
+ 		void Set(IssmDouble setvalue);
+ 		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max);
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
+ 		IssmDouble InfinityNorm(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16238)
+@@ -69,7 +69,6 @@
+ 		void ConstrainMin(IssmDouble minimum);
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor);
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xinput,IssmDouble scalar);
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max);
+ 		IssmDouble InfinityNorm(void);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16237)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16238)
+@@ -72,7 +72,6 @@
+ 		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
+ 		void Set(IssmDouble setvalue){_error_("Set not implemented yet");};
+ 		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
+-		void ArtificialNoise(IssmDouble min,IssmDouble max){_error_("not implemented yet");};
+ 		void AXPY(Input* xforcing,IssmDouble scalar){_error_("not implemented yet");};
+ 		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("not implemented yet");};
+ 		IssmDouble InfinityNorm(void);
Index: issm/oecreview/Archive/16133-16554/ISSM-16238-16239.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16238-16239.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16238-16239.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/scripts/cppcheck.sh
+===================================================================
+--- ../trunk-jpl/scripts/cppcheck.sh	(revision 16238)
++++ ../trunk-jpl/scripts/cppcheck.sh	(revision 16239)
+@@ -1,4 +1,7 @@
+ #!/bin/bash
+ 
+-cppcheck -j 8 --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
+-#cppcheck --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
++#comprehensive check, except unusedFunction
++#cppcheck -j 32 --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=all $ISSM_DIR/src/c 2> CPPCHECK.err
++
++#unused function only (slow)
++cppcheck --include=$ISSM_DIR/config.h -DHAVE_CONFIG_H -D_HAVE_ADOLC_ -D_HAVE_DAKOTA_ --enable=unusedFunction $ISSM_DIR/src 2> CPPCHECK.err
Index: issm/oecreview/Archive/16133-16554/ISSM-16239-16240.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16239-16240.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16239-16240.diff	(revision 16556)
@@ -0,0 +1,305 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16239)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16240)
+@@ -18,6 +18,7 @@
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
++void CreateParametersStressbalance(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 16240)
+@@ -0,0 +1,44 @@
++/*!\file: CreateParametersStressbalance.cpp
++ * \brief driver for creating parameters dataset, for control analysis.
++ */ 
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void CreateParametersStressbalance(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
++
++	/*Intermediaries*/
++	int         numoutputs;
++	IssmDouble *requestedoutputs = NULL;
++
++	/*Get parameters: */
++	Parameters *parameters=*pparameters;
++
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
++
++	/*Requested outputs*/
++	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,StressbalanceRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new IntVecParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(requestedoutputs,StressbalanceRequestedOutputsEnum);
++
++	/*Assign output pointer: */
++	*pparameters = parameters;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16239)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16240)
+@@ -10,38 +10,33 @@
+ 
+ void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type){
+ 
+-	/*variable declarations: {{{*/
+-	int i;
+-	Parameters* parameters = NULL;
++	/*variable declarations*/
++	int          i;
++	Parameters  *parameters             = NULL;
++	int         *part                   = NULL;
++	double      *dpart                  = NULL;
++	char       **responsedescriptors    = NULL;
++	int          numresponsedescriptors;
++	char       **variabledescriptors    = NULL;
++	int          numvariabledescriptors;
++	char        *descriptor             = NULL;
++	double      *dakota_parameter       = NULL;
+ 
+-	int*     part=NULL;
+-	double*  dpart=NULL;
+-
+-	char**  responsedescriptors=NULL;
+-	int     numresponsedescriptors;
+-	char**  variabledescriptors=NULL;
+-	int     numvariabledescriptors;
+-	char*   descriptor=NULL;
+-	double* dakota_parameter=NULL;
+-
+ 	//qmu files
+-	char* qmuinname=NULL;
+-	char* qmuerrname=NULL;
+-	char* qmuoutname=NULL;
++	char *qmuinname  = NULL;
++	char *qmuerrname = NULL;
++	char *qmuoutname = NULL;
+ 
+ 	//descriptors:
+ 	char tag[50];
+ 
+-	bool     dakota_analysis=false;
+-	char*    name=NULL;
+-	int      numberofresponses;
+-	int      nrows;
+-	int      ncols;
++	bool  dakota_analysis   = false;
++	char *name              = NULL;
++	int   numberofresponses;
++	int   nrows,ncols;
+ 
+-	/*}}}*/
+-
+ 	/*recover parameters : */
+-	parameters=*pparameters;
++	parameters = *pparameters;
+ 
+ 	/*recover parameters: */
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+@@ -51,7 +46,7 @@
+ 		iomodel->Constant(&name,MiscellaneousNameEnum);
+ 		iomodel->Constant(&numberofresponses,QmuNumberofresponsesEnum);
+ 
+-		/*name of qmu input, error and output files:{{{*/
++		/*name of qmu input, error and output files*/
+ 		qmuinname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.in")+1));
+ 		sprintf(qmuinname,"%s%s%s",rootpath,name,".qmu.in");
+ 		parameters->AddObject(new   StringParam(QmuInNameEnum,qmuinname));
+@@ -63,29 +58,25 @@
+ 		qmuerrname=xNew<char>((strlen(rootpath)+strlen(name)+strlen(".qmu.err")+1));
+ 		sprintf(qmuerrname,"%s%s%s",rootpath,name,".qmu.err");
+ 		parameters->AddObject(new   StringParam(QmuErrNameEnum,qmuerrname));
+-		/*}}}*/
+-		/*Fetch variable descriptors: {{{*/
++
++		/*Fetch variable descriptors*/
+ 		iomodel->FetchData(&variabledescriptors,&numvariabledescriptors,QmuVariabledescriptorsEnum);
+ 
+ 		/*Ok, we have all the variable descriptors. Build a parameter with it: */
+ 		parameters->AddObject(new StringArrayParam(QmuVariabledescriptorsEnum,variabledescriptors,numvariabledescriptors));
+ 
+-		/*}}}*/
+-		/*Fetch response descriptors: {{{*/
++		/*Fetch response descriptors*/
+ 		iomodel->FetchData(&responsedescriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+ 
+ 		/*Ok, we have all the response descriptors. Build a parameter with it: */
+ 		parameters->AddObject(new StringArrayParam(QmuResponsedescriptorsEnum,responsedescriptors,numresponsedescriptors));
+ 		parameters->AddObject(new    IntParam(QmuNumberofresponsesEnum,numberofresponses));
+-		/*}}}*/
+-		/*Deal with partitioning: {{{*/
++
++		/*Deal with partitioning*/
+ 		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
+-
+ 		parameters->AddObject(iomodel->CopyConstantObject(QmuNumberofpartitionsEnum));
+ 		iomodel->FetchData(&dpart,NULL,NULL,QmuPartitionEnum);
+-
+ 		if(!dpart){
+-
+ 			/*Partition elements and vertices and nodes: */
+ 			ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+ 
+@@ -93,38 +84,31 @@
+ 			for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
+ 		}
+ 		parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,iomodel->numberofvertices));
+-		/*}}}*/
+-		/*Deal with data needed because of qmu variables: {{{*/
+ 
++		/*Deal with data needed because of qmu variables*/
+ 		for(i=0;i<numvariabledescriptors;i++){
+-
+ 			if (strncmp(variabledescriptors[i],"scaled_",7)==0){
+ 				/*Ok, we are dealing with a variable that is distributed over nodes. Recover the name of the variable (ex: scaled_Thickness): */
+ 				sscanf(variabledescriptors[i],"scaled_%s",tag);
+ 
+ 				/*Recover data: */
+ 				iomodel->FetchData(&dakota_parameter,&nrows,&ncols,StringToEnumx(tag));
+-
+-				/*Add to parameters: */
+ 				if(nrows==iomodel->numberofvertices){
+ 					parameters->AddObject(new DoubleMatParam(StringToEnumx(tag),dakota_parameter,nrows,ncols));
+ 				}
+ 				else{
+ 					parameters->AddObject(new DoubleTransientMatParam(StringToEnumx(tag),dakota_parameter,nrows,ncols));
+ 				}
+-
+-				/*Free ressources:*/
+ 				xDelete<double>(dakota_parameter);
+ 			}
+ 		}
+-		/*}}}*/
+-		/*Free data: {{{*/
++
++		/*clean-up*/
+ 		for(i=0;i<numresponsedescriptors;i++){
+ 			descriptor=responsedescriptors[i];
+ 			xDelete<char>(descriptor);
+ 		}
+ 		xDelete<char*>(responsedescriptors);
+-
+ 		for(i=0;i<numvariabledescriptors;i++){
+ 			descriptor=variabledescriptors[i];
+ 			xDelete<char>(descriptor);
+@@ -135,12 +119,11 @@
+ 		xDelete<char>(qmuinname);
+ 		xDelete<char>(qmuerrname);
+ 		xDelete<char>(qmuoutname);
+-		/*}}}*/
+-	} //if(dakota_analysis)
++	}
+ 
+ 	/*Free data*/
+ 	xDelete<char>(name);
+ 
+ 	/*Assign output pointer: */
+-	*pparameters=parameters;
++	*pparameters = parameters;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16239)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16240)
+@@ -45,19 +45,7 @@
+ 
+ 	/*Copy some constants from iomodel */
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
+@@ -82,10 +70,6 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalStabilizationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyThresholdEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyLockEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
+@@ -147,12 +131,6 @@
+ 	/*By default, save all results*/
+ 	parameters->AddObject(new BoolParam(SaveResultsEnum,true));
+ 
+-	/*Requested outputs*/
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,StressbalanceRequestedOutputsEnum);
+-	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,StressbalanceRequestedOutputsEnum);
+-
+ 	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,TransientRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(TransientNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(TransientRequestedOutputsEnum,requestedoutputs,numoutputs));
+@@ -230,7 +208,7 @@
+ 	}
+ 	/*}}}*/
+ 
+-	/*Solution specific parameters (FIXME: extend to other params)*/
++	/*Solution specific parameters*/
+ 	#ifdef _HAVE_HYDROLOGY_
+ 	CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
+ 	CreateParametersHydrologyDCInefficient(&parameters,iomodel,solution_type,analysis_type);
+@@ -250,6 +228,11 @@
+ 	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
+ 	#endif
+ 
++	#ifdef _HAVE_STRESSBALANCE_
++	CreateParametersStressbalance(&parameters,iomodel,solution_type,analysis_type);
++	#endif
++
++
+ 	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16239)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16240)
+@@ -486,6 +486,7 @@
+ 					      ./modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp \
+ 					      ./modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp \
+ 					      ./modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp\
++							./modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp\
+ 					      ./modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp\
+ 					      ./modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp \
+ 					      ./modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp \
Index: issm/oecreview/Archive/16133-16554/ISSM-16240-16241.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16240-16241.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16240-16241.diff	(revision 16556)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive1602.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1601.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16241-16242.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16241-16242.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16241-16242.diff	(revision 16556)
@@ -0,0 +1,132 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16241)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16242)
+@@ -40,19 +40,43 @@
+ 	if(isautodiff){
+ 
+ 		#ifdef _HAVE_ADOLC_
++			if(VerboseAutodiff())_printf0_("   start ad core\n");
+ 
+ 			/*First, stop tracing: */
+ 			trace_off();
+ 
+-			/*preliminary checks: */
++			/*retrieve num_dependents and num_independents only on rank 0: */
+ 			if (my_rank==0) {
+ 				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-				if(!(num_dependents*num_independents)) return;
+ 			}
++				
++			/*if we don't have dependents or independents, no point in running ad_core: */
++			if(!(num_dependents*num_independents)) return;
+ 
+-			if(VerboseAutodiff())_printf0_("   start ad core\n");
++			/*Print tape statistics so that user can kill this run if something is off already:*/
++			tapestats(my_rank,tape_stats); //reading of tape statistics
++			if(VerboseAutodiff()){
++				_printf0_("   ADOLC statistics: \n");
++				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"Maximum number of live active variables: " <<tape_stats[2] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"Number of values in the taylor (value) stack: " <<tape_stats[3] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" Number of operations per buffer == OBUFSIZE (usrparms.h) " <<tape_stats[4] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" overall number of operations " <<tape_stats[5] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" operations file written or not " <<tape_stats[6] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" overall number of locations " <<tape_stats[7] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" locations file written or not " <<tape_stats[8] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" overall number of values " <<tape_stats[9] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" values file written or not " <<tape_stats[10] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" Number of locations per buffer == LBUFSIZE (usrparms.h) " <<tape_stats[11] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" Number of values per buffer == CBUFSIZE (usrparms.h) " <<tape_stats[12] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" Number of taylors per buffer <= TBUFSIZE (usrparms.h) " <<tape_stats[13] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" Number of eq_*_prod for sparsity pattern " <<tape_stats[14] << "\n");
++				_printf0_("   "<<setw(45)<<left<<" represents the size of the stats vector " <<tape_stats[15] << "\n");
++			}
+ 
++
+ 			/*retrieve state variable: */
+ 			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
+@@ -72,7 +96,7 @@
+ 			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+ 			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 
+-			if (strcmp(driver,"fos_forward")==0){
++			if (strcmp(driver,"fos_forward")==0){ /*{{{*/
+ 
+ 				int     anIndepIndex;
+ 				double *tangentDir         = NULL;
+@@ -109,8 +133,8 @@
+ 				xDelete(theOutput);
+ 				xDelete(jacTimesTangentDir);
+ 				xDelete(tangentDir);
+-			}
+-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
++			} /*}}}*/
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){ /*{{{*/
+ 
+ 				int      tangentDirNum;
+ 				int      dummy;
+@@ -180,8 +204,8 @@
+ 				/*Free resources: */
+ 				xDelete(jacTimesSeed);
+ 				xDelete(indepIndices);
+-			}
+-			else if (strcmp(driver,"fos_reverse")==0) {
++			} /*}}}*/
++			else if (strcmp(driver,"fos_reverse")==0) { /*{{{*/
+ 
+ 				int     aDepIndex=0;
+ 				double *aWeightVector=NULL;
+@@ -218,8 +242,8 @@
+ 				/*free resources :*/
+ 				xDelete(weightVectorTimesJac);
+ 				xDelete(aWeightVector);
+-			}
+-			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
++			} /*}}}*/
++			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){ /*{{{*/
+ 
+ 				int* depIndices=NULL;
+ 				int weightNum;
+@@ -245,9 +269,9 @@
+ 				weightsTimesJac=xNew<double>(weightNum,num_independents);
+ 
+ 				/*set the forward method function pointers: */
+-#ifdef _HAVE_GSL_
++				#ifdef _HAVE_GSL_
+ 				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+-#endif
++				#endif
+ 
+ 				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+ 				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
+@@ -281,7 +305,7 @@
+ 				xDelete(weights);
+ 				xDelete(weightsTimesJac);
+ 				xDelete(depIndices);
+-			}
++			} /*}}}*/
+ 			else _error_("driver: " << driver << " not yet supported!");
+ 
+ 			/* delete the allocated space for the parameters:*/
+@@ -296,17 +320,6 @@
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+ 
+-			/*Print statistics:*/
+-			tapestats(my_rank,tape_stats); //reading of tape statistics
+-			if(VerboseAutodiff()){
+-				_printf0_("   ADOLC statistics: \n");
+-				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5] << "\n");
+-			}
+ 			if(VerboseAutodiff())_printf0_("   end AD core\n");
+ 
+ 			/*Free resources: */
Index: issm/oecreview/Archive/16133-16554/ISSM-16242-16243.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16242-16243.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16242-16243.diff	(revision 16556)
@@ -0,0 +1,451 @@
+Index: ../trunk-jpl/externalpackages/freetype/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/freetype/install.sh	(revision 16242)
++++ ../trunk-jpl/externalpackages/freetype/install.sh	(revision 16243)
+@@ -4,18 +4,18 @@
+ #Some cleanup
+ rm -rf src
+ rm -rf install
+-rm -rf freetype-2.4.9
++rm -rf freetype-2.5.0
+ mkdir src install
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/freetype-2.4.9.tar.gz' 'freetype-2.4.9.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/freetype-2.5.0.tar.gz' 'freetype-2.5.0.tar.gz'
+ 
+ #Untar 
+-tar -zxvf  freetype-2.4.9.tar.gz
++tar -zxvf  freetype-2.5.0.tar.gz
+ 
+ #Move freetype into src directory
+-mv freetype-2.4.9/* src
+-rm -rf freetype-2.4.9
++mv freetype-2.5.0/* src
++rm -rf freetype-2.5.0
+ 
+ #Configure freetype
+ cd src
+Index: ../trunk-jpl/externalpackages/freetype
+===================================================================
+--- ../trunk-jpl/externalpackages/freetype	(revision 16242)
++++ ../trunk-jpl/externalpackages/freetype	(revision 16243)
+
+Property changes on: ../trunk-jpl/externalpackages/freetype
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++freetype-*
+ *.gz
+ *.zip
+ *.a
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16242)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16243)
+@@ -28,6 +28,10 @@
+ 	AutodiffFosReverseIndexEnum,
+ 	AutodiffMassFluxSegmentsPresentEnum,
+ 	AutodiffKeepEnum,
++	AutodiffObufsizeEnum,
++	AutodiffLbufsizeEnum,
++	AutodiffCbufsizeEnum,
++	AutodiffTbufsizeEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16242)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16243)
+@@ -36,6 +36,10 @@
+ 		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+ 		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+ 		case AutodiffKeepEnum : return "AutodiffKeep";
++		case AutodiffObufsizeEnum : return "AutodiffObufsize";
++		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
++		case AutodiffCbufsizeEnum : return "AutodiffCbufsize";
++		case AutodiffTbufsizeEnum : return "AutodiffTbufsize";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16242)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16243)
+@@ -36,6 +36,10 @@
+ 	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+ 	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
++	      else if (strcmp(name,"AutodiffObufsize")==0) return AutodiffObufsizeEnum;
++	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
++	      else if (strcmp(name,"AutodiffCbufsize")==0) return AutodiffCbufsizeEnum;
++	      else if (strcmp(name,"AutodiffTbufsize")==0) return AutodiffTbufsizeEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -132,14 +136,14 @@
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+ 	      else if (strcmp(name,"InversionGradientOnly")==0) return InversionGradientOnlyEnum;
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+-	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
++         else stage=2;
++   }
++   if(stage==2){
++	      if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+-         else stage=2;
+-   }
+-   if(stage==2){
+-	      if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
++	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+ 	      else if (strcmp(name,"InversionMinParameters")==0) return InversionMinParametersEnum;
+ 	      else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
+ 	      else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
+@@ -255,14 +259,14 @@
+ 	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+-	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
++	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+ 	      else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum;
+ 	      else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum;
+ 	      else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum;
+@@ -378,14 +382,14 @@
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"Param")==0) return ParamEnum;
++	      else if (strcmp(name,"Param")==0) return ParamEnum;
+ 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+@@ -501,14 +505,14 @@
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+-	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
++	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+ 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+ 	      else if (strcmp(name,"P2")==0) return P2Enum;
+ 	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16242)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16243)
+@@ -37,9 +37,13 @@
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 
+-		/*Copy some parameters from IoModel to parameters dataset: */
++		/*Copy some parameters from IoModel to parameters dataset: {{{*/
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
+-
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffObufsizeEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffCbufsizeEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffLbufsizeEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffTbufsizeEnum));
++		/*}}}*/
+ 		/*retrieve driver: {{{*/
+ 		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16242)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16243)
+@@ -19,7 +19,10 @@
+ 		self.dependents   = []
+ 		self.independents = []
+ 		self.driver       = 'fos_forward'
+-
++		self.obufsize     = float('NaN')
++		self.lbufsize     = float('NaN')
++		self.cbufsize     = float('NaN')
++		self.tbufsize     = float('NaN')
+ 		if not len(args):
+ 			self.setdefaultparameters()
+ 		else:
+@@ -32,17 +35,29 @@
+ 		s+="%s\n" % fielddisplay(self,'dependents',"list of dependent variables")
+ 		s+="%s\n" % fielddisplay(self,'independents',"list of independent variables")
+ 		s+="%s\n" % fielddisplay(self,'driver',"ADOLC driver ('fos_forward' or 'fov_forward')")
+-
++		s+="%s\n" % fielddisplay(self,'obufsize',"Number of operations per buffer (==OBUFSIZE in usrparms.h)")
++		s+="%s\n" % fielddisplay(self,'lbufsize',"Number of locations per buffer (==LBUFSIZE in usrparms.h)")
++		s+="%s\n" % fielddisplay(self,'cbufsize',"Number of values per buffer (==CBUFSIZE in usrparms.h)")
++		s+="%s\n" % fielddisplay(self,'tbufsize',"Number of taylors per buffer (<=TBUFSIZE in usrparms.h)")
+ 		return s
+ 	# }}}
+ 	def setdefaultparameters(self):    # {{{
+-		return self
++		self.obufsize     = 524288
++		self.lbufsize     = 524288
++		self.cbufsize     = 524288
++		self.tbufsize     = 524288
++return self
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		#Early return 
+ 		if not self.isautodiff:
+-			return md
++			return md 
++		
++		md = checkfield(md,'autodiff.obufsize','>=',524288)
++		md = checkfield(md,'autodiff.lbufsize','>=',524288)
++		md = checkfield(md,'autodiff.cbufsize','>=',524288)
++		md = checkfield(md,'autodiff.tbufsize','>=',524288)
+ 
+ 		#Driver value:
+ 		md = checkfield(md,'autodiff.driver','values',['fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'])
+@@ -64,7 +79,13 @@
+ 			WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+ 			WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean')
+ 			return
+-
++			
++		#buffer sizes {{{
++		WriteData(fid,'data',self,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
++		WriteData(fid,'data',self,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
++		WriteData(fid,'data',self,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
++		WriteData(fid,'data',self,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
++		#}}}
+ 		#process dependent variables {{{
+ 		num_dependent_objects=len(self.dependents)
+ 		WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer')
+@@ -83,7 +104,6 @@
+ 			WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3)
+ 			WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
+-
+ 		#process independent variables {{{
+ 		num_independent_objects=len(self.independents)
+ 		WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer')
+@@ -99,7 +119,6 @@
+ 			WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3)
+ 			WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
+-
+ 		#if driver is fos_forward, build index:  {{{
+ 		if strcmpi(self.driver,'fos_forward'):
+ 			index=0
+@@ -117,7 +136,6 @@
+ 			index-=1    #get c-index numbering going
+ 			WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer')
+ 		#}}}
+-
+ 		#if driver is fos_reverse, build index:  {{{
+ 		if strcmpi(self.driver,'fos_reverse'):
+ 			index=0
+@@ -135,7 +153,6 @@
+ 			index-=1    #get c-index numbering going
+ 			WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer')
+ 		#}}}
+-
+ 		#if driver is fov_forward, build indices:  {{{
+ 		if strcmpi(self.driver,'fov_forward'):
+ 			indices=0
+@@ -153,7 +170,6 @@
+ 			indices-=1    #get c-indices numbering going
+ 			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
+-
+ 		#deal with mass fluxes:  {{{
+ 		mass_flux_segments=[dep.segments for dep in self.dependents if strcmpi(dep.name,'MassFlux')]
+ 
+@@ -164,7 +180,6 @@
+ 			flag=False
+ 		WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+ 		#}}}
+-
+ 		#deal with trace keep on: {{{
+ 		keep=False
+ 
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16242)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16243)
+@@ -4,12 +4,17 @@
+ %      autodiff=autodiff();
+ 
+ classdef autodiff
+-	properties (SetAccess=public) 
+-		isautodiff   = false;
++	properties (SetAccess=public)  
++		% {{{isautodiff   = false;
+ 		dependents   = {};
+ 		independents = {};
+ 		driver       = 'fos_forward';
+-	end
++		obufsize     = NaN;
++		lbufsize     = NaN;
++		cbufsize     = NaN;
++		tbufsize     = NaN;
++		end
++		%}}}
+ 	methods
+ 		function obj = autodiff(varargin) % {{{
+ 			switch nargin
+@@ -20,7 +25,10 @@
+ 			end
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-
++		obufsize     = 524288;
++		lbufsize     = 524288;
++		cbufsize     = 524288;
++		tbufsize     = 524288;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -29,6 +37,12 @@
+ 
+ 			%Driver value:
+ 			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'});
++			
++			%buffer values: 
++			md = checkfield(md,'autodiff.obufsize','>=',524288);
++			md = checkfield(md,'autodiff.lbufsize','>=',524288);
++			md = checkfield(md,'autodiff.cbufsize','>=',524288);
++			md = checkfield(md,'autodiff.tbufsize','>=',524288);
+ 
+ 			%go through our dependents and independents and check consistency: 
+ 			for i=1:numel(obj.dependents),
+@@ -47,6 +61,10 @@
+ 			fielddisplay(obj,'dependents','list of dependent variables');
+ 			fielddisplay(obj,'independents','list of independent variables');
+ 			fielddisplay(obj,'driver','ADOLC driver (''fos_forward'' or ''fov_forward'')');
++			fielddisplay(obj,'obufsize','Number of operations per buffer (==OBUFSIZE in usrparms.h)');
++			fielddisplay(obj,'lbufsize','Number of locations per buffer (==LBUFSIZE in usrparms.h)');
++			fielddisplay(obj,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)');
++			fielddisplay(obj,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 
+@@ -60,6 +78,12 @@
+ 				return;
+ 			end
+ 
++			%buffer sizes {{{
++			WriteData(fid,'data',obj,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
++			WriteData(fid,'data',obj,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
++			WriteData(fid,'data',obj,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
++			WriteData(fid,'data',obj,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
++			%}}}
+ 			%process dependent variables {{{
+ 			num_dependent_objects=numel(obj.dependents);
+ 			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
+Index: ../trunk-jpl/src/m/enum/AutodiffLbufsizeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffLbufsizeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffLbufsizeEnum.m	(revision 16243)
+@@ -0,0 +1,11 @@
++function macro=AutodiffLbufsizeEnum()
++%AUTODIFFLBUFSIZEENUM - Enum of AutodiffLbufsize
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffLbufsizeEnum()
++
++macro=StringToEnum('AutodiffLbufsize');
+Index: ../trunk-jpl/src/m/enum/AutodiffObufsizeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffObufsizeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffObufsizeEnum.m	(revision 16243)
+@@ -0,0 +1,11 @@
++function macro=AutodiffObufsizeEnum()
++%AUTODIFFOBUFSIZEENUM - Enum of AutodiffObufsize
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffObufsizeEnum()
++
++macro=StringToEnum('AutodiffObufsize');
+Index: ../trunk-jpl/src/m/enum/AutodiffTbufsizeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffTbufsizeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffTbufsizeEnum.m	(revision 16243)
+@@ -0,0 +1,11 @@
++function macro=AutodiffTbufsizeEnum()
++%AUTODIFFTBUFSIZEENUM - Enum of AutodiffTbufsize
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffTbufsizeEnum()
++
++macro=StringToEnum('AutodiffTbufsize');
+Index: ../trunk-jpl/src/m/enum/AutodiffCbufsizeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffCbufsizeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffCbufsizeEnum.m	(revision 16243)
+@@ -0,0 +1,11 @@
++function macro=AutodiffCbufsizeEnum()
++%AUTODIFFCBUFSIZEENUM - Enum of AutodiffCbufsize
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffCbufsizeEnum()
++
++macro=StringToEnum('AutodiffCbufsize');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16242)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16243)
+@@ -28,6 +28,10 @@
+ def AutodiffFosReverseIndexEnum(): return StringToEnum("AutodiffFosReverseIndex")[0]
+ def AutodiffMassFluxSegmentsPresentEnum(): return StringToEnum("AutodiffMassFluxSegmentsPresent")[0]
+ def AutodiffKeepEnum(): return StringToEnum("AutodiffKeep")[0]
++def AutodiffObufsizeEnum(): return StringToEnum("AutodiffObufsize")[0]
++def AutodiffLbufsizeEnum(): return StringToEnum("AutodiffLbufsize")[0]
++def AutodiffCbufsizeEnum(): return StringToEnum("AutodiffCbufsize")[0]
++def AutodiffTbufsizeEnum(): return StringToEnum("AutodiffTbufsize")[0]
+ def BalancethicknessSpcthicknessEnum(): return StringToEnum("BalancethicknessSpcthickness")[0]
+ def BalancethicknessStabilizationEnum(): return StringToEnum("BalancethicknessStabilization")[0]
+ def BalancethicknessThickeningRateEnum(): return StringToEnum("BalancethicknessThickeningRate")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16243-16244.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16243-16244.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16243-16244.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16243)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16244)
+@@ -5,7 +5,8 @@
+ 
+ classdef autodiff
+ 	properties (SetAccess=public)  
+-		% {{{isautodiff   = false;
++		% {{{ 
++		isautodiff   = false;
+ 		dependents   = {};
+ 		independents = {};
+ 		driver       = 'fos_forward';
Index: issm/oecreview/Archive/16133-16554/ISSM-16244-16245.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16244-16245.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16244-16245.diff	(revision 16556)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16244)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16245)
+@@ -13,7 +13,6 @@
+ 	   Usage:
+ 	      autodiff=autodiff();
+ 	"""
+-
+ 	def __init__(self,*args):    # {{{
+ 		self.isautodiff   = False
+ 		self.dependents   = []
+@@ -46,7 +45,7 @@
+ 		self.lbufsize     = 524288
+ 		self.cbufsize     = 524288
+ 		self.tbufsize     = 524288
+-return self
++		return self
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16245-16246.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16245-16246.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16245-16246.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16245)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16246)
+@@ -116,7 +116,7 @@
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+ 				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness'});
+-			md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
++			%md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+ 			md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps num_costfunc],'values',[101:105 201 501:506]);
+Index: ../trunk-jpl/src/m/classes/taoinversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16245)
++++ ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16246)
+@@ -74,7 +74,7 @@
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+ 				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
+-			md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
++			%md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
+ 			md = checkfield(md,'inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
+ 			md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+ 			md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16246-16247.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16246-16247.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16246-16247.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/plotoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/plotoptions.m	(revision 16246)
++++ ../trunk-jpl/src/m/classes/plotoptions.m	(revision 16247)
+@@ -44,6 +44,12 @@
+ 
+ 			 %check length of input
+ 			 if mod((nargin-1),2),
++				 for i=1:2:(nargin-1)
++					 if ~ischar(varargin{i}),
++						 disp(['Last valid option: ' varargin{i-2} ]);
++						 break;
++					 end
++				 end
+ 				 error('Invalid parameter/value pair arguments')
+ 			 end
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16247-16248.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16247-16248.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16247-16248.diff	(revision 16556)
@@ -0,0 +1,139 @@
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16247)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16248)
+@@ -20,7 +20,6 @@
+ 	int        num_controls,num_responses;
+ 	int        nsteps;
+ 	IssmDouble tol_cm;
+-	bool       cm_gradient;
+ 	int        dim;
+ 	int        solution_type;
+ 	bool       isFS;
+@@ -53,7 +52,6 @@
+ 	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
+ 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
+ 	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
+-	femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum);
+ 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+@@ -91,12 +89,6 @@
+ 		adjointcore(femmodel);
+ 		gradient_core(femmodel,n,search_scalar==0.);
+ 
+-		/*Return gradient if asked: */
+-		if (cm_gradient){
+-			InputToResultx(femmodel,GradientEnum);
+-			goto cleanup_and_return;
+-		}
+-
+ 		if(VerboseControl()) _printf0_("   optimizing along gradient direction\n");
+ 		optpars.maxiter=reCast<int,IssmDouble>(maxiter[n]); optpars.cm_jump=cm_jump[n];
+ 		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunction,&optargs);
+@@ -125,7 +117,6 @@
+ 		#endif
+ 	}
+ 
+-	cleanup_and_return:
+ 	/*Free ressources: */
+ 	xDelete<int>(control_type);
+ 	xDelete<int>(step_responses);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16247)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16248)
+@@ -126,7 +126,6 @@
+ 	InversionCostFunctionThresholdEnum,
+ 	InversionCostFunctionsCoefficientsEnum,
+ 	InversionCostFunctionsEnum,
+-	InversionGradientOnlyEnum,
+ 	InversionGradientScalingEnum,
+ 	InversionIscontrolEnum,
+ 	InversionTaoEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16247)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16248)
+@@ -134,7 +134,6 @@
+ 		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+ 		case InversionCostFunctionsCoefficientsEnum : return "InversionCostFunctionsCoefficients";
+ 		case InversionCostFunctionsEnum : return "InversionCostFunctions";
+-		case InversionGradientOnlyEnum : return "InversionGradientOnly";
+ 		case InversionGradientScalingEnum : return "InversionGradientScaling";
+ 		case InversionIscontrolEnum : return "InversionIscontrol";
+ 		case InversionTaoEnum : return "InversionTao";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16247)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16248)
+@@ -134,13 +134,12 @@
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+-	      else if (strcmp(name,"InversionGradientOnly")==0) return InversionGradientOnlyEnum;
+ 	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
++	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+-	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
++	      if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+ 	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+@@ -259,11 +258,11 @@
+ 	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
++	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+-	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
++	      if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+@@ -382,11 +381,11 @@
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Matpar")==0) return MatparEnum;
+-	      else if (strcmp(name,"Node")==0) return NodeEnum;
++	      if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+@@ -505,11 +504,11 @@
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"GiaW")==0) return GiaWEnum;
+-	      else if (strcmp(name,"P0")==0) return P0Enum;
++	      if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16247)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16248)
+@@ -36,7 +36,6 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
+ 		if(!tao_analysis){
+ 			parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
+-			parameters->AddObject(iomodel->CopyConstantObject(InversionGradientOnlyEnum));
+ 		}
+ 
+ 		/*What solution type?*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16248-16249.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16248-16249.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16248-16249.diff	(revision 16556)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16248)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16249)
+@@ -18,7 +18,6 @@
+ 		min_parameters              = NaN
+ 		max_parameters              = NaN
+ 		step_threshold              = NaN
+-		gradient_only               = 0
+ 		vx_obs                      = NaN
+ 		vy_obs                      = NaN
+ 		vz_obs                      = NaN
+@@ -49,7 +48,6 @@
+ 						obj.max_parameters              = in.max_parameters;
+ 						obj.step_threshold              = .99*ones(in.nsteps,1);
+ 						obj.vx_obs                      = in.vx_obs;
+-						obj.gradient_only               = 0;
+ 						obj.vy_obs                      = in.vy_obs;
+ 						obj.vz_obs                      = in.vz_obs;
+ 						obj.vel_obs                     = in.vel_obs;
+@@ -94,9 +92,6 @@
+ 			%the next step
+ 			obj.step_threshold=.7*ones(obj.nsteps,1); %30 per cent decrement.
+ 
+-			%stop control solution at the gradient computation and return it? 
+-			obj.gradient_only=0;
+-
+ 			%cost_function_threshold is a criteria to stop the control methods.
+ 			%if J[n]-J[n-1]/J[n] < criteria, the control run stops
+ 			%NaN if not applied
+@@ -116,12 +111,11 @@
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+ 				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness'});
+-			%md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
++			md = checkfield(md,'inversion.nsteps','numel',1,'>=',0);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+ 			md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps num_costfunc],'values',[101:105 201 501:506]);
+ 			md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+-			md = checkfield(md,'inversion.gradient_only','values',[0 1]);
+ 			md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps num_controls]);
+ 			md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+ 			md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]);
+@@ -156,7 +150,6 @@
+ 			fielddisplay(obj,'step_threshold','decrease threshold for misfit, default is 30%');
+ 			fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
+ 			fielddisplay(obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');
+-			fielddisplay(obj,'gradient_only','stop control method solution at gradient');
+ 			fielddisplay(obj,'vx_obs','observed velocity x component [m/yr]');
+ 			fielddisplay(obj,'vy_obs','observed velocity y component [m/yr]');
+ 			fielddisplay(obj,'vel_obs','observed velocity magnitude [m/yr]');
+@@ -188,7 +181,6 @@
+ 			WriteData(fid,'object',obj,'fieldname','min_parameters','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','max_parameters','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','step_threshold','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'fieldname','gradient_only','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,'object',obj,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+ 			WriteData(fid,'object',obj,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 16248)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 16249)
+@@ -28,7 +28,6 @@
+ 		self.min_parameters              = float('NaN')
+ 		self.max_parameters              = float('NaN')
+ 		self.step_threshold              = float('NaN')
+-		self.gradient_only               = 0
+ 		self.vx_obs                      = float('NaN')
+ 		self.vy_obs                      = float('NaN')
+ 		self.vz_obs                      = float('NaN')
+@@ -53,7 +52,6 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'step_threshold','decrease threshold for misfit, default is 30%'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'))
+-		string="%s\n%s"%(string,fielddisplay(self,'gradient_only','stop control method solution at gradient'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'))
+@@ -101,9 +99,6 @@
+ 		#the next step
+ 		self.step_threshold=.7*numpy.ones(self.nsteps) #30 per cent decrement
+ 
+-		#stop control solution at the gradient computation and return it? 
+-		self.gradient_only=0
+-
+ 		#cost_function_threshold is a criteria to stop the control methods.
+ 		#if J[n]-J[n-1]/J[n] < criteria, the control run stops
+ 		#NaN if not applied
+@@ -124,12 +119,11 @@
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+ 		md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
+ 		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy'])
+-		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',1)
++		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',0)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
+ 		md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps,num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
+ 		md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
+-		md = checkfield(md,'inversion.gradient_only','values',[0,1])
+ 		md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
+ 		md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
+ 		md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices,num_controls])
+@@ -164,7 +158,6 @@
+ 		WriteData(fid,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3)
+-		WriteData(fid,'object',self,'fieldname','gradient_only','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+ 		WriteData(fid,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+ 		WriteData(fid,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+Index: ../trunk-jpl/src/m/classes/taoinversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16248)
++++ ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16249)
+@@ -74,7 +74,7 @@
+ 			md = checkfield(md,'inversion.incomplete_adjoint','values',[0 1]);
+ 			md = checkfield(md,'inversion.control_parameters','cell',1,'values',...
+ 				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
+-			%md = checkfield(md,'inversion.nsteps','numel',1,'>=',1);
++			md = checkfield(md,'inversion.nsteps','numel',1,'>=',0);
+ 			md = checkfield(md,'inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
+ 			md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+ 			md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+Index: ../trunk-jpl/src/m/enum/InversionGradientOnlyEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/InversionGradientOnlyEnum.m	(revision 16248)
++++ ../trunk-jpl/src/m/enum/InversionGradientOnlyEnum.m	(revision 16249)
+@@ -1,11 +0,0 @@
+-function macro=InversionGradientOnlyEnum()
+-%INVERSIONGRADIENTONLYENUM - Enum of InversionGradientOnly
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=InversionGradientOnlyEnum()
+-
+-macro=StringToEnum('InversionGradientOnly');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16248)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16249)
+@@ -126,7 +126,6 @@
+ def InversionCostFunctionThresholdEnum(): return StringToEnum("InversionCostFunctionThreshold")[0]
+ def InversionCostFunctionsCoefficientsEnum(): return StringToEnum("InversionCostFunctionsCoefficients")[0]
+ def InversionCostFunctionsEnum(): return StringToEnum("InversionCostFunctions")[0]
+-def InversionGradientOnlyEnum(): return StringToEnum("InversionGradientOnly")[0]
+ def InversionGradientScalingEnum(): return StringToEnum("InversionGradientScaling")[0]
+ def InversionIscontrolEnum(): return StringToEnum("InversionIscontrol")[0]
+ def InversionTaoEnum(): return StringToEnum("InversionTao")[0]
+Index: ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m	(revision 16249)
+@@ -0,0 +1,11 @@
++function macro=ThermalIsdynamicbasalspcEnum()
++%THERMALISDYNAMICBASALSPCENUM - Enum of ThermalIsdynamicbasalspc
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ThermalIsdynamicbasalspcEnum()
++
++macro=StringToEnum('ThermalIsdynamicbasalspc');
Index: issm/oecreview/Archive/16133-16554/ISSM-16249-16250.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16249-16250.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16249-16250.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/contrib/gslib/pkriging.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 16249)
++++ ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 16250)
+@@ -16,8 +16,8 @@
+ 	error(['marshall error message: could not open ' name '.bin file for binary writing']);
+ end
+ 
+-%First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
+-WriteData(fid,'enum',MaximumNumberOfEnums(),'data',true,'format','Boolean');
++%First, write MaximumNumberOfDefinitionsEnum to make sure that the Enums are synchronized
++WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',true,'format','Boolean');
+ 
+ %Write all data
+ WriteData(fid,'enum',0,'data',x,'format','DoubleMat');
Index: issm/oecreview/Archive/16133-16554/ISSM-16250-16251.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16250-16251.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16250-16251.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16250)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16251)
+@@ -247,6 +247,7 @@
+ 		#ifdef _HAVE_ADOLC_
+ 		/*Start trace*/
+ 		this->FetchData(&keep,AutodiffKeepEnum);
++		setStoreManagerControl(2.0,2000000);
+ 		if(keep)trace_on(my_rank,1);
+ 		else    trace_on(my_rank);
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16251-16252.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16251-16252.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16251-16252.diff	(revision 16556)
@@ -0,0 +1,276 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16251)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16252)
+@@ -32,6 +32,8 @@
+ 	AutodiffLbufsizeEnum,
+ 	AutodiffCbufsizeEnum,
+ 	AutodiffTbufsizeEnum,
++	AutodiffGcTriggerRatioEnum,
++	AutodiffGcTriggerMaxSizeEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16251)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16252)
+@@ -40,6 +40,8 @@
+ 		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
+ 		case AutodiffCbufsizeEnum : return "AutodiffCbufsize";
+ 		case AutodiffTbufsizeEnum : return "AutodiffTbufsize";
++		case AutodiffGcTriggerRatioEnum : return "AutodiffGcTriggerRatio";
++		case AutodiffGcTriggerMaxSizeEnum : return "AutodiffGcTriggerMaxSize";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16251)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16252)
+@@ -40,6 +40,8 @@
+ 	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffCbufsize")==0) return AutodiffCbufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffTbufsize")==0) return AutodiffTbufsizeEnum;
++	      else if (strcmp(name,"AutodiffGcTriggerRatio")==0) return AutodiffGcTriggerRatioEnum;
++	      else if (strcmp(name,"AutodiffGcTriggerMaxSize")==0) return AutodiffGcTriggerMaxSizeEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -134,12 +136,12 @@
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+-	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+-	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
++	      if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
++	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
++	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+ 	      else if (strcmp(name,"InversionMaxiterPerStep")==0) return InversionMaxiterPerStepEnum;
+@@ -257,12 +259,12 @@
+ 	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+-	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+-	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
++	      if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
++	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+ 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+-	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Node")==0) return NodeEnum;
++	      if (strcmp(name,"Matice")==0) return MaticeEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+ 	      else if (strcmp(name,"Param")==0) return ParamEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+-	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"P0")==0) return P0Enum;
++	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
++	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+ 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16251)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16252)
+@@ -43,6 +43,8 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffCbufsizeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffLbufsizeEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffTbufsizeEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerRatioEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerMaxSizeEnum));
+ 		/*}}}*/
+ 		/*retrieve driver: {{{*/
+ 		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16251)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16252)
+@@ -22,6 +22,8 @@
+ 		self.lbufsize     = float('NaN')
+ 		self.cbufsize     = float('NaN')
+ 		self.tbufsize     = float('NaN')
++		self.gcTriggerMaxSize     = float('NaN')
++		self.gcTriggerRatio     = float('NaN')
+ 		if not len(args):
+ 			self.setdefaultparameters()
+ 		else:
+@@ -38,6 +40,9 @@
+ 		s+="%s\n" % fielddisplay(self,'lbufsize',"Number of locations per buffer (==LBUFSIZE in usrparms.h)")
+ 		s+="%s\n" % fielddisplay(self,'cbufsize',"Number of values per buffer (==CBUFSIZE in usrparms.h)")
+ 		s+="%s\n" % fielddisplay(self,'tbufsize',"Number of taylors per buffer (<=TBUFSIZE in usrparms.h)")
++		s+="%s\n" % fielddisplay(self,'gcTriggerRatio',"free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio")
++		s+="%s\n" % fielddisplay(self,'gcTriggerMaxSize',"free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize)")
++
+ 		return s
+ 	# }}}
+ 	def setdefaultparameters(self):    # {{{
+@@ -45,6 +50,8 @@
+ 		self.lbufsize     = 524288
+ 		self.cbufsize     = 524288
+ 		self.tbufsize     = 524288
++		gcTriggerRatio=2.0
++		gcTriggerMaxSize=2000000
+ 		return self
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -57,6 +64,8 @@
+ 		md = checkfield(md,'autodiff.lbufsize','>=',524288)
+ 		md = checkfield(md,'autodiff.cbufsize','>=',524288)
+ 		md = checkfield(md,'autodiff.tbufsize','>=',524288)
++		md = checkfield(md,'autodiff.gcTriggerRatio','>=',2.0)
++		md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',2000000)
+ 
+ 		#Driver value:
+ 		md = checkfield(md,'autodiff.driver','values',['fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'])
+@@ -80,10 +89,12 @@
+ 			return
+ 			
+ 		#buffer sizes {{{
+-		WriteData(fid,'data',self,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
+-		WriteData(fid,'data',self,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
+-		WriteData(fid,'data',self,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
+-		WriteData(fid,'data',self,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
++		WriteData(fid,'object',self,'fieldname','obufsize','format','Double');
++		WriteData(fid,'object',self,'fieldname','lbufsize','format','Double');
++		WriteData(fid,'object',self,'fieldname','cbufsize','format','Double');
++		WriteData(fid,'object',self,'fieldname','tbufsize','format','Double');
++		WriteData(fid,'object',self,'fieldname','gcTriggerRatio','format','Double');
++		WriteData(fid,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
+ 		#}}}
+ 		#process dependent variables {{{
+ 		num_dependent_objects=len(self.dependents)
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16251)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16252)
+@@ -14,6 +14,8 @@
+ 		lbufsize     = NaN;
+ 		cbufsize     = NaN;
+ 		tbufsize     = NaN;
++		gcTriggerRatio = NaN;
++		gcTriggerMaxSize = NaN;
+ 		end
+ 		%}}}
+ 	methods
+@@ -30,6 +32,8 @@
+ 		lbufsize     = 524288;
+ 		cbufsize     = 524288;
+ 		tbufsize     = 524288;
++		gcTriggerRatio=2.0;
++		gcTriggerMaxSize=2000000;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -44,6 +48,8 @@
+ 			md = checkfield(md,'autodiff.lbufsize','>=',524288);
+ 			md = checkfield(md,'autodiff.cbufsize','>=',524288);
+ 			md = checkfield(md,'autodiff.tbufsize','>=',524288);
++			md = checkfield(md,'autodiff.gcTriggerRatio','>=',2);
++			md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',2000000);
+ 
+ 			%go through our dependents and independents and check consistency: 
+ 			for i=1:numel(obj.dependents),
+@@ -66,6 +72,8 @@
+ 			fielddisplay(obj,'lbufsize','Number of locations per buffer (==LBUFSIZE in usrparms.h)');
+ 			fielddisplay(obj,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)');
+ 			fielddisplay(obj,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)');
++			fielddisplay(obj,'gcTriggerRatio','free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio');
++			fielddisplay(obj,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 
+@@ -80,10 +88,12 @@
+ 			end
+ 
+ 			%buffer sizes {{{
+-			WriteData(fid,'data',obj,'fieldname','obufsize','enum',AutodiffObufsizeEnum(),'format','Double');
+-			WriteData(fid,'data',obj,'fieldname','lbufsize','enum',AutodiffLbufsizeEnum(),'format','Double');
+-			WriteData(fid,'data',obj,'fieldname','cbufsize','enum',AutodiffCbufsizeEnum(),'format','Double');
+-			WriteData(fid,'data',obj,'fieldname','tbufsize','enum',AutodiffTbufsizeEnum(),'format','Double');
++			WriteData(fid,'object',obj,'fieldname','obufsize','format','Double');
++			WriteData(fid,'object',obj,'fieldname','lbufsize','format','Double');
++			WriteData(fid,'object',obj,'fieldname','cbufsize','format','Double');
++			WriteData(fid,'object',obj,'fieldname','tbufsize','format','Double');
++			WriteData(fid,'object',obj,'fieldname','gcTriggerRatio','format','Double');
++			WriteData(fid,'object',obj,'fieldname','gcTriggerMaxSize','format','Double');
+ 			%}}}
+ 			%process dependent variables {{{
+ 			num_dependent_objects=numel(obj.dependents);
+Index: ../trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m	(revision 16252)
+@@ -0,0 +1,11 @@
++function macro=AutodiffGcTriggerRatioEnum()
++%AUTODIFFGCTRIGGERRATIOENUM - Enum of AutodiffGcTriggerRatio
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffGcTriggerRatioEnum()
++
++macro=StringToEnum('AutodiffGcTriggerRatio');
+Index: ../trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m	(revision 16252)
+@@ -0,0 +1,11 @@
++function macro=AutodiffGcTriggerMaxSizeEnum()
++%AUTODIFFGCTRIGGERMAXSIZEENUM - Enum of AutodiffGcTriggerMaxSize
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffGcTriggerMaxSizeEnum()
++
++macro=StringToEnum('AutodiffGcTriggerMaxSize');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16251)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16252)
+@@ -32,6 +32,8 @@
+ def AutodiffLbufsizeEnum(): return StringToEnum("AutodiffLbufsize")[0]
+ def AutodiffCbufsizeEnum(): return StringToEnum("AutodiffCbufsize")[0]
+ def AutodiffTbufsizeEnum(): return StringToEnum("AutodiffTbufsize")[0]
++def AutodiffGcTriggerRatioEnum(): return StringToEnum("AutodiffGcTriggerRatio")[0]
++def AutodiffGcTriggerMaxSizeEnum(): return StringToEnum("AutodiffGcTriggerMaxSize")[0]
+ def BalancethicknessSpcthicknessEnum(): return StringToEnum("BalancethicknessSpcthickness")[0]
+ def BalancethicknessStabilizationEnum(): return StringToEnum("BalancethicknessStabilization")[0]
+ def BalancethicknessThickeningRateEnum(): return StringToEnum("BalancethicknessThickeningRate")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16252-16253.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16252-16253.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16252-16253.diff	(revision 16556)
@@ -0,0 +1,119 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16252)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16253)
+@@ -82,6 +82,7 @@
+ 		void        LastIndex(int *pindex);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+ 		void        DeclareIndependents(void);
++		void        StartTrace(void);
+ 		void        FetchIndependent(int dependent_enum);
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16252)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16253)
+@@ -62,6 +62,7 @@
+ 	/*If we are running in AD mode, we need to start the trace and declare our independent variables now, 
+ 	 *and prevent them from being erased during successive calls to iomodel->FetchConstants, iomodel->FetchData and 
+ 	 iomodel->DeleteData:*/
++	this->StartTrace();
+ 	this->DeclareIndependents();
+ 
+ 	/*Initialize and read constants:*/
+@@ -222,6 +223,47 @@
+ 	return this->data[data_enum];
+ }
+ /*}}}*/
++/*FUNCTION IoModel::StartTrace{{{*/
++void IoModel::StartTrace(void){
++
++	int  i;
++	bool autodiff = false;
++	bool keep=false;
++	IssmDouble gcTriggerRatio;
++	IssmDouble gcTriggerMaxSize;
++	IssmDouble obufsize;
++	IssmDouble lbufsize;
++	IssmDouble cbufsize;
++	IssmDouble tbufsize;
++
++	int my_rank=IssmComm::GetRank();
++
++	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
++	if(autodiff){
++
++		#ifdef _HAVE_ADOLC_
++		/*Retrieve parameters: */
++		this->FetchData(&keep,AutodiffKeepEnum);
++		this->FetchData(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
++		this->FetchData(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
++		this->FetchData(&obufsize,AutodiffObufsizeEnum);
++		this->FetchData(&lbufsize,AutodiffLbufsizeEnum);
++		this->FetchData(&cbufsize,AutodiffCbufsizeEnum);
++		this->FetchData(&tbufsize,AutodiffTbufsizeEnum);
++
++		/*Set garbage collection parameters: */
++		setStoreManagerControl(reCast<size_t>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
++
++		/*Set buffer sizes: */
++
++		/*Start trace: */
++		if(keep)trace_on(my_rank,1);
++		else    trace_on(my_rank);
++		#endif
++	}
++
++}
++/*}}}*/
+ /*FUNCTION IoModel::DeclareIndependents{{{*/
+ void IoModel::DeclareIndependents(void){
+ 
+@@ -233,10 +275,7 @@
+ 	int *types = NULL;
+ 
+ 	int  dummy;
+-	bool keep=false;
+ 
+-	int my_rank=IssmComm::GetRank();
+-
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+ 	this->independents=xNew<bool>(MaximumNumberOfDefinitionsEnum);
+ 	for(i=0;i<MaximumNumberOfDefinitionsEnum;i++) this->independents[i]=false;
+@@ -245,12 +284,6 @@
+ 	if(autodiff){
+ 
+ 		#ifdef _HAVE_ADOLC_
+-		/*Start trace*/
+-		this->FetchData(&keep,AutodiffKeepEnum);
+-		setStoreManagerControl(2.0,2000000);
+-		if(keep)trace_on(my_rank,1);
+-		else    trace_on(my_rank);
+-
+ 		/*build dataset made of independent objects:*/
+ 		this->independent_objects=new DataSet();
+ 		this->FetchData(&num_independent_objects,AutodiffNumIndependentObjectsEnum);
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16252)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16253)
+@@ -28,12 +28,12 @@
+ 			end
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-		obufsize     = 524288;
+-		lbufsize     = 524288;
+-		cbufsize     = 524288;
+-		tbufsize     = 524288;
+-		gcTriggerRatio=2.0;
+-		gcTriggerMaxSize=2000000;
++		obj.obufsize     = 524288;
++		obj.lbufsize     = 524288;
++		obj.cbufsize     = 524288;
++		obj.tbufsize     = 524288;
++		obj.gcTriggerRatio=2.0;
++		obj.gcTriggerMaxSize=2000000;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16253-16254.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16253-16254.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16253-16254.diff	(revision 16556)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16253)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16254)
+@@ -44,16 +44,19 @@
+ 
+ 			/*First, stop tracing: */
+ 			trace_off();
++		
++			/*retrieve parameters: */
++			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++	
++			/*if no dependents, no point in running a driver: */
++			if(!(num_dependents*num_independents)) return;
+ 
+-			/*retrieve num_dependents and num_independents only on rank 0: */
+-			if (my_rank==0) {
+-				femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-				femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++			/*for adolc to run in parallel, we 0 out on rank~=0:*/
++			if (my_rank!=0){
++				num_dependents=0; num_independents=0;
+ 			}
+-				
+-			/*if we don't have dependents or independents, no point in running ad_core: */
+-			if(!(num_dependents*num_independents)) return;
+-
++			
+ 			/*Print tape statistics so that user can kill this run if something is off already:*/
+ 			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
Index: issm/oecreview/Archive/16133-16554/ISSM-16254-16255.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16254-16255.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16254-16255.diff	(revision 16556)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16254)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16255)
+@@ -307,8 +307,6 @@
+ 					./modules/SpcNodesx/SpcNodesx.cpp\
+ 					./modules/PositiveDegreeDayx/PositiveDegreeDayx.h\
+ 					./modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp\
+-					./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
+-					./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+ 					./modules/Delta18oParameterizationx/Delta18oParameterizationx.h\
+ 					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
+ 					./modules/SmbGradientsx/SmbGradientsx.h\
+@@ -405,6 +403,8 @@
+ 					   ./modules/ModelProcessorx/Melting/CreateNodesMelting.cpp\
+ 					   ./modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp\
+ 					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
++					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
++					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+ 					   ./analyses/thermal_core.cpp\
+ 					   ./analyses/enthalpy_core.cpp\
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16254)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16255)
+@@ -251,7 +251,7 @@
+ 		#ifdef _HAVE_THERMAL_
+ 		void UpdateThermalBasalConstraints(void){_error_("not implemented yet");};
+ 		void ComputeBasalMeltingrate(void){_error_("not implemented yet");};
+-	        void DrainWaterfraction(void){_error_("not implemented yet");};
++		void DrainWaterfraction(void){_error_("not implemented yet");};
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
Index: issm/oecreview/Archive/16133-16554/ISSM-16255-16256.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16255-16256.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16255-16256.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16255)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16256)
+@@ -232,9 +232,11 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreateMassMatrix();
+ 			break;
++		#ifdef _HAVE_MASSTRANSPORT_
+ 		case MasstransportAnalysisEnum:
+ 			return CreateKMatrixMasstransport();
+ 			break;
++		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+ 			return CreateKMatrixHydrologyShreve();
+@@ -384,9 +386,11 @@
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+ 			return CreatePVectorSlope();
+ 			break;
++	 	#ifdef _HAVE_MASSTRANSPORT_
+ 		case MasstransportAnalysisEnum:
+ 			return CreatePVectorMasstransport();
+ 			break;
++		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+ 			return CreatePVectorHydrologyShreve();
Index: issm/oecreview/Archive/16133-16554/ISSM-16256-16257.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16256-16257.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16256-16257.diff	(revision 16556)
@@ -0,0 +1,184 @@
+Index: ../trunk-jpl/src/m/shp/shpread.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpread.m	(revision 0)
++++ ../trunk-jpl/src/m/shp/shpread.m	(revision 16257)
+@@ -0,0 +1,46 @@
++function Struct=shpread(filename)
++%SHPREAD - read a shape file and build a Structure
++%
++%   This routine reads a shape file .shp and builds a Structure containing the 
++%   fields x and y corresponding to the coordinates, one for the filename of
++%   the shp file, for the density, for the nodes, and a field closed to 
++%   indicate if the domain is closed. 
++%   The first argument is the .shp file to be read and the second one (optional) 
++%   indicates if the last point shall be read (1 to read it, 0 not to).
++%
++%   Usage:
++%      Struct=shpread(filename)
++%
++%   Example:
++%      Struct=shpread('domainoutline.shp')
++%
++%   See also EXPDOC, EXPWRITEASVERTICES
++
++%some checks
++if ~exist(filename),
++	error(['shpread error message: file ' filename ' not found!']);
++end
++
++%initialize number of profile
++count=0;
++
++%read shapefile
++shp=shaperead(filename);
++
++Struct=struct([]);
++for i=1:length(shp),
++	if strcmpi(shp(i).Geometry,'Polygon'),
++		x=shp(i).X; y=shp(i).Y;
++		ids=find(isnan(x));
++		x(ids)=[]; y(ids)=[];
++
++		Struct(end+1).x=x;
++		Struct(end).y=y;
++		Struct(end).nods=length(x);
++		Struct(end).density=1;
++		Struct(end).closed=1;
++		Struct(end).name=num2str(shp(i).id);
++	end
++end
++
++end
+Index: ../trunk-jpl/src/m/shp/Shp2Exp.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/Shp2Exp.m	(revision 0)
++++ ../trunk-jpl/src/m/shp/Shp2Exp.m	(revision 16257)
+@@ -0,0 +1,33 @@
++function Shp2Exp(expfilename,shapefilename)
++%SHP2EXP- transform shape file to Argus .exp file
++%
++%   Usage:
++%      Shp2Exp(expfilename,shapefilename);
++%
++%   Example:
++%      Shp2Exp('Domain.exp','Domain.shp');
++%
++%   See also EXPMASTER, EXPDOC
++
++	if ~exist(shapefilename,'file'),
++		error(['Shapefile ' shapefilename ' does not exist']);
++	end
++	shp=shaperead(shapefilename);
++
++	exp=struct([]);
++	for i=1:length(shp),
++		if strcmpi(shp(i).Geometry,'Polygon'),
++			x=shp(i).X; y=shp(i).Y;
++			ids=find(isnan(x));
++			x(ids)=[]; y(ids)=[];
++
++			exp(end+1).x=x;
++			exp(end).y=y;
++			exp(end).nods=length(x);
++			exp(end).density=1;
++			exp(end).closed=1;
++			exp(end).name=num2str(shp(i).id);
++		end
++	end
++
++	expwrite(exp,expfilename);
+Index: ../trunk-jpl/src/m/shp/shpdisp.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpdisp.m	(revision 0)
++++ ../trunk-jpl/src/m/shp/shpdisp.m	(revision 16257)
+@@ -0,0 +1,52 @@
++function shpdisp(domainoutline,varargin)
++%SHPDISP - plot the contours of a domain outline file
++%
++%   This routine reads in a domain outline file (Shape format) and plots all the contours 
++%
++%   Usage:
++%      shpdisp(domainoutline,varargin)
++%      shpdisp(domainoutline,figurenumber,linestyle,linewidth,unitmultiplier)
++%
++%   Example:
++%      shpdisp('Domain.shp',1,'--r',2,10^3);
++%
++%   See also SHPREAD, SHPDOC
++
++%check nargin
++if ~nargin | nargin>5
++	help shpdisp
++	error('shpdisp error message: bad usage');
++end
++
++%parse input
++if nargin<=1,
++	figurenumber=1;
++else
++	figurenumber=varargin{1};
++end
++if nargin<=2
++	linestyle='r-';
++else
++	linestyle=varargin{2};
++end
++if nargin<=3
++	linewidth=1;
++else
++	linewidth=varargin{3};
++end
++if nargin<=4
++	unitmultiplier=1;
++else
++	unitmultiplier=varargin{4}; if isnan(unitmultiplier), unitmultiplier=1; end
++end
++
++domain=shpread(domainoutline);
++
++figure(figurenumber),hold on
++for i=1:length(domain),
++	if (isnumeric(linestyle))
++		plot(domain(i).x*unitmultiplier,domain(i).y*unitmultiplier,'Color',linestyle,'linewidth',linewidth);
++	else
++		plot(domain(i).x*unitmultiplier,domain(i).y*unitmultiplier,linestyle,'linewidth',linewidth);
++	end
++end
+Index: ../trunk-jpl/src/m/exp/Shp2Exp.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 16256)
++++ ../trunk-jpl/src/m/exp/Shp2Exp.m	(revision 16257)
+@@ -1,33 +0,0 @@
+-function Shp2Exp(expfilename,shapefilename)
+-%SHP2EXP- transform shape file to Argus .exp file
+-%
+-%   Usage:
+-%      Shp2Exp(expfilename,shapefilename);
+-%
+-%   Example:
+-%      Shp2Exp('Domain.exp','Domain.shp');
+-%
+-%   See also EXPMASTER, EXPDOC
+-
+-	if ~exist(shapefilename,'file'),
+-		error(['Shapefile ' shapefilename ' does not exist']);
+-	end
+-	shp=shaperead(shapefilename);
+-
+-	exp=struct([]);
+-	for i=1:length(shp),
+-		if strcmpi(shp(i).Geometry,'Polygon'),
+-			x=shp(i).X; y=shp(i).Y;
+-			ids=find(isnan(x));
+-			x(ids)=[]; y(ids)=[];
+-
+-			exp(end+1).x=x;
+-			exp(end).y=y;
+-			exp(end).nods=length(x);
+-			exp(end).density=1;
+-			exp(end).closed=1;
+-			exp(end).name=num2str(shp(i).id);
+-		end
+-	end
+-
+-	expwrite(exp,expfilename);
Index: issm/oecreview/Archive/16133-16554/ISSM-16257-16258.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16257-16258.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16257-16258.diff	(revision 16556)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/m/shp/shpread.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpread.m	(revision 16257)
++++ ../trunk-jpl/src/m/shp/shpread.m	(revision 16258)
+@@ -30,7 +30,7 @@
+ Struct=struct([]);
+ for i=1:length(shp),
+ 	if strcmpi(shp(i).Geometry,'Polygon'),
+-		x=shp(i).X; y=shp(i).Y;
++		x=shp(i).X'; y=shp(i).Y';
+ 		ids=find(isnan(x));
+ 		x(ids)=[]; y(ids)=[];
+ 
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16257)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16258)
+@@ -63,7 +63,16 @@
+ 	%Check that file exists
+ 	domainfile=getfieldvalue(options,'domain');
+ 	if ~exist(domainfile,'file') error(['bamg error message: file ' domainfile ' not found']); end
+-	domain=expread(domainfile);
++	
++	%read domain according to its extension: 
++	[path,name,ext]=fileparts(domainfile);
++	if strcmp(ext,'.exp'),
++		domain=expread(domainfile);
++	elseif strcmp(ext,'.shp'),
++		domain=shpread(domainfile);
++	else
++		error(['bamg error message: file ' domainfile ' format not supported (.shp or .exp)']);
++	end
+ 
+ 	%Build geometry 
+ 	count=0;
Index: issm/oecreview/Archive/16133-16554/ISSM-16258-16259.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16258-16259.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16258-16259.diff	(revision 16556)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16258)
++++ ../trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp	(revision 16259)
+@@ -33,9 +33,10 @@
+ // must be preceded by a call to MumpsInit
+ void MumpsSettings(DMUMPS_STRUC_C &theMumpsStruc) { 
+ 	/*Control statements:{{{ */
+-	theMumpsStruc.icntl[1-1] = 6; //error verbose
+-	theMumpsStruc.icntl[2-1] = 1; //std verbose
+-	theMumpsStruc.icntl[4-1] = 4; //verbose everything
++	theMumpsStruc.icntl[1-1] = 6; //error verbose: default 6, 0 or negative -> suppressed
++	theMumpsStruc.icntl[2-1] = 0; //std verbose: default 1, 0 or negative -> suppressed
++	theMumpsStruc.icntl[3-1] = 0; //global information verbose: default 6, 0 or negative -> suppressed
++	theMumpsStruc.icntl[4-1] = 0; //verbose everything: default is 4
+ 	theMumpsStruc.icntl[5-1] = 0;
+ 	theMumpsStruc.icntl[18-1] = 3;
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16259-16260.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16259-16260.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16259-16260.diff	(revision 16556)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16259)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16260)
+@@ -61,22 +61,25 @@
+ 			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+ 				_printf0_("   ADOLC statistics: \n");
+-				_printf0_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Maximum number of live active variables: " <<tape_stats[2] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Number of values in the taylor (value) stack: " <<tape_stats[3] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" Number of operations per buffer == OBUFSIZE (usrparms.h) " <<tape_stats[4] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" overall number of operations " <<tape_stats[5] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" operations file written or not " <<tape_stats[6] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" overall number of locations " <<tape_stats[7] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" locations file written or not " <<tape_stats[8] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" overall number of values " <<tape_stats[9] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" values file written or not " <<tape_stats[10] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" Number of locations per buffer == LBUFSIZE (usrparms.h) " <<tape_stats[11] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" Number of values per buffer == CBUFSIZE (usrparms.h) " <<tape_stats[12] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" Number of taylors per buffer <= TBUFSIZE (usrparms.h) " <<tape_stats[13] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" Number of eq_*_prod for sparsity pattern " <<tape_stats[14] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<" represents the size of the stats vector " <<tape_stats[15] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"operations: \n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffObufsizeEnum)" <<tape_stats[OP_BUFFER_SIZE] << "(entry size " << sizeof(unsigned char) << "B)\n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("   "<<setw(45)<<left<<"locations: \n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffLbufsizeEnum)" <<tape_stats[LOC_BUFFER_SIZE] << "(entry size " << sizeof(locint) << "B)\n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("   "<<setw(45)<<left<<"constant values: \n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffCbufsizeEnum)" <<tape_stats[VAL_BUFFER_SIZE] << "(entry size " << sizeof(double) << "B)\n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("   "<<setw(45)<<left<<"Taylor stack: \n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffTbufsizeEnum)" <<tape_stats[TAY_BUFFER_SIZE] << "(entry size " << sizeof(revreal) << "B)\n");
++				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
++				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
+ 			}
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16260-16261.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16260-16261.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16260-16261.diff	(revision 16556)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16260)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16261)
+@@ -61,25 +61,29 @@
+ 			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+ 				_printf0_("   ADOLC statistics: \n");
+-				_printf0_("   "<<setw(45)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"operations: \n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffObufsizeEnum)" <<tape_stats[OP_BUFFER_SIZE] << "(entry size " << sizeof(unsigned char) << "B)\n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"locations: \n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffLbufsizeEnum)" <<tape_stats[LOC_BUFFER_SIZE] << "(entry size " << sizeof(locint) << "B)\n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"constant values: \n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffCbufsizeEnum)" <<tape_stats[VAL_BUFFER_SIZE] << "(entry size " << sizeof(double) << "B)\n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"Taylor stack: \n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffTbufsizeEnum)" <<tape_stats[TAY_BUFFER_SIZE] << "(entry size " << sizeof(revreal) << "B)\n");
+-				_printf0_("   "<<setw(45)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
+-				_printf0_("   "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
++				_printf0_("     "<<setw(45)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"operations: \n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     "<<setw(45)<<left<<"locations: \n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(locint) << "B\n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     "<<setw(45)<<left<<"constant values: \n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(double) << "B\n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     "<<setw(45)<<left<<"Taylor stack: \n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(revreal) << "B\n");
++				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
++				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
+ 			}
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16261-16262.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16261-16262.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16261-16262.diff	(revision 16556)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16261)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16262)
+@@ -60,30 +60,31 @@
+ 			/*Print tape statistics so that user can kill this run if something is off already:*/
+ 			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
++				int offset=50;
+ 				_printf0_("   ADOLC statistics: \n");
+-				_printf0_("     "<<setw(45)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"operations: \n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"locations: \n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(locint) << "B\n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"constant values: \n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(double) << "B\n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"Taylor stack: \n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries in buffer (set via AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  entry size " << sizeof(revreal) << "B\n");
+-				_printf0_("     "<<setw(45)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
+-				_printf0_("     "<<setw(45)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
++				_printf0_("     operations: \n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     locations: \n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     constant values: \n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
++				_printf0_("     Taylor stack: \n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
++				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
++				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
+ 			}
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16262-16263.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16262-16263.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16262-16263.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16262)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16263)
+@@ -244,6 +244,7 @@
+ 		#ifdef _HAVE_ADOLC_
+ 		/*Retrieve parameters: */
+ 		this->FetchData(&keep,AutodiffKeepEnum);
++		int keepTaylors=keep?1:0;
+ 		this->FetchData(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
+ 		this->FetchData(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
+ 		this->FetchData(&obufsize,AutodiffObufsizeEnum);
+@@ -252,13 +253,10 @@
+ 		this->FetchData(&tbufsize,AutodiffTbufsizeEnum);
+ 
+ 		/*Set garbage collection parameters: */
+-		setStoreManagerControl(reCast<size_t>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
++		setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
+ 
+-		/*Set buffer sizes: */
+-
+ 		/*Start trace: */
+-		if(keep)trace_on(my_rank,1);
+-		else    trace_on(my_rank);
++		trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize));
+ 		#endif
+ 	}
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16263-16264.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16263-16264.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16263-16264.diff	(revision 16556)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16263)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16264)
+@@ -33,7 +33,7 @@
+ 		obj.cbufsize     = 524288;
+ 		obj.tbufsize     = 524288;
+ 		obj.gcTriggerRatio=2.0;
+-		obj.gcTriggerMaxSize=2000000;
++		obj.gcTriggerMaxSize=65536;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -44,12 +44,12 @@
+ 			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'});
+ 			
+ 			%buffer values: 
+-			md = checkfield(md,'autodiff.obufsize','>=',524288);
+-			md = checkfield(md,'autodiff.lbufsize','>=',524288);
+-			md = checkfield(md,'autodiff.cbufsize','>=',524288);
+-			md = checkfield(md,'autodiff.tbufsize','>=',524288);
+-			md = checkfield(md,'autodiff.gcTriggerRatio','>=',2);
+-			md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',2000000);
++			md = checkfield(md,'autodiff.obufsize','>=',16);
++			md = checkfield(md,'autodiff.lbufsize','>=',16);
++			md = checkfield(md,'autodiff.cbufsize','>=',16);
++			md = checkfield(md,'autodiff.tbufsize','>=',16);
++			md = checkfield(md,'autodiff.gcTriggerRatio','>=',0);
++			md = checkfield(md,'autodiff.gcTriggerMaxSize','>=',65536);
+ 
+ 			%go through our dependents and independents and check consistency: 
+ 			for i=1:numel(obj.dependents),
Index: issm/oecreview/Archive/16133-16554/ISSM-16264-16265.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16264-16265.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16264-16265.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16264)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16265)
+@@ -256,7 +256,8 @@
+ 		setStoreManagerControl(reCast<IssmPDouble>(gcTriggerRatio),reCast<size_t>(gcTriggerMaxSize));
+ 
+ 		/*Start trace: */
+-		trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize));
++		int skipFileDeletion=1;
++		trace_on(my_rank,keepTaylors,reCast<size_t>(obufsize),reCast<size_t>(lbufsize),reCast<size_t>(cbufsize),reCast<size_t>(tbufsize),skipFileDeletion);
+ 		#endif
+ 	}
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16265-16266.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16265-16266.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16265-16266.diff	(revision 16556)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16265)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16266)
+@@ -60,34 +60,50 @@
+ 			/*Print tape statistics so that user can kill this run if something is off already:*/
+ 			tapestats(my_rank,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+-				int offset=50;
+-				_printf0_("   ADOLC statistics: \n");
+-				_printf0_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
+-				_printf0_("     operations: \n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_OPERATIONS] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[OP_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     locations: \n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_LOCATIONS] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[LOC_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     constant values: \n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[NUM_VALUES] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[VAL_FILE_ACCESS]?"y":"n") << "\n");
+-				_printf0_("     Taylor stack: \n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  #entries total" <<tape_stats[TAY_STACK_SIZE] << "\n");
+-				_printf0_("     "<<setw(offset)<<left<<"  buffer written to file: " << (tape_stats[TAY_STACK_SIZE]>tape_stats[TAY_BUFFER_SIZE]?"y":"n") << "\n");
++				int commSize=IssmComm::GetSize();
++				int *sstats=new int[7];
++				sstats[0]=tape_stats[NUM_OPERATIONS];
++				sstats[1]=tape_stats[OP_FILE_ACCESS];
++				sstats[2]=tape_stats[NUM_LOCATIONS];
++				sstats[3]=tape_stats[LOC_FILE_ACCESS];
++				sstats[4]=tape_stats[NUM_VALUES];
++				sstats[5]=tape_stats[VAL_FILE_ACCESS];
++				sstats[6]=tape_stats[TAY_STACK_SIZE];
++				int *rstats=NULL;
++				if (my_rank==0) rstats=new int[commSize*7];
++				ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
++				if (my_rank==0) {
++					int offset=50;
++					int rOffset=(commSize/10)+1;
++					_printf_("   ADOLC statistics: \n");
++					_printf_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
++					_printf_("     operations: \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++					_printf_("     locations: \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++					_printf_("     constant values: \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?"->file":"") << "\n");
++					_printf_("     Taylor stack: \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?"->file":"") << "\n");
++					delete []rstats;
++				}
++				delete [] sstats;
+ 			}
+ 
+-
+ 			/*retrieve state variable: */
+ 			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16266-16267.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16266-16267.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16266-16267.diff	(revision 16556)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16266)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16267)
+@@ -76,29 +76,25 @@
+ 					int offset=50;
+ 					int rOffset=(commSize/10)+1;
+ 					_printf_("   ADOLC statistics: \n");
+-					_printf_("     "<<setw(offset)<<left<<"#independents: " <<tape_stats[NUM_INDEPENDENTS] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<tape_stats[NUM_DEPENDENTS] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<tape_stats[NUM_MAX_LIVES] << "\n");
+-					_printf_("     operations: \n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<tape_stats[OP_BUFFER_SIZE] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(unsigned char) << "B\n");
++					_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
++					_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
+ 					for (int r=0;r<commSize;++r)
+-					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
+-					_printf_("     locations: \n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(locint) << "B\n");
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++					_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
+ 					for (int r=0;r<commSize;++r)
+-					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
+-					_printf_("     constant values: \n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(double) << "B\n");
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++					_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
+ 					for (int r=0;r<commSize;++r)
+-					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?"->file":"") << "\n");
+-					_printf_("     Taylor stack: \n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"  entry size " << sizeof(revreal) << "B\n");
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
++					_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
+ 					for (int r=0;r<commSize;++r)
+-					_printf_("     ["<<setw(rOffset)<<right<<r<<setw(offset-rOffset-1)<<"] #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?"->file":"") << "\n");
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
+ 					delete []rstats;
+ 				}
+ 				delete [] sstats;
+@@ -261,7 +257,7 @@
+ 
+ 				/*call driver: */
+ 				fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+-				if(VerboseAutodiff())_printf_("   done with fos_reverse\n");
++				if(VerboseAutodiff())_printf0_("   done with fos_reverse\n");
+ 
+ 				/*add to results*/
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
Index: issm/oecreview/Archive/16133-16554/ISSM-16267-16268.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16267-16268.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16267-16268.diff	(revision 16556)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16267)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16268)
+@@ -46,12 +46,13 @@
+ 		return s
+ 	# }}}
+ 	def setdefaultparameters(self):    # {{{
++		
+ 		self.obufsize     = 524288
+ 		self.lbufsize     = 524288
+ 		self.cbufsize     = 524288
+ 		self.tbufsize     = 524288
+-		gcTriggerRatio=2.0
+-		gcTriggerMaxSize=2000000
++		self.gcTriggerRatio=2.0
++		self.gcTriggerMaxSize=65536
+ 		return self
+ 	# }}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
Index: issm/oecreview/Archive/16133-16554/ISSM-16268-16269.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16268-16269.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16268-16269.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16268)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16269)
+@@ -22,7 +22,13 @@
+ 	if ~exist(icefrontfile)
+ 		error(['SetMarineIceSheetBC error message: ice front file ' icefrontfile ' not found']);
+ 	end
+-	incontour=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2);
++	[path,name,ext]=fileparts(icefrontfile);
++	if strcmp(ext,'.shp'),
++		contours=shpread(icefrontfile);
++	elseif strcmp(ext,'.exp'),
++		contours=expread(icefrontfile);
++	end
++	incontour=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,contours,'node',2);
+ 	vertexonicefront=double(md.mesh.vertexonboundary & incontour);
+ else
+ 	%Guess where the ice front is
Index: issm/oecreview/Archive/16133-16554/ISSM-16269-16270.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16269-16270.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16269-16270.diff	(revision 16556)
@@ -0,0 +1,109 @@
+Index: ../trunk-jpl/externalpackages/adjoinablempi/install-pleaides.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adjoinablempi/install-pleaides.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adjoinablempi/install-pleaides.sh	(revision 16270)
+@@ -0,0 +1,27 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src  install
++
++#Mercurial cloning: 
++hg clone http://mercurial.mcs.anl.gov//ad/AdjoinableMPI src
++
++#Configure adjoinablempi
++cd src
++autoreconf -fi
++
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/adjoinablempi/install" \
++	--libdir="$ISSM_DIR/externalpackages/adjoinablempi/install/lib" \
++	--with-mpi-root="/nasa/sgi/mpt/2.06rp16/" \
++	--enable-requestOnTrace
++
++#Compile adjoinablempi 
++make clean
++if [ $# -eq 0 ]; then
++	make 
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adjoinablempi/install-pleaides.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades.sh	(revision 16270)
+@@ -0,0 +1,27 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git src
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++#Compile ADOL-C
++cd src
++autoreconf -f -i 
++
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
++	--with-mpi-root="/nasa/sgi/mpt/2.06rp16/" \
++	--enable-ampi \
++	--with-ampi=$ISSM_DIR/externalpackages/adjoinablempi/install \
++	--disable-tapedoc-values
++
++make clean
++if [ $# -eq 0 ]; then
++	make V=1
++else
++	make -j $1 V=1
++fi
++make V=1 install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh	(revision 16270)
+@@ -0,0 +1,19 @@
++#!/bin/csh
++./configure \
++	--prefix=$ISSM_DIR \
++	--without-kriging \
++	--with-wrappers=no \
++	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++	--with-mpi-include="/nasa/sgi/mpt/2.06rp16/include" \
++	--with-mpi-libflags="-L/nasa/sgi/mpt/2.06rp16/ -lmpi -lmpi++" \
++	--with-adolc-dir="$ISSM_DIR/externalpackages/adolc/install"\
++	--with-ampi-dir="$ISSM_DIR/externalpackages/adjoinablempi/install"\
++	--with-mkl-dir="/nasa/intel/Compiler/2013.1.117/composer_xe_2013.1.117/mkl/lib/intel64" \
++	--with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install" \
++	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-graphics-lib="/usr/lib64/libX11.so" \
++	--with-cxxoptflags="-O3" \
++	--with-vendor="intel-pleiades"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-ampi.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16270-16271.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16270-16271.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16270-16271.diff	(revision 16556)
@@ -0,0 +1,89 @@
+Index: ../trunk-jpl/src/m/materials/arrhenius.m
+===================================================================
+--- ../trunk-jpl/src/m/materials/arrhenius.m	(revision 0)
++++ ../trunk-jpl/src/m/materials/arrhenius.m	(revision 16271)
+@@ -0,0 +1,83 @@
++function rigidity=arrhenius(temperature, waterfraction, pressure)
++%ARRHENIUS - figure out the rigidity of ice for a given temperature and waterfraction
++%
++%   rigidity (in s^(1/3)Pa) is the flow law parameter in the flow law sigma=B*e(1/3) (Paterson, p97). 
++%   temperature is in Kelvin degrees
++%   
++%   Usage:
++%   rigidity=arrhenius(temperature, waterfraction, pressure)
++
++%variables
++T0=273.15;
++n=3.;
++beta=7.9e-8; % K Pa^-1
++R=8.314; % J mol^-1 K^-1  
++T_switch=T0-10.;
++
++if(temperature<0)
++    error('input temperature should be in Kelvin (positive)');
++end
++
++if(temperature>TMeltingPoint(pressure))
++    error('input temperature is above pressure melting point.');
++end
++
++if(isnan(waterfraction))
++    waterfraction=zeros(size(temperature));
++end
++
++if(waterfraction<0)
++    error('waterfraction is negative');
++end
++
++wf_max=.1;
++if(waterfraction>wf_max)
++    error(['waterfraction exceeds permitted maximum of ' num2str(wf_max) '.']);
++end
++
++pos=find((temperature<TMeltingPoint(pressure)) & (waterfraction>0)); % cold, wet ice
++if (length(pos)>0)
++    error('cold ice with positive waterfraction detected.');
++end
++
++    function Tm=TMeltingPoint(pressure)
++        Tm=GetThom(T0,pressure);
++    end
++    
++    function Th=GetThom(T,pressure)
++        Th=T-beta*pressure;
++    end
++
++%   values for Activation energy Q and pre-exponential constants from
++%   Grewe/Blatter 2009, p54
++
++    function A0=GetA0(T)
++        A0=zeros(size(T));
++        pos0=find(T<T_switch);
++        pos1=find(T>=T_switch);
++        A0(pos0)=3.985e-13; %Grewe Blatter 2009
++        A0(pos1)=1.916e3;
++    end
++
++    function Q=GetQa(T)
++        Q=zeros(size(T));
++        pos0=find(T<T_switch);
++        pos1=find(T>=T_switch);
++        Q(pos0)=6.e4; % J mol^-1 % Paterson 2010
++        Q(pos1)=1.39e5;
++    end
++
++    function A=GetA(T, w)
++        Qa=GetQa(T); 
++        A0=GetA0(T);
++        A=A0.*exp(-Qa./(R*T)).*(1+181.25*w);        
++    end
++    
++    function B=GetRigidity(T,w,pressure)
++        Thom=GetThom(T, pressure);
++        A=GetA(Thom, w);
++        B=1./(A.^(1/n));
++    end
++
++rigidity=GetRigidity(temperature, waterfraction, pressure);
++end
+\ No newline at end of file
Index: issm/oecreview/Archive/16133-16554/ISSM-16271-16272.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16271-16272.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16271-16272.diff	(revision 16556)
@@ -0,0 +1,197 @@
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16271)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16272)
+@@ -33,7 +33,7 @@
+ 	}
+ 
+ 	if(VerboseSolution()) _printf0_("   setting basal Dirichlet boundary conditions\n");
+-	femmodel->UpdateThermalBasalConstraintsx();
++	femmodel->UpdateBasalConstraintsEnthalpyx();
+ 
+ 	if(VerboseSolution()) _printf0_("   computing temperatures\n");
+ 	femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16271)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16272)
+@@ -11,21 +11,23 @@
+ 	int i;
+ 	Element* element=NULL;
+ 
+-	/*drain excess water fraction: */
++	
++	/*Compute basal melting rates: */
+ 	for (i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->DrainWaterfraction();
++		element->ComputeBasalMeltingrate();
+ 	}
+ 
+-	/*Compute basal melting rates: */
+-	for (i=0;i<femmodel->elements->Size();i++){
++    /*drain excess water fraction: */
++    /*	for (i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->ComputeBasalMeltingrate();
++		element->DrainWaterfraction();
+ 	}
++*/
+ 
+ 	/*Update basal dirichlet BCs for enthalpy: */
+ 	for (i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->UpdateThermalBasalConstraints();
++		element->UpdateBasalConstraintsEnthalpy();
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16271)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16272)
+@@ -83,6 +83,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsgroundinglineEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsgiaEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsenthalpyEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsdynamicbasalspcEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MaterialsRheologyLawEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(AutodiffIsautodiffEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum));
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16271)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16272)
+@@ -1241,11 +1241,11 @@
+ /*}}}*/
+ #endif
+ #ifdef _HAVE_THERMAL_
+-void FemModel::UpdateThermalBasalConstraintsx(void){ /*{{{*/
++void FemModel::UpdateBasalConstraintsEnthalpyx(void){ /*{{{*/
+ 
+ 	for(int i=0;i<elements->Size();i++){
+ 		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->UpdateThermalBasalConstraints();
++		element->UpdateBasalConstraintsEnthalpy();
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16271)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16272)
+@@ -125,7 +125,7 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_THERMAL_
+-		virtual void UpdateThermalBasalConstraints(void)=0;
++		virtual void UpdateBasalConstraintsEnthalpy(void)=0;
+ 		virtual void ComputeBasalMeltingrate(void)=0;
+        	virtual void DrainWaterfraction(void)=0;
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16271)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16272)
+@@ -249,7 +249,7 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_THERMAL_
+-		void UpdateThermalBasalConstraints(void){_error_("not implemented yet");};
++		void UpdateBasalConstraintsEnthalpy(void){_error_("not implemented yet");};
+ 		void ComputeBasalMeltingrate(void){_error_("not implemented yet");};
+ 		void DrainWaterfraction(void){_error_("not implemented yet");};
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16271)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16272)
+@@ -4576,7 +4576,7 @@
+ 				// temperate ice has positive thickness: grad enthalpy*n=0.
+ 			}
+ 			else{
+-				// only base temperate, set Dirichlet BCs in Penta::UpdateThermalBasalConstraints()
++				// only base temperate, set Dirichlet BCs in Penta::UpdateBasalConstraintsEnthalpy()
+ 			}
+ 		}
+ 		else{
+@@ -4991,8 +4991,8 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::UpdateThermalBasalConstraints{{{*/
+-void  Penta::UpdateThermalBasalConstraints(void){
++/*FUNCTION Penta::UpdateBasalConstraintsEnthalpy{{{*/
++void  Penta::UpdateBasalConstraintsEnthalpy(void){
+ 
+ 	/*Intermediary*/
+ 	bool        isenthalpy,isdynamicbasalspc,istemperatelayer;
+@@ -5007,8 +5007,8 @@
+ 	/*Check wether dynamic basal boundary conditions are activated */
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;
+-	//parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum);
+-	isdynamicbasalspc = true;
++	parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum);
++	isdynamicbasalspc = true; // TODO: remove before release
+ 	if(!isdynamicbasalspc) return;
+ 
+ 	/*Fetch indices of basal & surface nodes for this finite element*/
+@@ -5025,17 +5025,19 @@
+     GaussPenta* gaussup=new GaussPenta();
+ 	for(int i=0;i<numindices;i++){
+ 		gauss->GaussNode(this->element_type,indices[i]);
+-        gaussup->GaussNode(this->element_type,indicesup[i]); // TODO: check: are the nodes corresponding?
++        gaussup->GaussNode(this->element_type,indicesup[i]); 
+ 
+-		/*Check wether there is a temperate layer at the base or not -> TODO: Johannes:) */
+-        /*check if node is temperate, if not, return*/
++		/*Check wether there is a temperate layer at the base or not */
++        /*check if node is temperate, if not, continue*/
+         enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+         if (enthalpy<matpar->PureIceEnthalpy(pressure)){
+-          // TODO: reset, if necessary, all spcs to non-valid 
+           continue;
+         }
+-        /*check if upper node is temperate. if yes, then we have a temperate layer of positive thickness. if not, continue.*/
++        /*check if upper node is temperate. 
++          if yes, then we have a temperate layer of positive thickness and 
++          reset the spc. 
++          if not, apply dirichlet BC.*/
+         enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+ 		pressure_input->GetInputValue(&pressureup, gaussup);    
+         istemperatelayer = false;
+@@ -5046,7 +5048,6 @@
+ 		if(!istemperatelayer){
+ 			/*Calculate enthalpy at pressure melting point */
+ 			h_pmp=matpar->PureIceEnthalpy(pressure);
+-
+ 			/*Apply Dirichlet condition (dof = 0 here, since there is only one degree of freedom per node)*/
+ 			nodes[indices[i]]->ApplyConstraint(1,h_pmp);
+ 		}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16271)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16272)
+@@ -346,7 +346,7 @@
+ 		ElementVector* CreatePVectorThermalSheet(void);
+ 		void           InputUpdateFromSolutionThermal(IssmDouble* solutiong);
+ 		void           InputUpdateFromSolutionEnthalpy(IssmDouble* solutiong);
+-		void           UpdateThermalBasalConstraints(void);
++		void           UpdateBasalConstraintsEnthalpy(void);
+ 		void           ComputeBasalMeltingrate(void);
+ 		void           DrainWaterfraction(void);
+ 		#endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16271)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16272)
+@@ -99,7 +99,7 @@
+ 		void HydrologyEPLupdateDomainx(void);
+ 		#endif
+ 		#ifdef _HAVE_THERMAL_
+-		void UpdateThermalBasalConstraintsx(void);
++		void UpdateBasalConstraintsEnthalpyx(void);
+ 		#endif
+ };
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16272-16273.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16272-16273.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16272-16273.diff	(revision 16556)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 16272)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 16273)
+@@ -78,4 +78,5 @@
+ 		WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean')
++		WriteData(fid,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16272)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16273)
+@@ -79,7 +79,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','isenthalpy','format','Boolean');
+-            		WriteData(fid,'object',obj,'fieldname','isdynamicbasalspc','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','isdynamicbasalspc','format','Boolean');
+         	end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16273-16274.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16273-16274.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16273-16274.diff	(revision 16556)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 16273)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 16274)
+@@ -20,6 +20,7 @@
+ 		self.penalty_lock      = 0
+ 		self.penalty_factor    = 0
+ 		self.isenthalpy        = 0
++		self.isdynamicbasalspc = 0;
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -33,6 +34,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'))
++		string="%s\n%s"%(string,fielddisplay(self,'isdynamicbasalspc','enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)'))
+ 		return string
+ 		#}}}
+ 	def setdefaultparameters(self): # {{{
+@@ -52,7 +54,10 @@
+ 		#Should we use cold ice (default) or enthalpy formulation
+ 		self.isenthalpy=0
+ 
++		#will basal boundary conditions be set dynamically
++		self.isdynamicbasalspc=0;
+ 		return self
++
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+@@ -67,6 +72,7 @@
+ 			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+ 			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
++			md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0,1]);
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16273)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16274)
+@@ -12,7 +12,7 @@
+ 		penalty_lock      = 0;
+ 		penalty_factor    = 0;
+ 		isenthalpy        = 0;
+-        	isdynamicbasalspc = 0;
++		isdynamicbasalspc = 0;
+ 	end
+ 	methods
+ 		function obj = thermal(varargin) % {{{
+@@ -40,8 +40,8 @@
+ 			%Should we use cold ice (default) or enthalpy formulation
+ 			obj.isenthalpy=0;
+ 
+-            		%will basal boundary conditions be set dynamically
+-            		obj.isdynamicbasalspc=0;
++			%will basal boundary conditions be set dynamically
++			obj.isdynamicbasalspc=0;
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -55,7 +55,7 @@
+ 				replicate=repmat(md.geometry.surface-md.mesh.z,1,size(md.thermal.spctemperature,2));
+ 				md = checkfield(md,'thermal.spctemperature(find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos),'message','spctemperature should be below the adjusted melting point');
+ 				md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0 1]);
+-                		md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0 1]);
++				md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0 1]);
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -68,7 +68,7 @@
+ 			fielddisplay(obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');
+ 			fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)');
+ 			fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+-            		fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
++			fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
Index: issm/oecreview/Archive/16133-16554/ISSM-16274-16275.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16274-16275.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16274-16275.diff	(revision 16556)
@@ -0,0 +1,295 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16274)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16275)
+@@ -552,6 +552,7 @@
+ 	MaxVzEnum,
+ 	MaxAbsVzEnum,
+ 	IceVolumeEnum,
++	IceVolumeAboveFloatationEnum,
+ 	TotalSmbEnum,
+ 	/*}}}*/
+ 	/*Relaxation{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16274)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16275)
+@@ -540,6 +540,7 @@
+ 		case MaxVzEnum : return "MaxVz";
+ 		case MaxAbsVzEnum : return "MaxAbsVz";
+ 		case IceVolumeEnum : return "IceVolume";
++		case IceVolumeAboveFloatationEnum : return "IceVolumeAboveFloatation";
+ 		case TotalSmbEnum : return "TotalSmb";
+ 		case AbsoluteEnum : return "Absolute";
+ 		case IncrementalEnum : return "Incremental";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16274)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16275)
+@@ -552,6 +552,7 @@
+ 	      else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
+ 	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
+ 	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
++	      else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum;
+ 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
+ 	      else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
+ 	      else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16274)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16275)
+@@ -429,37 +429,38 @@
+ 	switch (response_descriptor_enum){
+ 
+ 		#ifdef _HAVE_RESPONSES_
+-		case IceVolumeEnum:              this->IceVolumex(responses); break;
+-		case MinVelEnum:                 this->MinVelx(responses); break;
+-		case MaxVelEnum:                 this->MaxVelx(                  responses); break;
+-		case MinVxEnum:                  this->MinVxx(responses); break;
+-		case MaxVxEnum:                  this->MaxVxx(                   responses); break;
+-		case MaxAbsVxEnum:               this->MaxAbsVxx(                responses); break;
+-		case MinVyEnum:                  this->MinVyx(responses); break;
+-		case MaxVyEnum:                  this->MaxVyx(                   responses); break;
+-		case MaxAbsVyEnum:               this->MaxAbsVyx(                responses); break;
+-		case MinVzEnum:                  this->MinVzx(responses); break;
+-		case MaxVzEnum:                  this->MaxVzx(                   responses); break;
+-		case MaxAbsVzEnum:               this->MaxAbsVzx(                responses); break;
+-		case MassFluxEnum:               this->MassFluxx(         responses); break;
++		case IceVolumeEnum:                this->IceVolumex(responses); break;
++		case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(responses); break;
++		case MinVelEnum:                   this->MinVelx(responses); break;
++		case MaxVelEnum:                   this->MaxVelx(                  responses); break;
++		case MinVxEnum:                    this->MinVxx(responses); break;
++		case MaxVxEnum:                    this->MaxVxx(                   responses); break;
++		case MaxAbsVxEnum:                 this->MaxAbsVxx(                responses); break;
++		case MinVyEnum:                    this->MinVyx(responses); break;
++		case MaxVyEnum:                    this->MaxVyx(                   responses); break;
++		case MaxAbsVyEnum:                 this->MaxAbsVyx(                responses); break;
++		case MinVzEnum:                    this->MinVzx(responses); break;
++		case MaxVzEnum:                    this->MaxVzx(                   responses); break;
++		case MaxAbsVzEnum:                 this->MaxAbsVzx(                responses); break;
++		case MassFluxEnum:                 this->MassFluxx(         responses); break;
+ 		#ifdef _HAVE_CONTROL_
+-		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx(responses,this,weight_index); break;
+-		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(responses,weight_index); break;
+-		case ThicknessAlongGradientEnum: ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceAbsVelMisfitEnum:      SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceRelVelMisfitEnum:      SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceLogVelMisfitEnum:      SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceLogVxVyMisfitEnum:     SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case SurfaceAverageVelMisfitEnum:  SurfaceAverageVelMisfitx(responses,this,weight_index); break;
++		case ThicknessAbsMisfitEnum:       ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case ThicknessAbsGradientEnum:     this->ThicknessAbsGradientx(responses,weight_index); break;
++		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case ThicknessAcrossGradientEnum:  ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
++		case RheologyBbarAbsGradientEnum:  RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+ 		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case BalancethicknessMisfitEnum:BalancethicknessMisfitx(responses,weight_index); break;
++		case BalancethicknessMisfitEnum:   BalancethicknessMisfitx(responses,weight_index); break;
+ 		#endif
+-		case TotalSmbEnum:					this->TotalSmbx(responses); break;
+-		case MaterialsRheologyBbarEnum: this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
+-		case VelEnum:                   this->ElementResponsex(responses,VelEnum); break;
+-		case FrictionCoefficientEnum:NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
++		case TotalSmbEnum:					  this->TotalSmbx(responses); break;
++		case MaterialsRheologyBbarEnum:    this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
++		case VelEnum:                      this->ElementResponsex(responses,VelEnum); break;
++		case FrictionCoefficientEnum:      NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters); break;
+ 		default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break;
+ 		#else
+ 		default: _error_("ISSM was not compiled with responses capabilities, exiting!");
+@@ -491,6 +492,10 @@
+ 					Responsex(&output_value,"IceVolume",0);
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
++				case IceVolumeAboveFloatationEnum:
++					Responsex(&output_value,"IceVolumeAboveFloatation",0);
++					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeAboveFloatationEnum,reCast<IssmPDouble>(output_value),step,time));
++					break;
+ 				case TotalSmbEnum:
+ 					Responsex(&output_value,"TotalSmb",0);
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+@@ -933,6 +938,22 @@
+ 	*pV=total_ice_volume;
+ 
+ }/*}}}*/
++void FemModel::IceVolumeAboveFloatationx(IssmDouble* pV){/*{{{*/
++
++	IssmDouble local_ice_volume_af = 0;
++	IssmDouble total_ice_volume_af;
++
++	for(int i=0;i<this->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		local_ice_volume_af+=element->IceVolumeAboveFloatation();
++	}
++	ISSM_MPI_Reduce(&local_ice_volume_af,&total_ice_volume_af,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
++	ISSM_MPI_Bcast(&total_ice_volume_af,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++
++	/*Assign output pointers: */
++	*pV=total_ice_volume_af;
++
++}/*}}}*/
+ void FemModel::ElementResponsex(IssmDouble* presponse,int response_enum){/*{{{*/
+ 
+ 	int found=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16274)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16275)
+@@ -95,6 +95,7 @@
+ 		virtual IssmDouble MassFlux(IssmDouble* segment)=0;
+ 		virtual void   ElementResponse(IssmDouble* presponse,int response_enum)=0;
+ 		virtual IssmDouble IceVolume(void)=0;
++		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
+ 		virtual IssmDouble TotalSmb(void)=0;
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16274)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16275)
+@@ -2538,6 +2538,37 @@
+ 	return base*(surface-bed);
+ }
+ /*}}}*/
++/*FUNCTION Tria::IceVolumeAboveFloatation {{{*/
++IssmDouble Tria::IceVolumeAboveFloatation(void){
++
++	/*The volume above floatation: H + rho_water/rho_ice * bathymetry */
++	IssmDouble rho_ice,rho_water;
++	IssmDouble base,surface,bed,bathymetry;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	if(NoIceInElement() || IsFloating())return 0;
++
++	rho_ice=matpar->GetRhoIce();
++	rho_water=matpar->GetRhoWater();
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/*First calculate the area of the base (cross section triangle)
++	 * http://en.wikipedia.org/wiki/Triangle
++	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
++	base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
++
++	/*Now get the average height and bathymetry*/
++	Input* surface_input    = inputs->GetInput(SurfaceEnum);    _assert_(surface_input);
++	Input* bed_input        = inputs->GetInput(BedEnum);        _assert_(bed_input);
++	Input* bathymetry_input = inputs->GetInput(BathymetryEnum); _assert_(bathymetry_input);
++	surface_input->GetInputAverage(&surface);
++	bed_input->GetInputAverage(&bed);
++	bathymetry_input->GetInputAverage(&bathymetry);
++
++	/*Return: */
++	return base*(surface-bed+rho_water/rho_ice*bathymetry);
++}
++/*}}}*/
+ /*FUNCTION Tria::MassFlux {{{*/
+ IssmDouble Tria::MassFlux( IssmDouble* segment){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16274)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16275)
+@@ -111,6 +111,7 @@
+ 		#ifdef _HAVE_RESPONSES_
+ 		void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+ 		IssmDouble IceVolume(void);
++		IssmDouble IceVolumeAboveFloatation(void);
+ 		IssmDouble TotalSmb(void);
+ 		void       MinVel(IssmDouble* pminvel);
+ 		void       MinVx(IssmDouble* pminvx);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16274)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16275)
+@@ -3683,6 +3683,37 @@
+ 	return base*height;
+ }
+ /*}}}*/
++/*FUNCTION Penta::IceVolumeAboveFloatation {{{*/
++IssmDouble Penta::IceVolumeAboveFloatation(void){
++
++	/*Volume above floatation: H + rho_water/rho_ice*bathymetry for nodes on the bed*/
++	IssmDouble rho_ice,rho_water;
++	IssmDouble base,bed,surface,bathymetry;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	if(NoIceInElement() || IsFloating() || !IsOnBed())return 0;
++
++	rho_ice=matpar->GetRhoIce();
++	rho_water=matpar->GetRhoWater();
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/*First calculate the area of the base (cross section triangle)
++	 * http://en.wikipedia.org/wiki/Pentangle
++	 * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
++	base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
++
++	/*Now get the average height above floatation*/
++	Input* surface_input    = inputs->GetInput(SurfaceEnum);    _assert_(surface_input);
++	Input* bed_input        = inputs->GetInput(BedEnum);        _assert_(bed_input);
++	Input* bathymetry_input = inputs->GetInput(BathymetryEnum); _assert_(bathymetry_input);
++	surface_input->GetInputAverage(&surface);
++	bed_input->GetInputAverage(&bed);
++	bathymetry_input->GetInputAverage(&bathymetry);
++
++	/*Return: */
++	return base*(surface - bed + rho_water/rho_ice * bathymetry);
++}
++/*}}}*/
+ /*FUNCTION Penta::MinVel{{{*/
+ void  Penta::MinVel(IssmDouble* pminvel){
+ 
+@@ -4848,7 +4879,7 @@
+ 	IssmDouble  B[numdof];
+ 	IssmDouble  B_average,s_average;
+ 	int        *doflist = NULL;
+-	//IssmDouble  pressure[numdof];
++	IssmDouble  pressure[numdof];
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -4856,9 +4887,9 @@
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++){
+ 		values[i]=solution[doflist[i]];
+-		//GetInputListOnVertices(&pressure[0],PressureEnum);
+-		//if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
+-		//if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
++		GetInputListOnVertices(&pressure[0],PressureEnum);
++		if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
++		if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16274)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16275)
+@@ -114,6 +114,7 @@
+ 		 #ifdef _HAVE_RESPONSES_
+ 		void   AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
+ 		IssmDouble IceVolume(void);
++		IssmDouble IceVolumeAboveFloatation(void);
+ 		IssmDouble TotalSmb(void);
+ 		void   MinVel(IssmDouble* pminvel);
+ 		void   MinVx(IssmDouble* pminvx);
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16274)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16275)
+@@ -74,6 +74,7 @@
+ 		void MinVzx(IssmDouble* presponse);
+ 		void TotalSmbx(IssmDouble* pSmb);
+ 		void IceVolumex(IssmDouble* pV);
++		void IceVolumeAboveFloatationx(IssmDouble* pV);
+ 		void ElementResponsex(IssmDouble* presponse,int response_enum);
+ 		void BalancethicknessMisfitx(IssmDouble* pV,int weight_index);
+ 		#endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16275-16276.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16275-16276.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16275-16276.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/enum/IceVolumeAboveFloatationEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IceVolumeAboveFloatationEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/IceVolumeAboveFloatationEnum.m	(revision 16276)
+@@ -0,0 +1,11 @@
++function macro=IceVolumeAboveFloatationEnum()
++%ICEVOLUMEABOVEFLOATATIONENUM - Enum of IceVolumeAboveFloatation
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=IceVolumeAboveFloatationEnum()
++
++macro=StringToEnum('IceVolumeAboveFloatation');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16275)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16276)
+@@ -532,6 +532,7 @@
+ def MaxVzEnum(): return StringToEnum("MaxVz")[0]
+ def MaxAbsVzEnum(): return StringToEnum("MaxAbsVz")[0]
+ def IceVolumeEnum(): return StringToEnum("IceVolume")[0]
++def IceVolumeAboveFloatationEnum(): return StringToEnum("IceVolumeAboveFloatation")[0]
+ def TotalSmbEnum(): return StringToEnum("TotalSmb")[0]
+ def AbsoluteEnum(): return StringToEnum("Absolute")[0]
+ def IncrementalEnum(): return StringToEnum("Incremental")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16276-16277.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16276-16277.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16276-16277.diff	(revision 16556)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16276)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16277)
+@@ -4807,16 +4807,16 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j;
+-	int        analysis_type;
+-	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble Jdet2d,dt;
+-	IssmDouble rho_ice,heatcapacity,geothermalflux_value;
+-	IssmDouble basalfriction,alpha2,vx,vy;
+-	IssmDouble basis[NUMVERTICES];
+-	IssmDouble scalar;
+-	Friction*  friction=NULL;
++	int         i,j;
++	int         analysis_type;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble  Jdet2d,dt;
++	IssmDouble  rho_ice,heatcapacity,geothermalflux_value;
++	IssmDouble  basalfriction,alpha2,vx,vy;
++	IssmDouble  basis[NUMVERTICES];
++	IssmDouble  scalar;
++	Friction*   friction=NULL;
+ 	GaussPenta* gauss=NULL;
+ 
+ 	/* Geothermal flux on ice sheet base and basal friction */
+@@ -4879,7 +4879,7 @@
+ 	IssmDouble  B[numdof];
+ 	IssmDouble  B_average,s_average;
+ 	int        *doflist = NULL;
+-	IssmDouble  pressure[numdof];
++	bool        hack    = false;
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -4887,9 +4887,6 @@
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++){
+ 		values[i]=solution[doflist[i]];
+-		GetInputListOnVertices(&pressure[0],PressureEnum);
+-		if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
+-		if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+@@ -4897,6 +4894,15 @@
+ 		//if(values[i]>275)    _printf_("temperature > 275°K found in solution vector (Paterson's rheology associated is negative)\n");
+ 	}
+ 
++	if(hack){
++		/*Force temperature between [Tpmp-50 Tpmp] to disable penalties*/
++		IssmDouble pressure[numdof];
++		GetInputListOnVertices(&pressure[0],PressureEnum);
++		if(values[i]>matpar->TMeltingPoint(pressure[i]))     values[i]=matpar->TMeltingPoint(pressure[i]);
++		if(values[i]<matpar->TMeltingPoint(pressure[i])-50.) values[i]=matpar->TMeltingPoint(pressure[i])-50.;
++	}
++
++
+ 	/*Get all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
Index: issm/oecreview/Archive/16133-16554/ISSM-16277-16278.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16277-16278.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16277-16278.diff	(revision 16556)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16278-16279.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16278-16279.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16278-16279.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/mesh/meshconvert.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 16278)
++++ ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 16279)
+@@ -15,9 +15,9 @@
+ 	y=md.mesh.y;
+ 	index=md.mesh.elements;
+ else
+-	x=varargin{1};
+-	y=varargin{2};
+-	index=varargin{3};
++	index=varargin{1};
++	x=varargin{2};
++	y=varargin{3};
+ end
+ 
+ %call Bamg
Index: issm/oecreview/Archive/16133-16554/ISSM-16279-16280.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16279-16280.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16279-16280.diff	(revision 16556)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16279)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16280)
+@@ -1023,6 +1023,7 @@
+ 			for (i=0;i<nbt;i++){
+ 				Triangle &t=triangles[i];
+ 				if (t.det>0 && !(t.Hidden(0)||t.Hidden(1) || t.Hidden(2) )){
++					/*Remove triangles that have a bad aspect ratio*/
+ 					//if(t.Anisotropy()<2 & t.Length()<1.e+5){
+ 						index[num*3+0]=GetId(t[0])+1; //back to M indexing
+ 						index[num*3+1]=GetId(t[1])+1; //back to M indexing
+@@ -4218,7 +4219,7 @@
+ 
+ 	//Vertices
+ 	if(verbose) _printf_("Reading vertices (" << nbv << ")\n");
+-	for (i=0;i<nbv;i++){
++	for(i=0;i<nbv;i++){
+ 		vertices[i].r.x=x[i];
+ 		vertices[i].r.y=y[i];
+ 		vertices[i].ReferenceNumber=1;
Index: issm/oecreview/Archive/16133-16554/ISSM-16280-16281.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16280-16281.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16280-16281.diff	(revision 16556)
@@ -0,0 +1,140 @@
+Index: ../trunk-jpl/src/m/mesh/meshconvert.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 16280)
++++ ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 16281)
+@@ -17,41 +17,41 @@
+ 		raise TypeError("meshconvert error message: bad usage")
+ 
+ 	if not len(args):
+-		x=md.mesh.x
+-		y=md.mesh.y
+-		index=md.mesh.elements
++		index = md.mesh.elements
++		x     = md.mesh.x
++		y     = md.mesh.y
+ 	else:
+-		x=args[0]
+-		y=args[1]
+-		index=args[2]
++		index = args[0]
++		x     = args[1]
++		y     = args[2]
+ 
+ 	#call Bamg
+ 	bamgmesh_out,bamggeom_out=BamgConvertMesh(index,x,y)
+ 
+ 	# plug results onto model
+-	md.private.bamg=OrderedDict()
+-	md.private.bamg['mesh']=bamgmesh(bamgmesh_out)
+-	md.private.bamg['geometry']=bamggeom(bamggeom_out)
+-	md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
+-	md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
+-	md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].astype(int)
+-	md.mesh.edges=bamgmesh_out['IssmEdges'].astype(int)
+-	md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].astype(int)
+-	md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].astype(int)
++	md.private.bamg             = OrderedDict()
++	md.private.bamg['mesh']     = bamgmesh(bamgmesh_out)
++	md.private.bamg['geometry'] = bamggeom(bamggeom_out)
++	md.mesh.x                   = bamgmesh_out['Vertices'][:,0].copy()
++	md.mesh.y                   = bamgmesh_out['Vertices'][:,1].copy()
++	md.mesh.elements            = bamgmesh_out['Triangles'][:,0:3].astype(int)
++	md.mesh.edges               = bamgmesh_out['IssmEdges'].astype(int)
++	md.mesh.segments            = bamgmesh_out['IssmSegments'][:,0:3].astype(int)
++	md.mesh.segmentmarkers      = bamgmesh_out['IssmSegments'][:,3].astype(int)
+ 
+ 	#Fill in rest of fields:
+-	md.mesh.dimension=2
+-	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
+-	md.mesh.numberofvertices=numpy.size(md.mesh.x)
+-	md.mesh.numberofedges=numpy.size(md.mesh.edges,axis=0)
+-	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
+-	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices,bool)
+-	md.mask.vertexonwater=numpy.zeros(md.mesh.numberofvertices,bool)
+-	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices,bool)
+-	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements,bool)
+-	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements,bool)
+-	md.mesh.vertexonboundary=numpy.zeros(md.mesh.numberofvertices,bool)
+-	md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1]=True
++	md.mesh.dimension          = 2
++	md.mesh.numberofelements   = numpy.size(md.mesh.elements,axis=0)
++	md.mesh.numberofvertices   = numpy.size(md.mesh.x)
++	md.mesh.numberofedges      = numpy.size(md.mesh.edges,axis=0)
++	md.mesh.z                  = numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonbed        = numpy.ones(md.mesh.numberofvertices,bool)
++	md.mask.vertexonwater      = numpy.zeros(md.mesh.numberofvertices,bool)
++	md.mesh.vertexonsurface    = numpy.ones(md.mesh.numberofvertices,bool)
++	md.mesh.elementonbed       = numpy.ones(md.mesh.numberofelements,bool)
++	md.mesh.elementonsurface   = numpy.ones(md.mesh.numberofelements,bool)
++	md.mesh.vertexonboundary   = numpy.zeros(md.mesh.nuberofvertices,bool)
++	md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1] = True
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/mesh/meshconvert.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 16280)
++++ ../trunk-jpl/src/m/mesh/meshconvert.m	(revision 16281)
+@@ -11,37 +11,37 @@
+ end
+ 
+ if nargin==1,
+-	x=md.mesh.x;
+-	y=md.mesh.y;
+-	index=md.mesh.elements;
++	index = md.mesh.elements;
++	x     = md.mesh.x;
++	y     = md.mesh.y;
+ else
+-	index=varargin{1};
+-	x=varargin{2};
+-	y=varargin{3};
++	index = varargin{1};
++	x     = varargin{2};
++	y     = varargin{3};
+ end
+ 
+ %call Bamg
+ [bamgmesh_out bamggeom_out]=BamgConvertMesh(index,x,y);
+ 
+ % plug results onto model
+-md.private.bamg=struct();
+-md.private.bamg.mesh=bamgmesh(bamgmesh_out);
+-md.private.bamg.geometry=bamggeom(bamggeom_out);
+-md.mesh.x=bamgmesh_out.Vertices(:,1);
+-md.mesh.y=bamgmesh_out.Vertices(:,2);
+-md.mesh.elements=bamgmesh_out.Triangles(:,1:3);
+-md.mesh.edges=bamgmesh_out.IssmEdges;
+-md.mesh.segments=bamgmesh_out.IssmSegments(:,1:3);
+-md.mesh.segmentmarkers=bamgmesh_out.IssmSegments(:,4);
++md.private.bamg          = struct();
++md.private.bamg.mesh     = bamgmesh(bamgmesh_out);
++md.private.bamg.geometry = bamggeom(bamggeom_out);
++md.mesh.x              = bamgmesh_out.Vertices(:,1);
++md.mesh.y              = bamgmesh_out.Vertices(:,2);
++md.mesh.elements       = bamgmesh_out.Triangles(:,1:3);
++md.mesh.edges          = bamgmesh_out.IssmEdges;
++md.mesh.segments       = bamgmesh_out.IssmSegments(:,1:3);
++md.mesh.segmentmarkers = bamgmesh_out.IssmSegments(:,4);
+ 
+ %Fill in rest of fields:
+-md.mesh.dimension=2;
+-md.mesh.numberofelements=size(md.mesh.elements,1);
+-md.mesh.numberofvertices=length(md.mesh.x);
+-md.mesh.numberofedges=size(md.mesh.edges,1);
+-md.mesh.z=zeros(md.mesh.numberofvertices,1);
+-md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
+-md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+-md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
+-md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
+-md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
++md.mesh.dimension        = 2;
++md.mesh.numberofelements = size(md.mesh.elements,1);
++md.mesh.numberofvertices = length(md.mesh.x);
++md.mesh.numberofedges    = size(md.mesh.edges,1);
++md.mesh.z                = zeros(md.mesh.numberofvertices,1);
++md.mesh.vertexonbed      = ones(md.mesh.numberofvertices,1);
++md.mesh.vertexonsurface  = ones(md.mesh.numberofvertices,1);
++md.mesh.elementonbed     = ones(md.mesh.numberofelements,1);
++md.mesh.elementonsurface = ones(md.mesh.numberofelements,1);
++md.mesh.vertexonboundary = zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2)) = 1;
Index: issm/oecreview/Archive/16133-16554/ISSM-16281-16282.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16281-16282.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16281-16282.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 16281)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 16282)
+@@ -341,8 +341,6 @@
+ 		printf ( "\n");
+ 	#endif
+ 
+-	end:
+-
+ 	/*Assign output pointers: */
+ 	*pimageout=imageout;
+ 	return 1;
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16281)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 16282)
+@@ -180,6 +180,8 @@
+ 
+ 		data_mesh->SetValue(i,data_value,INS_VAL);
+ 	}
++
++	return NULL;
+ }/*}}}*/
+ 
+ /*findindices {{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16282-16283.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16282-16283.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16282-16283.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16283-16284.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16283-16284.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16283-16284.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/mesh/meshconvert.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 16283)
++++ ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 16284)
+@@ -50,7 +50,7 @@
+ 	md.mesh.vertexonsurface    = numpy.ones(md.mesh.numberofvertices,bool)
+ 	md.mesh.elementonbed       = numpy.ones(md.mesh.numberofelements,bool)
+ 	md.mesh.elementonsurface   = numpy.ones(md.mesh.numberofelements,bool)
+-	md.mesh.vertexonboundary   = numpy.zeros(md.mesh.nuberofvertices,bool)
++	md.mesh.vertexonboundary   = numpy.zeros(md.mesh.numberofvertices,bool)
+ 	md.mesh.vertexonboundary[md.mesh.segments[:,0:2]-1] = True
+ 
+ 	return md
Index: issm/oecreview/Archive/16133-16554/ISSM-16284-16285.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16284-16285.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16284-16285.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/classes/clusters/pfe.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 16284)
++++ ../trunk-jpl/src/m/classes/clusters/pfe.m	(revision 16285)
+@@ -86,8 +86,19 @@
+ 						 md = checkmessage(md,'cpuspernode should be between 1 and 12 for ''wes'' processors');
+ 					 end
+ 				 end
++			 elseif strcmpi(cluster.processor,'ivy'),
++				 if cluster.hyperthreading,
++					 if ((cluster.cpuspernode>40 ) | (cluster.cpuspernode<1)),
++						 md = checkmessage(md,'cpuspernode should be between 1 and 40 for ''ivy'' processors in hyperthreading mode');
++					 end
++				 else
++					 if ((cluster.cpuspernode>20 ) | (cluster.cpuspernode<1)),
++						 md = checkmessage(md,'cpuspernode should be between 1 and 20 for ''ivy'' processors');
++					 end
++				 end
++
+ 			 else
+-				 md = checkmessage(md,'unknown processor type, should be ''neh'',''wes'' or ''har''');
++				 md = checkmessage(md,'unknown processor type, should be ''neh'',''wes'' or ''har'' or ''ivy''');
+ 			 end
+ 
+ 			 %Miscelaneous
Index: issm/oecreview/Archive/16133-16554/ISSM-16285-16286.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16285-16286.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16285-16286.diff	(revision 16556)
@@ -0,0 +1,331 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16285)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16286)
+@@ -412,13 +412,14 @@
+ syn keyword cType BoolElementResult
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
++syn keyword cType classes
+ syn keyword cType Constraint
+ syn keyword cType Constraints
+ syn keyword cType Contour
+ syn keyword cType Contours
+ syn keyword cType ControlInput
++syn keyword cType DatasetInput
+ syn keyword cType DataSetParam
+-syn keyword cType DatasetInput
+ syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+ syn keyword cType DoubleElementResult
+@@ -432,16 +433,17 @@
+ syn keyword cType ElementHook
+ syn keyword cType ElementMatrix
+ syn keyword cType ElementResult
++syn keyword cType Elements
+ syn keyword cType ElementVector
+-syn keyword cType Elements
+ syn keyword cType ExponentialVariogram
+ syn keyword cType ExternalResult
+ syn keyword cType FemModel
+ syn keyword cType FileParam
+ syn keyword cType Friction
++syn keyword cType GaussianVariogram
++syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
+ syn keyword cType GaussTria
+-syn keyword cType GaussianVariogram
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+ syn keyword cType GenericParam
+@@ -455,13 +457,14 @@
+ syn keyword cType IntParam
+ syn keyword cType IntVecParam
+ syn keyword cType IoModel
++syn keyword cType krigingobjects
+ syn keyword cType Load
+ syn keyword cType Loads
+-syn keyword cType Matdamageice
+ syn keyword cType Material
+ syn keyword cType Materials
+ syn keyword cType Matice
+ syn keyword cType Matpar
++syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+ syn keyword cType Node
+ syn keyword cType Nodes
+@@ -469,8 +472,8 @@
+ syn keyword cType Observation
+ syn keyword cType Observations
+ syn keyword cType Option
++syn keyword cType Options
+ syn keyword cType OptionUtilities
+-syn keyword cType Options
+ syn keyword cType Param
+ syn keyword cType Parameters
+ syn keyword cType Patch
+@@ -484,8 +487,8 @@
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
+ syn keyword cType Results
++syn keyword cType Riftfront
+ syn keyword cType RiftStruct
+-syn keyword cType Riftfront
+ syn keyword cType Segment
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+@@ -504,10 +507,6 @@
+ syn keyword cType VectorParam
+ syn keyword cType Vertex
+ syn keyword cType Vertices
+-syn keyword cType classes
+-syn keyword cType gaussobjects
+-syn keyword cType krigingobjects
+-syn keyword cType matrixobjects
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -530,6 +529,12 @@
+ syn keyword cConstant AutodiffFosReverseIndexEnum
+ syn keyword cConstant AutodiffMassFluxSegmentsPresentEnum
+ syn keyword cConstant AutodiffKeepEnum
++syn keyword cConstant AutodiffObufsizeEnum
++syn keyword cConstant AutodiffLbufsizeEnum
++syn keyword cConstant AutodiffCbufsizeEnum
++syn keyword cConstant AutodiffTbufsizeEnum
++syn keyword cConstant AutodiffGcTriggerRatioEnum
++syn keyword cConstant AutodiffGcTriggerMaxSizeEnum
+ syn keyword cConstant BalancethicknessSpcthicknessEnum
+ syn keyword cConstant BalancethicknessStabilizationEnum
+ syn keyword cConstant BalancethicknessThickeningRateEnum
+@@ -543,7 +548,6 @@
+ syn keyword cConstant ConstantsYtsEnum
+ syn keyword cConstant DependentObjectEnum
+ syn keyword cConstant StressbalanceAbstolEnum
+-syn keyword cConstant StressbalanceIcefrontEnum
+ syn keyword cConstant StressbalanceIsnewtonEnum
+ syn keyword cConstant StressbalanceMaxiterEnum
+ syn keyword cConstant StressbalanceNumRequestedOutputsEnum
+@@ -619,14 +623,12 @@
+ syn keyword cConstant HydrologySedimentEnum
+ syn keyword cConstant HydrologyEfficientEnum
+ syn keyword cConstant HydrologySedimentKmaxEnum
+-syn keyword cConstant BasisIntegralEnum
+ syn keyword cConstant WaterTransferEnum
+ syn keyword cConstant IndependentObjectEnum
+ syn keyword cConstant InversionControlParametersEnum
+ syn keyword cConstant InversionCostFunctionThresholdEnum
+ syn keyword cConstant InversionCostFunctionsCoefficientsEnum
+ syn keyword cConstant InversionCostFunctionsEnum
+-syn keyword cConstant InversionGradientOnlyEnum
+ syn keyword cConstant InversionGradientScalingEnum
+ syn keyword cConstant InversionIscontrolEnum
+ syn keyword cConstant InversionTaoEnum
+@@ -639,15 +641,11 @@
+ syn keyword cConstant InversionNumCostFunctionsEnum
+ syn keyword cConstant InversionStepThresholdEnum
+ syn keyword cConstant InversionThicknessObsEnum
+-syn keyword cConstant InversionVelObsEnum
+ syn keyword cConstant InversionVxObsEnum
+ syn keyword cConstant InversionVyObsEnum
+ syn keyword cConstant InversionVzObsEnum
+-syn keyword cConstant MaskElementonfloatingiceEnum
+-syn keyword cConstant MaskElementongroundediceEnum
+-syn keyword cConstant MaskVertexonfloatingiceEnum
+-syn keyword cConstant MaskVertexongroundediceEnum
+ syn keyword cConstant MaskIceLevelsetEnum
++syn keyword cConstant QmuMaskIceLevelsetEnum
+ syn keyword cConstant MaterialsBetaEnum
+ syn keyword cConstant MaterialsHeatcapacityEnum
+ syn keyword cConstant MaterialsLatentheatEnum
+@@ -657,8 +655,23 @@
+ syn keyword cConstant MaterialsRheologyBbarEnum
+ syn keyword cConstant MaterialsRheologyLawEnum
+ syn keyword cConstant MaterialsRheologyNEnum
+-syn keyword cConstant MaterialsRheologyZEnum
+-syn keyword cConstant MaterialsRheologyZbarEnum
++syn keyword cConstant DamageDEnum
++syn keyword cConstant QmuDamageDEnum
++syn keyword cConstant DamageDbarEnum
++syn keyword cConstant DamageLawEnum
++syn keyword cConstant DamageC1Enum
++syn keyword cConstant DamageC2Enum
++syn keyword cConstant DamageC3Enum
++syn keyword cConstant DamageC4Enum
++syn keyword cConstant DamageHealingEnum
++syn keyword cConstant DamageStressThresholdEnum
++syn keyword cConstant DamageStabilizationEnum
++syn keyword cConstant DamagePenaltyThresholdEnum
++syn keyword cConstant DamagePenaltyLockEnum
++syn keyword cConstant DamagePenaltyFactorEnum
++syn keyword cConstant DamageMaxiterEnum
++syn keyword cConstant DamageSpcdamageEnum
++syn keyword cConstant DamageMaxDamageEnum
+ syn keyword cConstant MaterialsRhoIceEnum
+ syn keyword cConstant MaterialsRhoWaterEnum
+ syn keyword cConstant MaterialsRhoFreshwaterEnum
+@@ -741,13 +754,14 @@
+ syn keyword cConstant SurfaceforcingsSmbrefEnum
+ syn keyword cConstant SurfaceforcingsBPosEnum
+ syn keyword cConstant SurfaceforcingsBNegEnum
++syn keyword cConstant ThermalIsenthalpyEnum
++syn keyword cConstant ThermalIsdynamicbasalspcEnum
+ syn keyword cConstant ThermalMaxiterEnum
+ syn keyword cConstant ThermalPenaltyFactorEnum
+ syn keyword cConstant ThermalPenaltyLockEnum
+ syn keyword cConstant ThermalPenaltyThresholdEnum
+ syn keyword cConstant ThermalSpctemperatureEnum
+ syn keyword cConstant ThermalStabilizationEnum
+-syn keyword cConstant ThermalIsenthalpyEnum
+ syn keyword cConstant GiaMantleViscosityEnum
+ syn keyword cConstant GiaLithosphereThicknessEnum
+ syn keyword cConstant ThicknessEnum
+@@ -761,6 +775,7 @@
+ syn keyword cConstant TransientIsmasstransportEnum
+ syn keyword cConstant TransientIsthermalEnum
+ syn keyword cConstant TransientIsgiaEnum
++syn keyword cConstant TransientIsdamageEnum
+ syn keyword cConstant TransientNumRequestedOutputsEnum
+ syn keyword cConstant TransientRequestedOutputsEnum
+ syn keyword cConstant SolutionTypeEnum
+@@ -768,7 +783,6 @@
+ syn keyword cConstant ConfigurationTypeEnum
+ syn keyword cConstant AdjointBalancethicknessAnalysisEnum
+ syn keyword cConstant AdjointHorizAnalysisEnum
+-syn keyword cConstant AdjointSolutionEnum
+ syn keyword cConstant AnalysisCounterEnum
+ syn keyword cConstant NoneAnalysisEnum
+ syn keyword cConstant DefaultAnalysisEnum
+@@ -776,10 +790,14 @@
+ syn keyword cConstant BalancethicknessSolutionEnum
+ syn keyword cConstant BalancethicknessSoftAnalysisEnum
+ syn keyword cConstant BalancethicknessSoftSolutionEnum
++syn keyword cConstant BalancevelocityAnalysisEnum
++syn keyword cConstant BalancevelocitySolutionEnum
+ syn keyword cConstant BedSlopeAnalysisEnum
+ syn keyword cConstant BedSlopeSolutionEnum
+ syn keyword cConstant BedSlopeXAnalysisEnum
+ syn keyword cConstant BedSlopeYAnalysisEnum
++syn keyword cConstant DamageEvolutionSolutionEnum
++syn keyword cConstant DamageEvolutionAnalysisEnum
+ syn keyword cConstant StressbalanceAnalysisEnum
+ syn keyword cConstant StressbalanceSIAAnalysisEnum
+ syn keyword cConstant StressbalanceSolutionEnum
+@@ -802,6 +820,8 @@
+ syn keyword cConstant SurfaceSlopeSolutionEnum
+ syn keyword cConstant SurfaceSlopeXAnalysisEnum
+ syn keyword cConstant SurfaceSlopeYAnalysisEnum
++syn keyword cConstant SmoothedSurfaceSlopeXAnalysisEnum
++syn keyword cConstant SmoothedSurfaceSlopeYAnalysisEnum
+ syn keyword cConstant ThermalAnalysisEnum
+ syn keyword cConstant ThermalSolutionEnum
+ syn keyword cConstant TransientSolutionEnum
+@@ -834,7 +854,6 @@
+ syn keyword cConstant ContourEnum
+ syn keyword cConstant ControlInputEnum
+ syn keyword cConstant DatasetInputEnum
+-syn keyword cConstant DofIndexingEnum
+ syn keyword cConstant DoubleInputEnum
+ syn keyword cConstant DataSetParamEnum
+ syn keyword cConstant DoubleMatArrayParamEnum
+@@ -845,25 +864,17 @@
+ syn keyword cConstant ElementResultEnum
+ syn keyword cConstant ExternalResultEnum
+ syn keyword cConstant FileParamEnum
+-syn keyword cConstant HookEnum
+-syn keyword cConstant IcefrontEnum
+ syn keyword cConstant InputEnum
+ syn keyword cConstant IntInputEnum
+ syn keyword cConstant IntParamEnum
+ syn keyword cConstant IntVecParamEnum
+ syn keyword cConstant TransientParamEnum
+-syn keyword cConstant IceFrontTypeEnum
+-syn keyword cConstant SSA2dIceFrontEnum
+-syn keyword cConstant SSA3dIceFrontEnum
+ syn keyword cConstant MaticeEnum
+-syn keyword cConstant MatdamageiceEnum
+ syn keyword cConstant MatparEnum
+ syn keyword cConstant NodeEnum
+ syn keyword cConstant NumericalfluxEnum
+ syn keyword cConstant NumericalfluxTypeEnum
+ syn keyword cConstant ParamEnum
+-syn keyword cConstant L1L2IceFrontEnum
+-syn keyword cConstant HOIceFrontEnum
+ syn keyword cConstant PengridEnum
+ syn keyword cConstant PenpairEnum
+ syn keyword cConstant PentaEnum
+@@ -879,7 +890,6 @@
+ syn keyword cConstant SpcDynamicEnum
+ syn keyword cConstant SpcStaticEnum
+ syn keyword cConstant SpcTransientEnum
+-syn keyword cConstant FSIceFrontEnum
+ syn keyword cConstant StringArrayParamEnum
+ syn keyword cConstant StringParamEnum
+ syn keyword cConstant TriaEnum
+@@ -902,7 +912,6 @@
+ syn keyword cConstant BedSlopeXEnum
+ syn keyword cConstant BedSlopeYEnum
+ syn keyword cConstant BoundaryEnum
+-syn keyword cConstant ConstantEnum
+ syn keyword cConstant ConvergedEnum
+ syn keyword cConstant FillEnum
+ syn keyword cConstant FractionIncrementEnum
+@@ -910,10 +919,8 @@
+ syn keyword cConstant GroundinglineMeltingRateEnum
+ syn keyword cConstant InternalEnum
+ syn keyword cConstant MassFluxEnum
+-syn keyword cConstant MaxPenetrationEnum
+ syn keyword cConstant MeltingOffsetEnum
+ syn keyword cConstant MisfitEnum
+-syn keyword cConstant NumberNodeToElementConnectivityEnum
+ syn keyword cConstant PressureEnum
+ syn keyword cConstant PressurePicardEnum
+ syn keyword cConstant QmuPressureEnum
+@@ -939,7 +946,6 @@
+ syn keyword cConstant SurfaceSlopeXEnum
+ syn keyword cConstant SurfaceSlopeYEnum
+ syn keyword cConstant TemperatureEnum
+-syn keyword cConstant TemperatureOldEnum
+ syn keyword cConstant TemperaturePicardEnum
+ syn keyword cConstant ThicknessAbsMisfitEnum
+ syn keyword cConstant VelEnum
+@@ -971,7 +977,6 @@
+ syn keyword cConstant WaterfractionEnum
+ syn keyword cConstant WatercolumnEnum
+ syn keyword cConstant BasalFrictionEnum
+-syn keyword cConstant BasalMeltrateEnum
+ syn keyword cConstant ViscousHeatingEnum
+ syn keyword cConstant QmuTemperatureEnum
+ syn keyword cConstant HydrologyWaterVxEnum
+@@ -1028,6 +1033,7 @@
+ syn keyword cConstant MaxVzEnum
+ syn keyword cConstant MaxAbsVzEnum
+ syn keyword cConstant IceVolumeEnum
++syn keyword cConstant IceVolumeAboveFloatationEnum
+ syn keyword cConstant TotalSmbEnum
+ syn keyword cConstant AbsoluteEnum
+ syn keyword cConstant IncrementalEnum
+@@ -1037,6 +1043,7 @@
+ syn keyword cConstant SubelementMigrationEnum
+ syn keyword cConstant SubelementMigration2Enum
+ syn keyword cConstant MaskGroundediceLevelsetEnum
++syn keyword cConstant QmuMaskGroundediceLevelsetEnum
+ syn keyword cConstant FSSolverEnum
+ syn keyword cConstant AdjointEnum
+ syn keyword cConstant ColinearEnum
+@@ -1075,13 +1082,12 @@
+ syn keyword cConstant MpiDenseEnum
+ syn keyword cConstant SeqEnum
+ syn keyword cConstant MpiEnum
++syn keyword cConstant MumpsEnum
++syn keyword cConstant GslEnum
+ syn keyword cConstant OptionEnum
+ syn keyword cConstant GenericOptionEnum
+ syn keyword cConstant OptionCellEnum
+-syn keyword cConstant OptionCharEnum
+ syn keyword cConstant OptionStructEnum
+-syn keyword cConstant OptionDoubleEnum
+-syn keyword cConstant OptionLogicalEnum
+ syn keyword cConstant PatersonEnum
+ syn keyword cConstant ArrheniusEnum
+ syn keyword cConstant LliboutryDuvalEnum
Index: issm/oecreview/Archive/16133-16554/ISSM-16286-16287.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16286-16287.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16286-16287.diff	(revision 16556)
@@ -0,0 +1,4325 @@
+Index: ../trunk-jpl/src/m/classes/planetmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/planetmesh.m	(revision 16286)
++++ ../trunk-jpl/src/m/classes/planetmesh.m	(revision 16287)
+@@ -1,123 +0,0 @@
+-%PLANETMESH class definition
+-%
+-%   Usage:
+-%      planetmesh=planetmesh();
+-
+-classdef planetmesh
+-	properties (SetAccess=public) 
+-		x                           = NaN;
+-		y                           = NaN;
+-		z                           = NaN;
+-		r                           = NaN;
+-		theta                       = NaN;
+-		phi                         = NaN
+-		elements                    = NaN
+-		dimension                   = 0;
+-		numberoflayers              = 0;
+-		numberofelements            = 0;
+-		numberofvertices            = 0;
+-
+-		vertexconnectivity          = NaN
+-		elementconnectivity         = NaN
+-		average_vertex_connectivity = 0;
+-	end
+-	methods
+-		function obj = planetmesh(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-
+-			%the connectivity is the avergaded number of nodes linked to a
+-			%given node through an edge. This connectivity is used to initially
+-			%allocate memory to the stiffness matrix. A value of 16 seems to
+-			%give a good memory/time ration. This value can be checked in
+-			%trunk/test/Miscellaneous/runme.m
+-			obj.average_vertex_connectivity=25;
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-
+-			md = checkfield(md,'planetmesh.x','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.y','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.z','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.r','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.theta','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.phi','NaN',1,'size',[md.planetmesh.numberofvertices 1]);
+-			md = checkfield(md,'planetmesh.elements','NaN',1,'>',0,'values',1:md.planetmesh.numberofvertices);
+-			if(md.planetmesh.dimension==2),
+-				md = checkfield(md,'planetmesh.elements','size',[md.planetmesh.numberofelements 3]);
+-			else
+-				md = checkfield(md,'planetmesh.elements','size',[md.planetmesh.numberofelements 6]);
+-			end
+-			if any(~ismember(1:md.planetmesh.numberofvertices,sort(unique(md.planetmesh.elements(:)))));
+-				md = checkmessage(md,'orphan nodes have been found. Check the planetmesh outline');
+-			end
+-			md = checkfield(md,'planetmesh.dimension','values',[2 3]);
+-			md = checkfield(md,'planetmesh.numberoflayers','>=',0);
+-			md = checkfield(md,'planetmesh.numberofelements','>',0);
+-			md = checkfield(md,'planetmesh.numberofvertices','>',0);
+-			if (md.planetmesh.dimension==2),
+-				md = checkfield(md,'planetmesh.average_vertex_connectivity','>=',9,'message','''planetmesh.average_vertex_connectivity'' should be at least 9 in 2d');
+-			else
+-				md = checkfield(md,'planetmesh.average_vertex_connectivity','>=',24,'message','''planetmesh.average_vertex_connectivity'' should be at least 24 in 3d');
+-			end
+-			md = checkfield(md,'planetmesh.elementconnectivity','size',[md.planetmesh.numberofelements 3],'NaN',1);
+-
+-			%Solution specific checks
+-			switch(solution),
+-				case MasstransportSolutionEnum(),
+-					if md.masstransport.stabilization==3,
+-						md = checkfield(md,'planetmesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d planetmeshes');
+-					end
+-				case TransientSolutionEnum(),
+-					if md.transient.ismasstransport & md.masstransport.stabilization==3,
+-						md = checkfield(md,'planetmesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d planetmeshes');
+-					end
+-				case ThermalSolutionEnum(),
+-					md = checkfield(md,'planetmesh.dimension','values',3,'message','thermal solution only supported on 3d planetmeshes');
+-			end
+-		end % }}}
+-		function disp(obj) % {{{
+-			disp(sprintf('   Mesh:')); 
+-
+-			disp(sprintf('\n      Elements and vertices:'));
+-			fielddisplay(obj,'numberofelements','number of elements');
+-			fielddisplay(obj,'numberofvertices','number of vertices');
+-			fielddisplay(obj,'elements','vertex indices of the mesh elements');
+-			fielddisplay(obj,'x','vertices x coordinate [m]');
+-			fielddisplay(obj,'y','vertices y coordinate [m]');
+-			fielddisplay(obj,'z','vertices z coordinate [m]');
+-			fielddisplay(obj,'r','vertices r coordinate [m]');
+-			fielddisplay(obj,'theta','vertices theta coordinate [degrees]');
+-			fielddisplay(obj,'phi','vertices phi coordinate [degrees]');
+-
+-			disp(sprintf('\n      Properties:'));
+-			fielddisplay(obj,'dimension','planetmesh dimension (2d or 3d)');
+-			fielddisplay(obj,'numberoflayers','number of extrusion layers');
+-
+-			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
+-			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
+-			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
+-
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','z','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','r','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','theta','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','phi','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','dimension','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','numberoflayers','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
+-			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 16286)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 16287)
+@@ -1,1204 +0,0 @@
+-%MODEL class definition
+-%
+-%   Usage:
+-%      md = model(varargin)
+-
+-classdef model
+-	properties (SetAccess=public) %Model fields
+-		% {{{
+-		%Careful here: no other class should be used as default value this is a bug of matlab
+-		mesh             = 0;
+-		mask             = 0;
+-
+-		geometry         = 0;
+-		constants        = 0;
+-		surfaceforcings  = 0;
+-		basalforcings    = 0;
+-		materials        = 0;
+-		damage           = 0;
+-		friction         = 0;
+-		flowequation     = 0;
+-		timestepping     = 0;
+-		initialization   = 0;
+-		rifts            = 0;
+-
+-		debug            = 0;
+-		verbose          = 0;
+-		settings         = 0;
+-		toolkits         = 0;
+-		cluster          = 0;
+-
+-		balancethickness = 0;
+-		stressbalance       = 0;
+-		groundingline    = 0;
+-		hydrology        = 0;
+-		masstransport       = 0;
+-		thermal          = 0;
+-		steadystate      = 0;
+-		transient        = 0;
+-		gia              = 0;
+-
+-		autodiff         = 0;
+-		flaim            = 0;
+-		inversion        = 0;
+-		qmu              = 0;
+-
+-		results          = 0;
+-		radaroverlay     = 0;
+-		miscellaneous    = 0;
+-		private          = 0;
+-
+-		%}}}
+-	end
+-	methods (Static)
+-		function md = loadobj(md) % {{{
+-			% This function is directly called by matlab when a model object is
+-			% loaded. If the input is a struct it is an old version of model and
+-			% old fields must be recovered (make sure they are in the deprecated
+-			% model properties)
+-
+-			if verLessThan('matlab','7.9'),
+-				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
+-				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
+-
+-				% This is a Matlab bug: all the fields of md have their default value
+-				% Example of error message:
+-				% Warning: Error loading an object of class 'model':
+-				% Undefined function or method 'exist' for input arguments of type 'cell'
+-				%
+-				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+-			end
+-
+-			if isstruct(md)
+-				disp('Recovering model object from a previous version');
+-				md = structtomodel(model,md);
+-			end
+-
+-			%2012 August 4th
+-			if isa(md.materials,'materials'),
+-				disp('Recovering old materials');
+-				if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
+-					md.materials=matice(md.materials);
+-				else
+-					md.materials=matdamageice(md.materials);
+-				end
+-			end
+-			%2013 April 12
+-			if numel(md.stressbalance.loadingforce==1)
+-				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+-			end
+-			%2013 April 17
+-			if isa(md.hydrology,'hydrology'),
+-				disp('Recovering old hydrology class');
+-				md.hydrology=hydrologyshreve(md.materials);
+-			end
+-		end% }}}
+-	end
+-	methods
+-		function md = model(varargin) % {{{
+-
+-			switch nargin
+-				case 0
+-					md=setdefaultparameters(md);
+-				otherwise
+-					error('model constructor error message: 0 of 1 argument only in input.');
+-				end
+-		end
+-		%}}}
+-		function md = checkmessage(md,string) % {{{
+-			if(nargout~=1) error('wrong usage, model must be an output'); end
+-			disp(['model not consistent: ' string]);
+-			md.private.isconsistent=false;
+-		end
+-		%}}}
+-		function md = collapse(md)% {{{
+-			%COLLAPSE - collapses a 3d mesh into a 2d mesh
+-			%
+-			%   This routine collapses a 3d model into a 2d model
+-			%   and collapses all the fileds of the 3d model by
+-			%   taking their depth-averaged values
+-			%
+-			%   Usage:
+-			%      md=collapse(md)
+-			%
+-			%   See also: EXTRUDE, MODELEXTRACT
+-
+-			%Check that the model is really a 3d model
+-			if ~md.mesh.dimension==3,
+-				error('collapse error message: only 3d mesh can be collapsed')
+-			end
+-
+-			%Start with changing alle the fields from the 3d mesh 
+-
+-			%drag is limited to nodes that are on the bedrock.
+-			md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+-
+-			%p and q (same deal, except for element that are on the bedrock: )
+-			md.friction.p=project2d(md,md.friction.p,1);
+-			md.friction.q=project2d(md,md.friction.q,1);
+-
+-			%observations
+-			if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers); end;
+-			if ~isnan(md.inversion.vy_obs), md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers); end;
+-			if ~isnan(md.inversion.vel_obs), md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers); end;
+-			if ~isnan(md.inversion.cost_functions_coefficients), md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers); end;
+-			if numel(md.inversion.min_parameters)>1, md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers); end;
+-			if numel(md.inversion.max_parameters)>1, md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers); end;
+-			if ~isnan(md.surfaceforcings.mass_balance),
+-				md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.mesh.numberoflayers); 
+-			end;
+-			if ~isnan(md.balancethickness.thickening_rate), md.balancethickness.thickening_rate=project2d(md,md.balancethickness.thickening_rate,md.mesh.numberoflayers); end;
+-
+-			%results
+-			if ~isnan(md.initialization.vx),md.initialization.vx=DepthAverage(md,md.initialization.vx);end;
+-			if ~isnan(md.initialization.vy),md.initialization.vy=DepthAverage(md,md.initialization.vy);end;
+-			if ~isnan(md.initialization.vz),md.initialization.vz=DepthAverage(md,md.initialization.vz);end;
+-			if ~isnan(md.initialization.vel),md.initialization.vel=DepthAverage(md,md.initialization.vel);end;
+-			if ~isnan(md.initialization.temperature),md.initialization.temperature=DepthAverage(md,md.initialization.temperature);end;
+-
+-			%gia
+-			if ~isnan(md.gia.mantle_viscosity), md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1); end
+-			if ~isnan(md.gia.lithosphere_thickness), md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1); end
+-
+-			%bedinfo and surface info
+-			md.mesh.elementonbed=ones(md.mesh.numberofelements2d,1);
+-			md.mesh.elementonsurface=ones(md.mesh.numberofelements2d,1);
+-			md.mesh.vertexonbed=ones(md.mesh.numberofvertices2d,1);
+-			md.mesh.vertexonsurface=ones(md.mesh.numberofvertices2d,1);
+-
+-			%elementstype
+-			if ~isnan(md.flowequation.element_equation)
+-				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
+-				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
+-				md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
+-				md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
+-				md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
+-			end	
+-
+-			%boundary conditions
+-			md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers);
+-			md.stressbalance.spcvy=project2d(md,md.stressbalance.spcvy,md.mesh.numberoflayers);
+-			md.stressbalance.spcvz=project2d(md,md.stressbalance.spcvz,md.mesh.numberoflayers);
+-			md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
+-			md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
+-			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
+-			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+-
+-			%materials
+-			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+-			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
+-			
+-			%damage: 
+-			md.damage.D=DepthAverage(md,md.damage.D);
+-
+-			%special for thermal modeling:
+-			md.basalforcings.melting_rate=project2d(md,md.basalforcings.melting_rate,1); 
+-			md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); %bedrock only gets geothermal flux
+-
+-			%update of connectivity matrix
+-			md.mesh.average_vertex_connectivity=25;
+-
+-			%Collapse the mesh
+-			nodes2d=md.mesh.numberofvertices2d;
+-			elements2d=md.mesh.numberofelements2d;
+-
+-			%parameters
+-			md.geometry.surface=project2d(md,md.geometry.surface,1);
+-			md.geometry.thickness=project2d(md,md.geometry.thickness,1);
+-			md.geometry.bed=project2d(md,md.geometry.bed,1);
+-			md.geometry.bathymetry=project2d(md,md.geometry.bathymetry,1);
+-			md.mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
+-			md.mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
+-			md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
+-			md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
+-
+-			%lat long
+-			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
+-			if numel(md.mesh.long)==md.mesh.numberofvertices, md.mesh.long=project2d(md,md.mesh.long,1); end
+-
+-			%Initialize with the 2d mesh
+-			md.mesh.x=md.mesh.x2d;
+-			md.mesh.y=md.mesh.y2d;
+-			md.mesh.z=zeros(size(md.mesh.x2d));
+-			md.mesh.numberofvertices=md.mesh.numberofvertices2d;
+-			md.mesh.numberofelements=md.mesh.numberofelements2d;
+-			md.mesh.elements=md.mesh.elements2d;
+-
+-			%Keep a trace of lower and upper nodes
+-			md.mesh.lowervertex=NaN;
+-			md.mesh.uppervertex=NaN;
+-			md.mesh.lowerelements=NaN;
+-			md.mesh.upperelements=NaN;
+-
+-			%Remove old mesh 
+-			md.mesh.x2d=NaN;
+-			md.mesh.y2d=NaN;
+-			md.mesh.elements2d=NaN;
+-			md.mesh.numberofelements2d=md.mesh.numberofelements;
+-			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
+-			md.mesh.numberoflayers=0;
+-
+-			%Update mesh type
+-			md.mesh.dimension=2;
+-		end % }}}
+-		function md2 = extract(md,area) % {{{
+-			%extract - extract a model according to an Argus contour or flag list
+-			%
+-			%   This routine extracts a submodel from a bigger model with respect to a given contour
+-			%   md must be followed by the corresponding exp file or flags list
+-			%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+-			%   If user wants every element outside the domain to be 
+-			%   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
+-			%   an empty string '' will be considered as an empty domain
+-			%   a string 'all' will be considered as the entire domain
+-			%
+-			%   Usage:
+-			%      md2=extract(md,area);
+-			%
+-			%   Examples:
+-			%      md2=extract(md,'Domain.exp');
+-			%
+-			%   See also: EXTRUDE, COLLAPSE
+-
+-			%copy model
+-			md1=md;
+-
+-			%some checks
+-			if ((nargin~=2) | (nargout~=1)),
+-				help extract
+-				error('extract error message: bad usage');
+-			end
+-
+-			%get elements that are inside area
+-			flag_elem=FlagElements(md1,area);
+-			if ~any(flag_elem),
+-				error('extracted model is empty');
+-			end
+-
+-			%kick out all elements with 3 dirichlets
+-			spc_elem=find(~flag_elem);
+-			spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
+-			flag=ones(md1.mesh.numberofvertices,1);
+-			flag(spc_node)=0;
+-			pos=find(sum(flag(md1.mesh.elements),2)==0);
+-			flag_elem(pos)=0;
+-
+-			%extracted elements and nodes lists
+-			pos_elem=find(flag_elem);
+-			pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
+-
+-			%keep track of some fields
+-			numberofvertices1=md1.mesh.numberofvertices;
+-			numberofelements1=md1.mesh.numberofelements;
+-			numberofvertices2=length(pos_node);
+-			numberofelements2=length(pos_elem);
+-			flag_node=zeros(numberofvertices1,1);
+-			flag_node(pos_node)=1;
+-
+-			%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
+-			Pelem=zeros(numberofelements1,1);
+-			Pelem(pos_elem)=[1:numberofelements2]';
+-			Pnode=zeros(numberofvertices1,1);
+-			Pnode(pos_node)=[1:numberofvertices2]';
+-
+-			%renumber the elements (some nodes won't exist anymore)
+-			elements_1=md1.mesh.elements;
+-			elements_2=elements_1(pos_elem,:);
+-			elements_2(:,1)=Pnode(elements_2(:,1));
+-			elements_2(:,2)=Pnode(elements_2(:,2));
+-			elements_2(:,3)=Pnode(elements_2(:,3));
+-			if md1.mesh.dimension==3,
+-				elements_2(:,4)=Pnode(elements_2(:,4));
+-				elements_2(:,5)=Pnode(elements_2(:,5));
+-				elements_2(:,6)=Pnode(elements_2(:,6));
+-			end
+-
+-			%OK, now create the new model!
+-
+-			%take every field from model
+-			md2=md1;
+-
+-			%automatically modify fields
+-
+-			%loop over model fields
+-			model_fields=fields(md1);
+-			for i=1:length(model_fields),
+-				%get field
+-				field=md1.(model_fields{i});
+-				fieldsize=size(field);
+-				if isobject(field), %recursive call
+-					object_fields=fields(md1.(model_fields{i}));
+-					for j=1:length(object_fields),
+-						%get field
+-						field=md1.(model_fields{i}).(object_fields{j});
+-						fieldsize=size(field);
+-						%size = number of nodes * n
+-						if fieldsize(1)==numberofvertices1
+-							md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
+-						elseif (fieldsize(1)==numberofvertices1+1)
+-							md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
+-						%size = number of elements * n
+-						elseif fieldsize(1)==numberofelements1
+-							md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
+-						end
+-					end
+-				else
+-					%size = number of nodes * n
+-					if fieldsize(1)==numberofvertices1
+-						md2.(model_fields{i})=field(pos_node,:);
+-					elseif (fieldsize(1)==numberofvertices1+1)
+-						md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
+-					%size = number of elements * n
+-					elseif fieldsize(1)==numberofelements1
+-						md2.(model_fields{i})=field(pos_elem,:);
+-					end
+-				end
+-			end
+-
+-			%modify some specific fields
+-
+-			%Mesh
+-			md2.mesh.numberofelements=numberofelements2;
+-			md2.mesh.numberofvertices=numberofvertices2;
+-			md2.mesh.elements=elements_2;
+-
+-			%mesh.uppervertex mesh.lowervertex
+-			if md1.mesh.dimension==3
+-				md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
+-				pos=find(~isnan(md2.mesh.uppervertex));
+-				md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
+-
+-				md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
+-				pos=find(~isnan(md2.mesh.lowervertex));
+-				md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
+-
+-				md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
+-				pos=find(~isnan(md2.mesh.upperelements));
+-				md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
+-
+-				md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
+-				pos=find(~isnan(md2.mesh.lowerelements));
+-				md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
+-			end
+-
+-			%Initial 2d mesh 
+-			if md1.mesh.dimension==3
+-				flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
+-				pos_elem_2d=find(flag_elem_2d);
+-				flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
+-				pos_node_2d=find(flag_node_2d);
+-
+-				md2.mesh.numberofelements2d=length(pos_elem_2d);
+-				md2.mesh.numberofvertices2d=length(pos_node_2d);
+-				md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
+-				md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
+-				md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
+-				md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
+-
+-				md2.mesh.x2d=md1.mesh.x(pos_node_2d);
+-				md2.mesh.y2d=md1.mesh.y(pos_node_2d);
+-			end
+-
+-			%Edges
+-			if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
+-				%renumber first two columns
+-				pos=find(md2.mesh.edges(:,4)~=-1);
+-				md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1));
+-				md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2));
+-				md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
+-				md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
+-				%remove edges when the 2 vertices are not in the domain.
+-				md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
+-				%Replace all zeros by -1 in the last two columns
+-				pos=find(md2.mesh.edges(:,3)==0);
+-				md2.mesh.edges(pos,3)=-1;
+-				pos=find(md2.mesh.edges(:,4)==0);
+-				md2.mesh.edges(pos,4)=-1;
+-				%Invert -1 on the third column with last column (Also invert first two columns!!)
+-				pos=find(md2.mesh.edges(:,3)==-1);
+-				md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
+-				md2.mesh.edges(pos,4)=-1;
+-				values=md2.mesh.edges(pos,2);
+-				md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
+-				md2.mesh.edges(pos,1)=values;
+-				%Finally remove edges that do not belong to any element
+-				pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
+-				md2.mesh.edges(pos,:)=[];
+-			end
+-
+-			%Penalties
+-			if ~isnan(md2.stressbalance.vertex_pairing),
+-				for i=1:size(md1.stressbalance.vertex_pairing,1);
+-					md2.stressbalance.vertex_pairing(i,:)=Pnode(md1.stressbalance.vertex_pairing(i,:));
+-				end
+-				md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing(find(md2.stressbalance.vertex_pairing(:,1)),:);
+-			end
+-			if ~isnan(md2.masstransport.vertex_pairing),
+-				for i=1:size(md1.masstransport.vertex_pairing,1);
+-					md2.masstransport.vertex_pairing(i,:)=Pnode(md1.masstransport.vertex_pairing(i,:));
+-				end
+-				md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing(find(md2.masstransport.vertex_pairing(:,1)),:);
+-			end
+-
+-			%recreate segments
+-			if md1.mesh.dimension==2
+-				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-				md2.mesh.segments=contourenvelope(md2);
+-				md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-			else
+-				%First do the connectivity for the contourenvelope in 2d
+-				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
+-				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
+-				md2.mesh.segments=contourenvelope(md2);
+-				md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-				md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
+-				%Then do it for 3d as usual
+-				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-			end
+-
+-			%Boundary conditions: Dirichlets on new boundary
+-			%Catch the elements that have not been extracted
+-			orphans_elem=find(~flag_elem);
+-			orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
+-			%Figure out which node are on the boundary between md2 and md1
+-			nodestoflag1=intersect(orphans_node,pos_node);
+-			nodestoflag2=Pnode(nodestoflag1);
+-			if numel(md1.stressbalance.spcvx)>1 & numel(md1.stressbalance.spcvy)>2 & numel(md1.stressbalance.spcvz)>2,
+-				if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
+-					md2.stressbalance.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
+-					md2.stressbalance.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
+-				else
+-					md2.stressbalance.spcvx(nodestoflag2)=NaN;
+-					md2.stressbalance.spcvy(nodestoflag2)=NaN;
+-					disp(' ')
+-					disp('!! extract warning: spc values should be checked !!')
+-					disp(' ')
+-				end
+-				%put 0 for vz
+-				md2.stressbalance.spcvz(nodestoflag2)=0;
+-			end
+-			if ~isnan(md1.thermal.spctemperature),
+-				md2.thermal.spctemperature(nodestoflag2,1)=1;
+-			end
+-
+-			%Results fields
+-			if isstruct(md1.results),
+-				md2.results=struct();
+-				solutionfields=fields(md1.results);
+-				for i=1:length(solutionfields),
+-					if isstruct(md1.results.(solutionfields{i}))
+-						%get subfields
+-						solutionsubfields=fields(md1.results.(solutionfields{i}));
+-						for j=1:length(solutionsubfields),
+-							field=md1.results.(solutionfields{i}).(solutionsubfields{j});
+-							if length(field)==numberofvertices1,
+-								md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
+-							elseif length(field)==numberofelements1,
+-								md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
+-							else
+-								md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
+-							end
+-						end
+-					else
+-						field=md1.results.(solutionfields{i});
+-						if length(field)==numberofvertices1,
+-							md2.results.(solutionfields{i})=field(pos_node);
+-						elseif length(field)==numberofelements1,
+-							md2.results.(solutionfields{i})=field(pos_elem);
+-						else
+-							md2.results.(solutionfields{i})=field;
+-						end
+-					end
+-				end
+-			end
+-
+-			%Keep track of pos_node and pos_elem
+-			md2.mesh.extractedvertices=pos_node;
+-			md2.mesh.extractedelements=pos_elem;
+-		end % }}}
+-		function md = extrude(md,varargin) % {{{
+-			%EXTRUDE - vertically extrude a 2d mesh
+-			%
+-			%   vertically extrude a 2d mesh and create corresponding 3d mesh.
+-			%   The vertical distribution can:
+-			%    - follow a polynomial law
+-			%    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
+-			%    - be discribed by a list of coefficients (between 0 and 1)
+-			%   
+-			%
+-			%   Usage:
+-			%      md=extrude(md,numlayers,extrusionexponent);
+-			%      md=extrude(md,numlayers,lowerexponent,upperexponent);
+-			%      md=extrude(md,listofcoefficients);
+-			%
+-			%   Example:
+-			%      md=extrude(md,8,3);
+-			%      md=extrude(md,8,3,2);
+-			%      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
+-			%
+-			%   See also: MODELEXTRACT, COLLAPSE
+-
+-			%some checks on list of arguments
+-			if ((nargin>4) | (nargin<2) | (nargout~=1)),
+-				help extrude;
+-				error('extrude error message');
+-			end
+-
+-			%Extrude the mesh
+-			if nargin==2, %list of coefficients
+-				clist=varargin{1};
+-				if any(clist<0) | any(clist>1),
+-					error('extrusioncoefficients must be between 0 and 1');
+-				end
+-				extrusionlist=sort(unique([clist(:);0;1]));
+-				numlayers=length(extrusionlist);
+-			elseif nargin==3, %one polynomial law
+-				if varargin{2}<=0,
+-					help extrude;
+-					error('extrusionexponent must be >=0');
+-				end
+-				numlayers=varargin{1};
+-				extrusionlist=((0:1:numlayers-1)/(numlayers-1)).^varargin{2};
+-			elseif nargin==4, %two polynomial laws
+-				numlayers=varargin{1};
+-				lowerexp=varargin{2};
+-				upperexp=varargin{3};
+-
+-				if varargin{2}<=0 | varargin{3}<=0,
+-					help extrude;
+-					error('lower and upper extrusionexponents must be >=0');
+-				end
+-
+-				lowerextrusionlist=[(0:2/(numlayers-1):1).^lowerexp]/2;
+-				upperextrusionlist=[(0:2/(numlayers-1):1).^upperexp]/2;
+-				extrusionlist=sort(unique([lowerextrusionlist 1-upperextrusionlist]));
+-
+-			end
+-
+-			if numlayers<2,
+-				error('number of layers should be at least 2');
+-			end
+-			if md.mesh.dimension==3,
+-				error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
+-			end
+-
+-			%Initialize with the 2d mesh
+-			x3d=[]; 
+-			y3d=[];
+-			z3d=[];  %the lower node is on the bed
+-			thickness3d=md.geometry.thickness; %thickness and bed for these nodes
+-			bed3d=md.geometry.bed;
+-
+-			%Create the new layers
+-			for i=1:numlayers,
+-				x3d=[x3d; md.mesh.x]; 
+-				y3d=[y3d; md.mesh.y];
+-				%nodes are distributed between bed and surface accordingly to the given exponent
+-				z3d=[z3d; bed3d+thickness3d*extrusionlist(i)]; 
+-			end
+-			number_nodes3d=size(x3d,1); %number of 3d nodes for the non extruded part of the mesh
+-
+-			%Extrude elements 
+-			elements3d=[];
+-			for i=1:numlayers-1,
+-				elements3d=[elements3d;[md.mesh.elements+(i-1)*md.mesh.numberofvertices md.mesh.elements+i*md.mesh.numberofvertices]]; %Create the elements of the 3d mesh for the non extruded part
+-			end
+-			number_el3d=size(elements3d,1); %number of 3d nodes for the non extruded part of the mesh
+-
+-			%Keep a trace of lower and upper nodes
+-			mesh.lowervertex=NaN*ones(number_nodes3d,1);
+-			mesh.uppervertex=NaN*ones(number_nodes3d,1);
+-			mesh.lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;
+-			mesh.uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;
+-			md.mesh.lowervertex=mesh.lowervertex;
+-			md.mesh.uppervertex=mesh.uppervertex;
+-
+-			%same for lower and upper elements
+-			mesh.lowerelements=NaN*ones(number_el3d,1);
+-			mesh.upperelements=NaN*ones(number_el3d,1);
+-			mesh.lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;
+-			mesh.upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;
+-			md.mesh.lowerelements=mesh.lowerelements;
+-			md.mesh.upperelements=mesh.upperelements;
+-
+-			%Save old mesh 
+-			md.mesh.x2d=md.mesh.x;
+-			md.mesh.y2d=md.mesh.y;
+-			md.mesh.elements2d=md.mesh.elements;
+-			md.mesh.numberofelements2d=md.mesh.numberofelements;
+-			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
+-
+-			%Update mesh type
+-			md.mesh.dimension=3;
+-
+-			%Build global 3d mesh 
+-			md.mesh.elements=elements3d;
+-			md.mesh.x=x3d;
+-			md.mesh.y=y3d;
+-			md.mesh.z=z3d;
+-			md.mesh.numberofelements=number_el3d;
+-			md.mesh.numberofvertices=number_nodes3d;
+-			md.mesh.numberoflayers=numlayers;
+-
+-			%Ok, now deal with the other fields from the 2d mesh:
+-
+-			%lat long
+-			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
+-			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
+-
+-			%drag coefficient is limited to nodes that are on the bedrock.
+-			md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
+-
+-			%p and q (same deal, except for element that are on the bedrock: )
+-			md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
+-			md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
+-
+-			%observations
+-			md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
+-			md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
+-			md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
+-			md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
+-			md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node');
+-			md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
+-			md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node');
+-
+-			%results
+-			if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end;
+-			if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end;
+-			if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end;
+-			if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
+-			if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
+-			if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
+-            if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node','layer',1);end;
+-
+-			%bedinfo and surface info
+-			md.mesh.elementonbed=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',1);
+-			md.mesh.elementonsurface=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',md.mesh.numberoflayers-1);
+-			md.mesh.vertexonbed=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
+-			md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
+-
+-			%elementstype
+-			if ~isnan(md.flowequation.element_equation)
+-				oldelements_type=md.flowequation.element_equation;
+-				md.flowequation.element_equation=zeros(number_el3d,1);
+-				md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element');
+-			end
+-
+-			%verticestype
+-			if ~isnan(md.flowequation.vertex_equation)
+-				oldvertices_type=md.flowequation.vertex_equation;
+-				md.flowequation.vertex_equation=zeros(number_nodes3d,1);
+-				md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
+-			end
+-			md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node');
+-			md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node');
+-			md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
+-
+-			%boundary conditions
+-			md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node');
+-			md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node');
+-			md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node');
+-			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+-			md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
+-			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
+-			md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node');
+-			md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
+-			md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
+-
+-			%connectivity
+-			md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
+-			md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
+-			for i=2:numlayers-1,
+-				md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
+-					=md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
+-			end
+-			md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
+-
+-			%materials
+-			md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
+-			md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
+-				
+-			%damage
+-			md.damage.D=project3d(md,'vector',md.damage.D,'type','node');
+-
+-			%parameters
+-			md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
+-			md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node');
+-			md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node');
+-			md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node');
+-			md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node');
+-			md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
+-			md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node');
+-			md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
+-			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node');
+-			md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
+-			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+-			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
+-			if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
+-			if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end
+-			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node');end
+-			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node');end
+-			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node');end
+-
+-			%Put lithostatic pressure if there is an existing pressure
+-			if ~isnan(md.initialization.pressure),
+-				md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
+-			end
+-
+-			%special for thermal modeling:
+-			md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1); 
+-			if ~isnan(md.basalforcings.geothermalflux)
+-				md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
+-			end
+-
+-			%increase connectivity if less than 25:
+-			if md.mesh.average_vertex_connectivity<=25,
+-				md.mesh.average_vertex_connectivity=100;
+-			end
+-			end % }}}
+-		function md = structtomodel(md,structmd) % {{{
+-
+-			if ~isstruct(structmd) error('input model is not a structure'); end
+-
+-			%loaded model is a struct, initialize output and recover all fields
+-			md = structtoobj(model,structmd);
+-
+-			%Old field now classes
+-			if (isfield(structmd,'timestepping') & isnumeric(md.timestepping)), md.timestepping=timestepping(); end
+-			if (isfield(structmd,'mask') & isnumeric(md.mask)),md.mask=mask(); end
+-
+-			%Field name change
+-			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
+-			if isfield(structmd,'p'), md.friction.p=structmd.p; end
+-			if isfield(structmd,'q'), md.friction.q=structmd.p; end
+-			if isfield(structmd,'melting'), md.basalforcings.melting_rate=structmd.melting; end
+-			if isfield(structmd,'melting_rate'), md.basalforcings.melting_rate=structmd.melting_rate; end
+-			if isfield(structmd,'accumulation'), md.surfaceforcings.mass_balance=structmd.accumulation; end
+-			if isfield(structmd,'numberofgrids'), md.mesh.numberofvertices=structmd.numberofgrids; end
+-			if isfield(structmd,'numberofgrids2d'), md.mesh.numberofvertices2d=structmd.numberofgrids2d; end
+-			if isfield(structmd,'uppergrids'), md.mesh.uppervertex=structmd.uppergrids; end
+-			if isfield(structmd,'lowergrids'), md.mesh.lowervertex=structmd.lowergrids; end
+-			if isfield(structmd,'gridonbed'), md.mesh.vertexonbed=structmd.gridonbed; end
+-			if isfield(structmd,'gridonsurface'), md.mesh.vertexonsurface=structmd.gridonsurface; end
+-			if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
+-			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
+-			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.toolkits=structmd.petscoptions; end
+-			if isfield(structmd,'g'), md.constants.g=structmd.g; end
+-			if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
+-			if isfield(structmd,'surface_mass_balance'), md.surfaceforcings.mass_balance=structmd.surface_mass_balance; end
+-			if isfield(structmd,'basal_melting_rate'), md.basalforcings.melting_rate=structmd.basal_melting_rate; end
+-			if isfield(structmd,'basal_melting_rate_correction'), md.basalforcings.melting_rate_correction=structmd.basal_melting_rate_correction; end
+-			if isfield(structmd,'geothermalflux'), md.basalforcings.geothermalflux=structmd.geothermalflux; end
+-			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
+-			if isfield(structmd,'drag_coefficient'), md.friction.coefficient=structmd.drag_coefficient; end
+-			if isfield(structmd,'drag_p'), md.friction.p=structmd.drag_p; end
+-			if isfield(structmd,'drag_q'), md.friction.q=structmd.drag_q; end
+-			if isfield(structmd,'riftproperties'), %old implementation
+-				md.rifts=rifts();
+-				md.rifts.riftproperties=structmd.riftproperties; 
+-				md.rifts.riftstruct=structmd.rifts;
+-				md.rifts.riftproperties=structmd.riftinfo;
+-			end
+-			if isfield(structmd,'bamg'), md.private.bamg=structmd.bamg; end
+-			if isfield(structmd,'lowmem'), md.settings.lowmem=structmd.lowmem; end
+-			if isfield(structmd,'io_gather'), md.settings.io_gather=structmd.io_gather; end
+-			if isfield(structmd,'spcwatercolumn'), md.hydrology.spcwatercolumn=structmd.spcwatercolumn; end
+-			if isfield(structmd,'hydro_n'), md.hydrology.n=structmd.hydro_n; end
+-			if isfield(structmd,'hydro_p'), md.hydrology.p=structmd.hydro_p; end
+-			if isfield(structmd,'hydro_q'), md.hydrology.q=structmd.hydro_q; end
+-			if isfield(structmd,'hydro_CR'), md.hydrology.CR=structmd.hydro_CR; end
+-			if isfield(structmd,'hydro_kn'), md.hydrology.kn=structmd.hydro_kn; end
+-			if isfield(structmd,'spctemperature'), md.thermal.spctemperature=structmd.spctemperature; end
+-			if isfield(structmd,'min_thermal_constraints'), md.thermal.penalty_threshold=structmd.min_thermal_constraints; end
+-			if isfield(structmd,'artificial_diffusivity'), md.thermal.stabilization=structmd.artificial_diffusivity; end
+-			if isfield(structmd,'max_nonlinear_iterations'), md.thermal.maxiter=structmd.max_nonlinear_iterations; end
+-			if isfield(structmd,'stabilize_constraints'), md.thermal.penalty_lock=structmd.stabilize_constraints; end
+-			if isfield(structmd,'penalty_offset'), md.thermal.penalty_factor=structmd.penalty_offset; end
+-			if isfield(structmd,'name'), md.miscellaneous.name=structmd.name; end
+-			if isfield(structmd,'notes'), md.miscellaneous.notes=structmd.notes; end
+-			if isfield(structmd,'dummy'), md.miscellaneous.dummy=structmd.dummy; end
+-			if isfield(structmd,'dt'), md.timestepping.time_step=structmd.dt; end
+-			if isfield(structmd,'ndt'), md.timestepping.final_time=structmd.ndt; end
+-			if isfield(structmd,'time_adapt'), md.timestepping.time_adapt=structmd.time_adapt; end
+-			if isfield(structmd,'cfl_coefficient'), md.timestepping.cfl_coefficient=structmd.cfl_coefficient; end
+-			if isfield(structmd,'spcthickness'), md.masstransport.spcthickness=structmd.spcthickness; end
+-			if isfield(structmd,'artificial_diffusivity'), md.masstransport.stabilization=structmd.artificial_diffusivity; end
+-			if isfield(structmd,'hydrostatic_adjustment'), md.masstransport.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
+-			if isfield(structmd,'penalties'), md.masstransport.vertex_pairing=structmd.penalties; end
+-			if isfield(structmd,'penalty_offset'), md.masstransport.penalty_factor=structmd.penalty_offset; end
+-			if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end
+-			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
+-			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
+-			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
+-			if isfield(structmd,'rheology_Z'), md.damage.D=(1-structmd.rheology_Z); end
+-			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+-			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+-			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+-			if isfield(structmd,'isSIA'), md.flowequation.isSIA=structmd.isSIA; end
+-			if isfield(structmd,'isFS'), md.flowequation.isFS=structmd.isFS; end
+-			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
+-			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
+-			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+-			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
+-			if isfield(structmd,'isdiagnostic'), md.transient.isstressbalance=structmd.isdiagnostic; end
+-			if isfield(structmd,'isprognostic'), md.transient.ismasstransport=structmd.isprognostic; end
+-			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+-			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+-			if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
+-			if isfield(structmd,'nsteps'), md.inversion.nsteps=structmd.nsteps; end
+-			if isfield(structmd,'maxiter_per_step'), md.inversion.maxiter_per_step=structmd.maxiter_per_step; end
+-			if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
+-			if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
+-			if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
+-			if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
+-			if isfield(structmd,'vel_obs'), md.inversion.vel_obs=structmd.vel_obs; end
+-			if isfield(structmd,'thickness_obs'), md.inversion.thickness_obs=structmd.thickness_obs; end
+-			if isfield(structmd,'vx'), md.initialization.vx=structmd.vx; end
+-			if isfield(structmd,'vy'), md.initialization.vy=structmd.vy; end
+-			if isfield(structmd,'vz'), md.initialization.vz=structmd.vz; end
+-			if isfield(structmd,'vel'), md.initialization.vel=structmd.vel; end
+-			if isfield(structmd,'pressure'), md.initialization.pressure=structmd.pressure; end
+-			if isfield(structmd,'temperature'), md.initialization.temperature=structmd.temperature; end
+-			if isfield(structmd,'waterfraction'), md.initialization.waterfraction=structmd.waterfraction; end
+-			if isfield(structmd,'watercolumn'), md.initialization.watercolumn=structmd.watercolumn; end
+-			if isfield(structmd,'surface'), md.geometry.surface=structmd.surface; end
+-			if isfield(structmd,'bed'), md.geometry.bed=structmd.bed; end
+-			if isfield(structmd,'thickness'), md.geometry.thickness=structmd.thickness; end
+-			if isfield(structmd,'bathymetry'), md.geometry.bathymetry=structmd.bathymetry; end
+-			if isfield(structmd,'thickness_coeff'), md.geometry.hydrostatic_ratio=structmd.thickness_coeff; end
+-			if isfield(structmd,'connectivity'), md.mesh.average_vertex_connectivity=structmd.connectivity; end
+-			if isfield(structmd,'extractednodes'), md.mesh.extractedvertices=structmd.extractednodes; end
+-			if isfield(structmd,'extractedelements'), md.mesh.extractedelements=structmd.extractedelements; end
+-			if isfield(structmd,'nodeonboundary'), md.mesh.vertexonboundary=structmd.nodeonboundary; end
+-			if isfield(structmd,'hemisphere'), md.mesh.hemisphere=structmd.hemisphere; end
+-			if isfield(structmd,'lat'), md.mesh.lat=structmd.lat; end
+-			if isfield(structmd,'long'), md.mesh.long=structmd.long; end
+-			if isfield(structmd,'segments'), md.mesh.segments=structmd.segments; end
+-			if isfield(structmd,'segmentmarkers'), md.mesh.segmentmarkers=structmd.segmentmarkers; end
+-			if isfield(structmd,'dim'), md.mesh.dimension=structmd.dim; end
+-			if isfield(structmd,'numlayers'), md.mesh.numberoflayers=structmd.numlayers; end
+-			if isfield(structmd,'numberofelements'), md.mesh.numberofelements=structmd.numberofelements; end
+-			if isfield(structmd,'numberofvertices'), md.mesh.numberofvertices=structmd.numberofvertices; end
+-			if isfield(structmd,'numberofnodes'), md.mesh.numberofvertices=structmd.numberofnodes; end
+-			if isfield(structmd,'numberofedges'), md.mesh.numberofedges=structmd.numberofedges; end
+-			if isfield(structmd,'numberofelements2d'), md.mesh.numberofelements2d=structmd.numberofelements2d; end
+-			if isfield(structmd,'numberofnodes2d'), md.mesh.numberofvertices2d=structmd.numberofnodes2d; end
+-			if isfield(structmd,'nodeconnectivity'), md.mesh.vertexconnectivity=structmd.nodeconnectivity; end
+-			if isfield(structmd,'elementconnectivity'), md.mesh.elementconnectivity=structmd.elementconnectivity; end
+-			if isfield(structmd,'uppernodes'), md.mesh.uppervertex=structmd.uppernodes; end
+-			if isfield(structmd,'lowernodes'), md.mesh.lowervertex=structmd.lowernodes; end
+-			if isfield(structmd,'upperelements'), md.mesh.upperelements=structmd.upperelements; end
+-			if isfield(structmd,'lowerelements'), md.mesh.lowerelements=structmd.lowerelements; end
+-			if isfield(structmd,'elementonbed'), md.mesh.elementonbed=structmd.elementonbed; end
+-			if isfield(structmd,'elementonsurface'), md.mesh.elementonsurface=structmd.elementonsurface; end
+-			if isfield(structmd,'nodeonsurface'), md.mesh.vertexonsurface=structmd.nodeonsurface; end
+-			if isfield(structmd,'nodeonbed'), md.mesh.vertexonbed=structmd.nodeonbed; end
+-			if isfield(structmd,'elements2d'), md.mesh.elements2d=structmd.elements2d; end
+-			if isfield(structmd,'y2d'), md.mesh.y2d=structmd.y2d; end
+-			if isfield(structmd,'x2d'), md.mesh.x2d=structmd.x2d; end
+-			if isfield(structmd,'elements'), md.mesh.elements=structmd.elements; end
+-			if isfield(structmd,'edges'), 
+-				md.mesh.edges=structmd.edges; 
+-				md.mesh.edges(isnan(md.mesh.edges))=-1;
+-			end
+-			if isfield(structmd,'y'), md.mesh.y=structmd.y; end
+-			if isfield(structmd,'x'), md.mesh.x=structmd.x; end
+-			if isfield(structmd,'z'), md.mesh.z=structmd.z; end
+-			if isfield(structmd,'mask'), md.flaim.criterion=structmd.mask; end
+-			if isfield(structmd,'diagnostic_ref'), md.stressbalance.referential=structmd.diagnostic_ref; end
+-			if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
+-			if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
+-
+-			%Field changes
+-			if (isfield(structmd,'type') & ischar(structmd.type)), 
+-				if strcmpi(structmd.type,'2d'), md.mesh.dimension=2; end
+-				if strcmpi(structmd.type,'3d'), md.mesh.dimension=3; end
+-			end
+-			if isnumeric(md.verbose),
+-				md.verbose=verbose;
+-			end
+-
+-			if isfield(structmd,'spcvelocity'), 
+-				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(structmd.spcvelocity(:,1)); md.stressbalance.spcvx(pos)=structmd.spcvelocity(pos,4); 
+-				pos=find(structmd.spcvelocity(:,2)); md.stressbalance.spcvy(pos)=structmd.spcvelocity(pos,5); 
+-				pos=find(structmd.spcvelocity(:,3)); md.stressbalance.spcvz(pos)=structmd.spcvelocity(pos,6); 
+-			end
+-			if isfield(structmd,'spcvx'), 
+-				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvx)); md.stressbalance.spcvx(pos)=structmd.spcvx(pos); 
+-			end
+-			if isfield(structmd,'spcvy'),
+-				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvy)); md.stressbalance.spcvy(pos)=structmd.spcvy(pos);     
+-			end
+-			if isfield(structmd,'spcvz'),
+-				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				pos=find(~isnan(structmd.spcvz)); md.stressbalance.spcvz(pos)=structmd.spcvz(pos);     
+-			end
+-			if isfield(structmd,'pressureload'),
+-				if ~isempty(structmd.pressureload) & ismember(structmd.pressureload(end,end),[118 119 120]),
+-					pos=find(structmd.pressureload(:,end)==120); md.stressbalance.icefront(pos,end)=0;
+-					pos=find(structmd.pressureload(:,end)==118); md.stressbalance.icefront(pos,end)=1;
+-					pos=find(structmd.pressureload(:,end)==119); md.stressbalance.icefront(pos,end)=2;
+-				end
+-			end
+-			if isfield(structmd,'elements_type') & structmd.elements_type(end,end)>50,
+-				pos=find(structmd.elements_type==59); md.flowequation.element_equation(pos,end)=0;
+-				pos=find(structmd.elements_type==55); md.flowequation.element_equation(pos,end)=1;
+-				pos=find(structmd.elements_type==56); md.flowequation.element_equation(pos,end)=2;
+-				pos=find(structmd.elements_type==60); md.flowequation.element_equation(pos,end)=3;
+-				pos=find(structmd.elements_type==62); md.flowequation.element_equation(pos,end)=4;
+-				pos=find(structmd.elements_type==57); md.flowequation.element_equation(pos,end)=5;
+-				pos=find(structmd.elements_type==58); md.flowequation.element_equation(pos,end)=6;
+-				pos=find(structmd.elements_type==61); md.flowequation.element_equation(pos,end)=7;
+-			end
+-			if isfield(structmd,'vertices_type') & structmd.vertices_type(end,end)>50,
+-				pos=find(structmd.vertices_type==59); md.flowequation.vertex_equation(pos,end)=0;
+-				pos=find(structmd.vertices_type==55); md.flowequation.vertex_equation(pos,end)=1;
+-				pos=find(structmd.vertices_type==56); md.flowequation.vertex_equation(pos,end)=2;
+-				pos=find(structmd.vertices_type==60); md.flowequation.vertex_equation(pos,end)=3;
+-				pos=find(structmd.vertices_type==62); md.flowequation.vertex_equation(pos,end)=4;
+-				pos=find(structmd.vertices_type==57); md.flowequation.vertex_equation(pos,end)=5;
+-				pos=find(structmd.vertices_type==58); md.flowequation.vertex_equation(pos,end)=6;
+-				pos=find(structmd.vertices_type==61); md.flowequation.vertex_equation(pos,end)=7;
+-			end
+-			if isfield(structmd,'rheology_law') & isnumeric(structmd.rheology_law),
+-				if (structmd.rheology_law==272), md.materials.rheology_law='None';      end
+-				if (structmd.rheology_law==368), md.materials.rheology_law='Paterson';  end
+-				if (structmd.rheology_law==369), md.materials.rheology_law='Arrhenius'; end
+-			end
+-			if isfield(structmd,'groundingline_migration') & isnumeric(structmd.groundingline_migration),
+-				if (structmd.groundingline_migration==272), md.groundingline.migration='None';      end
+-				if (structmd.groundingline_migration==273), md.groundingline.migration='AgressiveMigration';  end
+-				if (structmd.groundingline_migration==274), md.groundingline.migration='SoftMigration'; end
+-			end
+-			if isfield(structmd,'control_type') & isnumeric(structmd.control_type),
+-				if (structmd.control_type==143), md.inversion.control_parameters={'FrictionCoefficient'}; end
+-				if (structmd.control_type==190), md.inversion.control_parameters={'RheologyBbar'}; end
+-				if (structmd.control_type==147), md.inversion.control_parameters={'Thickeningrate'}; end
+-			end
+-			if isfield(structmd,'cm_responses') & ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
+-				pos=find(structmd.cm_responses==166); md.inversion.cost_functions(pos)=101;
+-				pos=find(structmd.cm_responses==167); md.inversion.cost_functions(pos)=102;
+-				pos=find(structmd.cm_responses==168); md.inversion.cost_functions(pos)=103;
+-				pos=find(structmd.cm_responses==169); md.inversion.cost_functions(pos)=104;
+-				pos=find(structmd.cm_responses==170); md.inversion.cost_functions(pos)=105;
+-				pos=find(structmd.cm_responses==165); md.inversion.cost_functions(pos)=201;
+-				pos=find(structmd.cm_responses==389); md.inversion.cost_functions(pos)=501;
+-				pos=find(structmd.cm_responses==388); md.inversion.cost_functions(pos)=502;
+-				pos=find(structmd.cm_responses==382); md.inversion.cost_functions(pos)=503;
+-			end
+-
+-			if isfield(structmd,'artificial_diffusivity') & structmd.artificial_diffusivity==2,
+-					md.thermal.stabilization=2;
+-					md.masstransport.stabilization=1;
+-					md.balancethickness.stabilization=1;
+-			end
+-			if isnumeric(md.masstransport.hydrostatic_adjustment)
+-				if md.masstransport.hydrostatic_adjustment==269,
+-					md.masstransport.hydrostatic_adjustment='Incremental';
+-				else
+-					md.masstransport.hydrostatic_adjustment='Absolute';
+-				end
+-			end
+-
+-			%New fields
+-			if ~isfield(structmd,'upperelements');
+-				md.mesh.upperelements=transpose(1:md.mesh.numberofelements)+md.mesh.numberofelements2d;
+-				md.mesh.upperelements(end-md.mesh.numberofelements2d+1:end)=NaN;
+-			end
+-			if ~isfield(structmd,'lowerelements');
+-				md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
+-				md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
+-			end
+-			if ~isfield(structmd,'diagnostic_ref');
+-				md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
+-			end
+-			if ~isfield(structmd,'loadingforce');
+-				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
+-			end
+-
+-			%2013 August 9
+-			if isfield(structmd,'prognostic') & isa(structmd.prognostic,'prognostic'),
+-				disp('Recovering old prognostic class');
+-				md.masstransport=masstransport(structmd.prognostic);
+-			end
+-			%2013 August 9
+-			if isfield(structmd,'diagnostic') & (isa(structmd.diagnostic,'diagnostic') || isa(structmd.diagnostic,'stressbalance')),
+-				disp('Recovering old diagnostic class');
+-				md.stressbalance=stressbalance(structmd.diagnostic);
+-			end
+-		end% }}}
+-		function md = setdefaultparameters(md) % {{{
+-
+-			%initialize subclasses
+-			md.mesh             = mesh();
+-			md.mask             = mask();
+-			md.constants        = constants();
+-			md.geometry         = geometry();
+-			md.initialization   = initialization();
+-			md.surfaceforcings  = surfaceforcings();
+-			md.basalforcings    = basalforcings();
+-			md.friction         = friction();
+-			md.rifts            = rifts();
+-			md.timestepping     = timestepping();
+-			md.groundingline    = groundingline();
+-			md.materials        = matice();
+-			md.damage           = damage();
+-			md.flowequation     = flowequation();
+-			md.debug            = debug();
+-			md.verbose          = verbose();
+-			md.settings         = settings();
+-			md.toolkits         = toolkits();
+-			md.cluster          = generic();
+-			md.balancethickness = balancethickness();
+-			md.stressbalance       = stressbalance();
+-			md.hydrology        = hydrologyshreve();
+-			md.masstransport       = masstransport();
+-			md.thermal          = thermal();
+-			md.steadystate      = steadystate();
+-			md.transient        = transient();
+-			md.gia              = gia();
+-			md.autodiff         = autodiff();
+-			md.flaim            = flaim();
+-			md.inversion        = inversion();
+-			md.qmu              = qmu();
+-			md.radaroverlay     = radaroverlay();
+-			md.results          = struct();
+-			md.miscellaneous    = miscellaneous();
+-			md.private          = private();
+-		end
+-		%}}}
+-		function disp(obj) % {{{
+-			disp(sprintf('%19s: %-22s -- %s','mesh'            ,['[1x1 ' class(obj.mesh) ']'],'mesh properties'));
+-			disp(sprintf('%19s: %-22s -- %s','mask'            ,['[1x1 ' class(obj.mask) ']'],'defines grounded and floating elements'));
+-			disp(sprintf('%19s: %-22s -- %s','geometry'        ,['[1x1 ' class(obj.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...'));
+-			disp(sprintf('%19s: %-22s -- %s','constants'       ,['[1x1 ' class(obj.constants) ']'],'physical constants'));
+-			disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(obj.surfaceforcings) ']'],'surface forcings'));
+-			disp(sprintf('%19s: %-22s -- %s','basalforcings'   ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings'));
+-			disp(sprintf('%19s: %-22s -- %s','materials'       ,['[1x1 ' class(obj.materials) ']'],'material properties'));
+-			disp(sprintf('%19s: %-22s -- %s','damage'          ,['[1x1 ' class(obj.damage) ']'],'damage propagation laws'));
+-			disp(sprintf('%19s: %-22s -- %s','friction'        ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties'));
+-			disp(sprintf('%19s: %-22s -- %s','flowequation'    ,['[1x1 ' class(obj.flowequation) ']'],'flow equations'));
+-			disp(sprintf('%19s: %-22s -- %s','timestepping'    ,['[1x1 ' class(obj.timestepping) ']'],'time stepping for transient models'));
+-			disp(sprintf('%19s: %-22s -- %s','initialization'  ,['[1x1 ' class(obj.initialization) ']'],'initial guess/state'));
+-			disp(sprintf('%19s: %-22s -- %s','rifts'           ,['[1x1 ' class(obj.rifts) ']'],'rifts properties'));
+-			disp(sprintf('%19s: %-22s -- %s','debug'           ,['[1x1 ' class(obj.debug) ']'],'debugging tools (valgrind, gprof)'));
+-			disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
+-			disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
+-			disp(sprintf('%19s: %-22s -- %s','toolkits'          ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
+-			disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
+-			disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
+-			disp(sprintf('%19s: %-22s -- %s','stressbalance'      ,['[1x1 ' class(obj.stressbalance) ']'],'parameters for stressbalance solution'));
+-			disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
+-			disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
+-			disp(sprintf('%19s: %-22s -- %s','masstransport'      ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
+-			disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
+-			disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
+-			disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
+-			disp(sprintf('%19s: %-22s -- %s','gia'       ,['[1x1 ' class(obj.gia) ']'],'parameters for gia solution'));
+-			disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(obj.autodiff) ']'],'automatic differentiation parameters'));
+-			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+-			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+-			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
+-			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+-			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+-			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
+-		end % }}}
+-		function memory(obj) % {{{
+-
+-		disp(sprintf('\nMemory imprint:\n'));
+-
+-		fields=properties('model');
+-		mem=0;
+-
+-		for i=1:length(fields),
+-			field=obj.(fields{i});
+-			s=whos('field'); 
+-			mem=mem+s.bytes/1e6;
+-			disp(sprintf('%19s: %6.2f Mb',fields{i},s.bytes/1e6));
+-		end
+-		disp(sprintf('%19s--%10s','--------------','--------------'));
+-		disp(sprintf('%19s: %g Mb','Total',mem));
+-		end % }}}
+-		function netcdf(obj,filename) % {{{
+-		%NETCDF - save model as netcdf
+-		%
+-		%   Usage:
+-		%      netcdf(md,filename)
+-		%
+-		%   Example:
+-		%      netcdf(md,'model.nc');
+-
+-		disp('Saving model as NetCDF');
+-		%1. Create NetCDF file
+-		ncid=netcdf.create(filename,'CLOBBER');
+-		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4');
+-		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);
+-		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER'));
+-		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now));
+-
+-		%Preallocate variable id, needed to write variables in netcdf file
+-		var_id=zeros(1000,1);%preallocate
+-
+-		for step=1:2,
+-			counter=0;
+-			[var_id,counter]=structtonc(ncid,'md',obj,0,var_id,counter,step);
+-			if step==1, netcdf.endDef(ncid); end
+-		end
+-
+-		if counter>1000,
+-			warning(['preallocation of var_id need to be updated from ' num2str(1000) ' to ' num2str(counter)]);
+-		end
+-
+-		netcdf.close(ncid)
+-		end % }}}
+-		function xylim(obj) % {{{
+-
+-			xlim([min(obj.mesh.x) max(obj.mesh.x)]);
+-			ylim([min(obj.mesh.y) max(obj.mesh.y)])
+-		end % }}}
+-		function md=upload(md) % {{{
+-		%the goal of this routine is to upload the model onto a server, and to empty it.
+-		%So first, save the model with a unique name and upload the file to the server: 
+-		random_part=fix(rand(1)*10000);
+-		id=[md.miscellaneous.name '-' regexprep(datestr(now),'[^\w'']','') '-' num2str(random_part)  '-' getenv('USER') '-' oshostname() '.upload']; 
+-		eval(['save ' id ' md']);
+-
+-		%Now, upload the file: 
+-		issmscpout(md.settings.upload_server,md.settings.upload_path,md.settings.upload_login,md.settings.upload_port,{id},1);
+-
+-		%Now, empty this model of everything except settings, and record name of file we just uploaded!
+-		settings_back=md.settings;
+-		md=model();
+-		md.settings=settings_back;
+-		md.settings.upload_filename=id;
+-
+-		%get locally rid of file that was uploaded
+-		eval(['delete ' id]);
+-
+-		end % }}}
+-		function md=download(md) % {{{
+-
+-		%the goal of this routine is to download the internals of the current model from a server, because 
+-		%this model is empty, except for the settings which tell us where to go and find this model!
+-
+-		%Download the file: 
+-		issmscpin(md.settings.upload_server, md.settings.upload_login, md.settings.upload_port, md.settings.upload_path, {md.settings.upload_filename});
+-
+-		name=md.settings.upload_filename;
+-
+-		%Now, load this model: 
+-		md=loadmodel(md.settings.upload_filename);
+-
+-		%get locally rid of file that was downloaded
+-		eval(['delete ' name]);
+-
+-		end % }}}
+-	end
+- end
+Index: ../trunk-jpl/src/m/classes/model/planet.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/planet.m	(revision 16286)
++++ ../trunk-jpl/src/m/classes/model/planet.m	(revision 16287)
+@@ -1,59 +0,0 @@
+-%PLANET class definition
+-%
+-%   Usage:
+-%      md = planet(varargin)
+-
+-classdef planet < model
+-    properties (SetAccess=public) %Planet fields
+-	 end
+-	 methods
+-		 function md = planet(varargin) % {{{
+-
+-			 switch nargin
+-				 case 0
+-					 md=setdefaultparameters(md);
+-				 otherwise
+-					 error('planet constructor error message: 0 of 1 argument only in input.');
+-				 end
+-		 end
+-		 %}}}
+-		 function md = setdefaultparameters(md) % {{{
+-
+-			 %initialize subclasses
+-			 md.mesh             = planetmesh();
+-			 md.mask             = mask();
+-			 md.constants        = constants();
+-			 md.geometry         = geometry();
+-			 md.initialization   = initialization();
+-			 md.surfaceforcings  = surfaceforcings();
+-			 md.basalforcings    = basalforcings();
+-			 md.friction         = friction();
+-			 md.rifts            = rifts();
+-			 md.timestepping     = timestepping();
+-			 md.groundingline    = groundingline();
+-			 md.materials        = materials();
+-			 md.flowequation     = flowequation();
+-			 md.debug            = debug();
+-			 md.verbose          = verbose('solution',true,'qmu',true,'control',true);
+-			 md.settings         = settings();
+-			 md.solver           = solver();
+-			 md.cluster          = generic();
+-			 md.balancethickness = balancethickness();
+-			 md.stressbalance       = stressbalance();
+-			 md.hydrology        = hydrology();
+-			 md.masstransport       = masstransport();
+-			 md.thermal          = thermal();
+-			 md.steadystate      = steadystate();
+-			 md.transient        = transient();
+-			 md.autodiff         = autodiff();
+-			 md.flaim            = flaim();
+-			 md.inversion        = inversion();
+-			 md.qmu              = qmu();
+-			 md.radaroverlay     = radaroverlay();
+-			 md.results          = struct();
+-			 md.miscellaneous    = miscellaneous();
+-			 md.private          = private();
+-		 end
+-		 %}}}
+-	 end
+- end
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 16286)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 16287)
+@@ -1,677 +0,0 @@
+-#module imports {{{
+-import numpy
+-import copy
+-import sys
+-from mesh import mesh
+-from mask import mask
+-from geometry import geometry
+-from constants import constants
+-from surfaceforcings import surfaceforcings
+-from basalforcings import basalforcings
+-from matice import matice
+-from damage import damage
+-from friction import friction
+-from flowequation import flowequation
+-from timestepping import timestepping
+-from initialization import initialization
+-from rifts import rifts
+-from debug import debug
+-from verbose import verbose
+-from settings import settings
+-from toolkits import toolkits
+-from generic import generic
+-from balancethickness import balancethickness
+-from stressbalance import stressbalance
+-from groundingline import groundingline
+-from hydrologyshreve import hydrologyshreve
+-from masstransport import masstransport
+-from thermal import thermal
+-from steadystate import steadystate
+-from transient import transient
+-from gia import gia
+-from autodiff import autodiff
+-from flaim import flaim
+-from inversion import inversion
+-from qmu import qmu
+-from results import results
+-from radaroverlay import radaroverlay
+-from miscellaneous import miscellaneous
+-from private import private
+-from EnumDefinitions import *
+-from mumpsoptions import *
+-from iluasmoptions import *
+-from project3d import *
+-from FlagElements import *
+-from NodeConnectivity import *
+-from ElementConnectivity import *
+-from contourenvelope import *
+-from PythonFuncs import *
+-#}}}
+-
+-class model(object):
+-	#properties
+-	def __init__(self):#{{{
+-		self.mesh             = mesh()
+-		self.mask             = mask()
+-		self.geometry         = geometry()
+-		self.constants        = constants()
+-		self.surfaceforcings  = surfaceforcings()
+-		self.basalforcings    = basalforcings()
+-		self.materials        = matice()
+-		self.damage           = damage()
+-		self.friction         = friction()
+-		self.flowequation     = flowequation()
+-		self.timestepping     = timestepping()
+-		self.initialization   = initialization()
+-		self.rifts            = rifts()
+-
+-		self.debug            = debug()
+-		self.verbose          = verbose()
+-		self.settings         = settings()
+-		self.toolkits         = toolkits()
+-		self.cluster          = generic()
+-
+-		self.balancethickness = balancethickness()
+-		self.stressbalance       = stressbalance()
+-		self.groundingline    = groundingline()
+-		self.hydrology        = hydrologyshreve()
+-		self.masstransport       = masstransport()
+-		self.thermal          = thermal()
+-		self.steadystate      = steadystate()
+-		self.transient        = transient()
+-		self.gia              = gia()
+-
+-		self.autodiff         = autodiff()
+-		self.flaim            = flaim()
+-		self.inversion        = inversion()
+-		self.qmu              = qmu()
+-
+-		self.results          = results()
+-		self.radaroverlay     = radaroverlay()
+-		self.miscellaneous    = miscellaneous()
+-		self.private          = private()
+-		#}}}
+-	def properties(self):    # {{{
+-		# ordered list of properties since vars(self) is random
+-		return ['mesh',\
+-		        'mask',\
+-		        'geometry',\
+-		        'constants',\
+-		        'surfaceforcings',\
+-		        'basalforcings',\
+-		        'materials',\
+-		        'damage',\
+-		        'friction',\
+-		        'flowequation',\
+-		        'timestepping',\
+-		        'initialization',\
+-		        'rifts',\
+-		        'debug',\
+-		        'verbose',\
+-		        'settings',\
+-		        'toolkits',\
+-		        'cluster',\
+-		        'balancethickness',\
+-		        'stressbalance',\
+-		        'groundingline',\
+-		        'hydrology',\
+-		        'masstransport',\
+-		        'thermal',\
+-		        'steadystate',\
+-		        'transient',\
+-				  'gia',\
+-		        'autodiff',\
+-		        'flaim',\
+-		        'inversion',\
+-		        'qmu',\
+-		        'results',\
+-		        'radaroverlay',\
+-		        'miscellaneous',\
+-		        'private']
+-	# }}}
+-	def __repr__(obj): #{{{
+-		#print "Here %s the number: %d" % ("is", 37)
+-		string="%19s: %-22s -- %s" % ("mesh","[%s,%s]" % ("1x1",obj.mesh.__class__.__name__),"mesh properties")
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("mask","[%s,%s]" % ("1x1",obj.mask.__class__.__name__),"defines grounded and floating elements"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("geometry","[%s,%s]" % ("1x1",obj.geometry.__class__.__name__),"surface elevation, bedrock topography, ice thickness,..."))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("constants","[%s,%s]" % ("1x1",obj.constants.__class__.__name__),"physical constants"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("surfaceforcings","[%s,%s]" % ("1x1",obj.surfaceforcings.__class__.__name__),"surface forcings"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("basalforcings","[%s,%s]" % ("1x1",obj.basalforcings.__class__.__name__),"bed forcings"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("materials","[%s,%s]" % ("1x1",obj.materials.__class__.__name__),"material properties"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("damage","[%s,%s]" % ("1x1",obj.damage.__class__.__name__),"damage propagation laws"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("friction","[%s,%s]" % ("1x1",obj.friction.__class__.__name__),"basal friction/drag properties"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flowequation","[%s,%s]" % ("1x1",obj.flowequation.__class__.__name__),"flow equations"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("timestepping","[%s,%s]" % ("1x1",obj.timestepping.__class__.__name__),"time stepping for transient models"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("initialization","[%s,%s]" % ("1x1",obj.initialization.__class__.__name__),"initial guess/state"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("rifts","[%s,%s]" % ("1x1",obj.rifts.__class__.__name__),"rifts properties"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("debug","[%s,%s]" % ("1x1",obj.debug.__class__.__name__),"debugging tools (valgrind, gprof)"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("verbose","[%s,%s]" % ("1x1",obj.verbose.__class__.__name__),"verbosity level in solve"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("settings","[%s,%s]" % ("1x1",obj.settings.__class__.__name__),"settings properties"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("toolkits","[%s,%s]" % ("1x1",obj.toolkits.__class__.__name__),"PETSc options for each solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("cluster","[%s,%s]" % ("1x1",obj.cluster.__class__.__name__),"cluster parameters (number of cpus...)"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("balancethickness","[%s,%s]" % ("1x1",obj.balancethickness.__class__.__name__),"parameters for balancethickness solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("stressbalance","[%s,%s]" % ("1x1",obj.stressbalance.__class__.__name__),"parameters for stressbalance solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("groundingline","[%s,%s]" % ("1x1",obj.groundingline.__class__.__name__),"parameters for groundingline solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("hydrology","[%s,%s]" % ("1x1",obj.hydrology.__class__.__name__),"parameters for hydrology solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("masstransport","[%s,%s]" % ("1x1",obj.masstransport.__class__.__name__),"parameters for masstransport solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("thermal","[%s,%s]" % ("1x1",obj.thermal.__class__.__name__),"parameters for thermal solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("steadystate","[%s,%s]" % ("1x1",obj.steadystate.__class__.__name__),"parameters for steadystate solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flaim","[%s,%s]" % ("1x1",obj.flaim.__class__.__name__),"flaim parameters"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("results","[%s,%s]" % ("1x1",obj.results.__class__.__name__),"model results"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("radaroverlay","[%s,%s]" % ("1x1",obj.radaroverlay.__class__.__name__),"radar image for plot overlay"))
+-		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("miscellaneous","[%s,%s]" % ("1x1",obj.miscellaneous.__class__.__name__),"miscellaneous fields"))
+-		return string
+-	# }}}
+-	def checkmessage(self,string):    # {{{
+-		print ("model not consistent: %s" % string)
+-		self.private.isconsistent=False
+-		return self
+-	# }}}
+-	def extract(md,area):    # {{{
+-		"""
+-		extract - extract a model according to an Argus contour or flag list
+-
+-		   This routine extracts a submodel from a bigger model with respect to a given contour
+-		   md must be followed by the corresponding exp file or flags list
+-		   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+-		   If user wants every element outside the domain to be 
+-		   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
+-		   an empty string '' will be considered as an empty domain
+-		   a string 'all' will be considered as the entire domain
+-
+-		   Usage:
+-		      md2=extract(md,area);
+-
+-		   Examples:
+-		      md2=extract(md,'Domain.exp');
+-
+-		   See also: EXTRUDE, COLLAPSE
+-		"""
+-
+-		#copy model
+-		md1=copy.deepcopy(md)
+-
+-		#get elements that are inside area
+-		flag_elem=FlagElements(md1,area)
+-		if not numpy.any(flag_elem):
+-			raise RuntimeError("extracted model is empty")
+-
+-		#kick out all elements with 3 dirichlets
+-		spc_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
+-		spc_node=numpy.unique(md1.mesh.elements[spc_elem,:])-1
+-		flag=numpy.ones(md1.mesh.numberofvertices)
+-		flag[spc_node]=0
+-		pos=numpy.nonzero(numpy.logical_not(numpy.sum(flag[md1.mesh.elements-1],axis=1)))[0]
+-		flag_elem[pos]=0
+-
+-		#extracted elements and nodes lists
+-		pos_elem=numpy.nonzero(flag_elem)[0]
+-		pos_node=numpy.unique(md1.mesh.elements[pos_elem,:])-1
+-
+-		#keep track of some fields
+-		numberofvertices1=md1.mesh.numberofvertices
+-		numberofelements1=md1.mesh.numberofelements
+-		numberofvertices2=numpy.size(pos_node)
+-		numberofelements2=numpy.size(pos_elem)
+-		flag_node=numpy.zeros(numberofvertices1)
+-		flag_node[pos_node]=1
+-
+-		#Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
+-		Pelem=numpy.zeros(numberofelements1,int)
+-		Pelem[pos_elem]=numpy.arange(1,numberofelements2+1)
+-		Pnode=numpy.zeros(numberofvertices1,int)
+-		Pnode[pos_node]=numpy.arange(1,numberofvertices2+1)
+-
+-		#renumber the elements (some node won't exist anymore)
+-		elements_1=copy.deepcopy(md1.mesh.elements)
+-		elements_2=elements_1[pos_elem,:]
+-		elements_2[:,0]=Pnode[elements_2[:,0]-1]
+-		elements_2[:,1]=Pnode[elements_2[:,1]-1]
+-		elements_2[:,2]=Pnode[elements_2[:,2]-1]
+-		if md1.mesh.dimension==3:
+-			elements_2[:,3]=Pnode[elements_2[:,3]-1]
+-			elements_2[:,4]=Pnode[elements_2[:,4]-1]
+-			elements_2[:,5]=Pnode[elements_2[:,5]-1]
+-
+-		#OK, now create the new model!
+-
+-		#take every field from model
+-		md2=copy.deepcopy(md1)
+-
+-		#automatically modify fields
+-
+-		#loop over model fields
+-		model_fields=vars(md1)
+-		for fieldi in model_fields:
+-			#get field
+-			field=getattr(md1,fieldi)
+-			fieldsize=numpy.shape(field)
+-			if hasattr(field,'__dict__') and not ismember(fieldi,['results'])[0]:    #recursive call
+-				object_fields=vars(field)
+-				for fieldj in object_fields:
+-					#get field
+-					field=getattr(getattr(md1,fieldi),fieldj)
+-					fieldsize=numpy.shape(field)
+-					if len(fieldsize):
+-						#size = number of nodes * n
+-						if   fieldsize[0]==numberofvertices1:
+-							setattr(getattr(md2,fieldi),fieldj,field[pos_node,:])
+-						elif fieldsize[0]==numberofvertices1+1:
+-							setattr(getattr(md2,fieldi),fieldj,numpy.vstack((field[pos_node,:],field[-1,:])))
+-						#size = number of elements * n
+-						elif fieldsize[0]==numberofelements1:
+-							setattr(getattr(md2,fieldi),fieldj,field[pos_elem,:])
+-			else:
+-				if len(fieldsize):
+-					#size = number of nodes * n
+-					if   fieldsize[0]==numberofvertices1:
+-						setattr(md2,fieldi,field[pos_node,:])
+-					elif fieldsize[0]==numberofvertices1+1:
+-						setattr(md2,fieldi,numpy.hstack((field[pos_node,:],field[-1,:])))
+-					#size = number of elements * n
+-					elif fieldsize[0]==numberofelements1:
+-						setattr(md2,fieldi,field[pos_elem,:])
+-
+-		#modify some specific fields
+-
+-		#Mesh
+-		md2.mesh.numberofelements=numberofelements2
+-		md2.mesh.numberofvertices=numberofvertices2
+-		md2.mesh.elements=elements_2
+-
+-		#mesh.uppervertex mesh.lowervertex
+-		if md1.mesh.dimension==3:
+-			md2.mesh.uppervertex=md1.mesh.uppervertex[pos_node]
+-			pos=numpy.nonzero(numpy.logical_not(md2.mesh.uppervertex==-1))[0]
+-			md2.mesh.uppervertex[pos]=Pnode[md2.mesh.uppervertex[pos]-1]
+-
+-			md2.mesh.lowervertex=md1.mesh.lowervertex[pos_node]
+-			pos=numpy.nonzero(numpy.logical_not(md2.mesh.lowervertex==-1))[0]
+-			md2.mesh.lowervertex[pos]=Pnode[md2.mesh.lowervertex[pos]-1]
+-
+-			md2.mesh.upperelements=md1.mesh.upperelements[pos_elem]
+-			pos=numpy.nonzero(numpy.logical_not(md2.mesh.upperelements==-1))[0]
+-			md2.mesh.upperelements[pos]=Pelem[md2.mesh.upperelements[pos]-1]
+-
+-			md2.mesh.lowerelements=md1.mesh.lowerelements[pos_elem]
+-			pos=numpy.nonzero(numpy.logical_not(md2.mesh.lowerelements==-1))[0]
+-			md2.mesh.lowerelements[pos]=Pelem[md2.mesh.lowerelements[pos]-1]
+-
+-		#Initial 2d mesh 
+-		if md1.mesh.dimension==3:
+-			flag_elem_2d=flag_elem[numpy.arange(0,md1.mesh.numberofelements2d)]
+-			pos_elem_2d=numpy.nonzero(flag_elem_2d)[0]
+-			flag_node_2d=flag_node[numpy.arange(0,md1.mesh.numberofvertices2d)]
+-			pos_node_2d=numpy.nonzero(flag_node_2d)[0]
+-
+-			md2.mesh.numberofelements2d=numpy.size(pos_elem_2d)
+-			md2.mesh.numberofvertices2d=numpy.size(pos_node_2d)
+-			md2.mesh.elements2d=md1.mesh.elements2d[pos_elem_2d,:]
+-			md2.mesh.elements2d[:,0]=Pnode[md2.mesh.elements2d[:,0]-1]
+-			md2.mesh.elements2d[:,1]=Pnode[md2.mesh.elements2d[:,1]-1]
+-			md2.mesh.elements2d[:,2]=Pnode[md2.mesh.elements2d[:,2]-1]
+-
+-			md2.mesh.x2d=md1.mesh.x[pos_node_2d]
+-			md2.mesh.y2d=md1.mesh.y[pos_node_2d]
+-
+-		#Edges
+-		if numpy.ndim(md2.mesh.edges)>1 and numpy.size(md2.mesh.edges,axis=1)>1:    #do not use ~isnan because there are some NaNs...
+-			#renumber first two columns
+-			pos=numpy.nonzero(md2.mesh.edges[:,3]!=-1)[0]
+-			md2.mesh.edges[:  ,0]=Pnode[md2.mesh.edges[:,0]-1]
+-			md2.mesh.edges[:  ,1]=Pnode[md2.mesh.edges[:,1]-1]
+-			md2.mesh.edges[:  ,2]=Pelem[md2.mesh.edges[:,2]-1]
+-			md2.mesh.edges[pos,3]=Pelem[md2.mesh.edges[pos,3]-1]
+-			#remove edges when the 2 vertices are not in the domain.
+-			md2.mesh.edges=md2.mesh.edges[numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,0],md2.mesh.edges[:,1]))[0],:]
+-			#Replace all zeros by -1 in the last two columns
+-			pos=numpy.nonzero(md2.mesh.edges[:,2]==0)[0]
+-			md2.mesh.edges[pos,2]=-1
+-			pos=numpy.nonzero(md2.mesh.edges[:,3]==0)[0]
+-			md2.mesh.edges[pos,3]=-1
+-			#Invert -1 on the third column with last column (Also invert first two columns!!)
+-			pos=numpy.nonzero(md2.mesh.edges[:,2]==-1)[0]
+-			md2.mesh.edges[pos,2]=md2.mesh.edges[pos,3]
+-			md2.mesh.edges[pos,3]=-1
+-			values=md2.mesh.edges[pos,1]
+-			md2.mesh.edges[pos,1]=md2.mesh.edges[pos,0]
+-			md2.mesh.edges[pos,0]=values
+-			#Finally remove edges that do not belong to any element
+-			pos=numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,1]==-1,md2.mesh.edges[:,2]==-1))[0]
+-			md2.mesh.edges=numpy.delete(md2.mesh.edges,pos,axis=0)
+-
+-		#Penalties
+-		if numpy.any(numpy.logical_not(numpy.isnan(md2.stressbalance.vertex_pairing))):
+-			for i in xrange(numpy.size(md1.stressbalance.vertex_pairing,axis=0)):
+-				md2.stressbalance.vertex_pairing[i,:]=Pnode[md1.stressbalance.vertex_pairing[i,:]]
+-			md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing[numpy.nonzero(md2.stressbalance.vertex_pairing[:,0])[0],:]
+-		if numpy.any(numpy.logical_not(numpy.isnan(md2.masstransport.vertex_pairing))):
+-			for i in xrange(numpy.size(md1.masstransport.vertex_pairing,axis=0)):
+-				md2.masstransport.vertex_pairing[i,:]=Pnode[md1.masstransport.vertex_pairing[i,:]]
+-			md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing[numpy.nonzero(md2.masstransport.vertex_pairing[:,0])[0],:]
+-
+-		#recreate segments
+-		if md1.mesh.dimension==2:
+-			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
+-			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
+-			md2.mesh.segments=contourenvelope(md2)
+-			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2,bool)
+-			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2]-1]=True
+-		else:
+-			#First do the connectivity for the contourenvelope in 2d
+-			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d)
+-			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity)
+-			md2.mesh.segments=contourenvelope(md2)
+-			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2/md2.mesh.numberoflayers,bool)
+-			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2]-1]=True
+-			md2.mesh.vertexonboundary=numpy.tile(md2.mesh.vertexonboundary,md2.mesh.numberoflayers)
+-			#Then do it for 3d as usual
+-			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
+-			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
+-
+-		#Boundary conditions: Dirichlets on new boundary
+-		#Catch the elements that have not been extracted
+-		orphans_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
+-		orphans_node=numpy.unique(md1.mesh.elements[orphans_elem,:])-1
+-		#Figure out which node are on the boundary between md2 and md1
+-		nodestoflag1=numpy.intersect1d(orphans_node,pos_node)
+-		nodestoflag2=Pnode[nodestoflag1].astype(int)-1
+-		if numpy.size(md1.stressbalance.spcvx)>1 and numpy.size(md1.stressbalance.spcvy)>2 and numpy.size(md1.stressbalance.spcvz)>2:
+-			if numpy.size(md1.inversion.vx_obs)>1 and numpy.size(md1.inversion.vy_obs)>1:
+-				md2.stressbalance.spcvx[nodestoflag2]=md2.inversion.vx_obs[nodestoflag2] 
+-				md2.stressbalance.spcvy[nodestoflag2]=md2.inversion.vy_obs[nodestoflag2]
+-			else:
+-				md2.stressbalance.spcvx[nodestoflag2]=float('NaN')
+-				md2.stressbalance.spcvy[nodestoflag2]=float('NaN')
+-				print "\n!! extract warning: spc values should be checked !!\n\n"
+-			#put 0 for vz
+-			md2.stressbalance.spcvz[nodestoflag2]=0
+-		if numpy.any(numpy.logical_not(numpy.isnan(md1.thermal.spctemperature))):
+-			md2.thermal.spctemperature[nodestoflag2,0]=1
+-
+-		#Results fields
+-		if md1.results:
+-			md2.results=results()
+-			for solutionfield,field in md1.results.__dict__.iteritems():
+-				if   isinstance(field,list):
+-					setattr(md2.results,solutionfield,[])
+-					#get time step
+-					for i,fieldi in enumerate(field):
+-						if isinstance(fieldi,results) and fieldi:
+-							getattr(md2.results,solutionfield).append(results())
+-							fieldr=getattr(md2.results,solutionfield)[i]
+-							#get subfields
+-							for solutionsubfield,subfield in fieldi.__dict__.iteritems():
+-								if   numpy.size(subfield)==numberofvertices1:
+-									setattr(fieldr,solutionsubfield,subfield[pos_node])
+-								elif numpy.size(subfield)==numberofelements1:
+-									setattr(fieldr,solutionsubfield,subfield[pos_elem])
+-								else:
+-									setattr(fieldr,solutionsubfield,subfield)
+-						else:
+-							getattr(md2.results,solutionfield).append(None)
+-				elif isinstance(field,results):
+-					setattr(md2.results,solutionfield,results())
+-					if isinstance(field,results) and field:
+-						fieldr=getattr(md2.results,solutionfield)
+-						#get subfields
+-						for solutionsubfield,subfield in field.__dict__.iteritems():
+-							if   numpy.size(subfield)==numberofvertices1:
+-								setattr(fieldr,solutionsubfield,subfield[pos_node])
+-							elif numpy.size(subfield)==numberofelements1:
+-								setattr(fieldr,solutionsubfield,subfield[pos_elem])
+-							else:
+-								setattr(fieldr,solutionsubfield,subfield)
+-
+-		#Keep track of pos_node and pos_elem
+-		md2.mesh.extractedvertices=pos_node+1
+-		md2.mesh.extractedelements=pos_elem+1
+-
+-		return md2
+-	# }}}
+-	def extrude(md,*args):    # {{{
+-		"""
+-		EXTRUDE - vertically extrude a 2d mesh
+-
+-		   vertically extrude a 2d mesh and create corresponding 3d mesh.
+-		   The vertical distribution can:
+-		    - follow a polynomial law
+-		    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
+-		    - be discribed by a list of coefficients (between 0 and 1)
+- 
+-
+-		   Usage:
+-		      md=extrude(md,numlayers,extrusionexponent);
+-		      md=extrude(md,numlayers,lowerexponent,upperexponent);
+-		      md=extrude(md,listofcoefficients);
+-
+-		   Example:
+-		      md=extrude(md,8,3);
+-		      md=extrude(md,8,3,2);
+-		      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
+-
+-		   See also: MODELEXTRACT, COLLAPSE
+-		"""
+-
+-		#some checks on list of arguments
+-		if len(args)>3 or len(args)<1:
+-			raise RuntimeError("extrude error message")
+-
+-		#Extrude the mesh
+-		if   len(args)==1:    #list of coefficients
+-			clist=args[0]
+-			if any(clist<0) or any(clist>1):
+-				raise TypeError("extrusioncoefficients must be between 0 and 1")
+-			clist.extend([0.,1.])
+-			clist.sort()
+-			extrusionlist=list(set(clist))
+-			numlayers=len(extrusionlist)
+-
+-		elif len(args)==2:    #one polynomial law
+-			if args[1]<=0:
+-				raise TypeError("extrusionexponent must be >=0")
+-			numlayers=args[0]
+-			extrusionlist=(numpy.arange(0.,float(numlayers-1)+1.,1.)/float(numlayers-1))**args[1]
+-
+-		elif len(args)==3:    #two polynomial laws
+-			numlayers=args[0]
+-			lowerexp=args[1]
+-			upperexp=args[2]
+-
+-			if args[1]<=0 or args[2]<=0:
+-				raise TypeError("lower and upper extrusionexponents must be >=0")
+-
+-			lowerextrusionlist=(numpy.arange(0.,1.+2./float(numlayers-1),2./float(numlayers-1)))**lowerexp/2.
+-			upperextrusionlist=(numpy.arange(0.,1.+2./float(numlayers-1),2./float(numlayers-1)))**upperexp/2.
+-			extrusionlist=numpy.unique(numpy.concatenate((lowerextrusionlist,1.-upperextrusionlist)))
+-
+-		if numlayers<2:
+-			raise TypeError("number of layers should be at least 2")
+-		if md.mesh.dimension==3:
+-			raise TypeError("Cannot extrude a 3d mesh (extrude cannot be called more than once)")
+-
+-		#Initialize with the 2d mesh
+-		x3d=numpy.empty((0))
+-		y3d=numpy.empty((0))
+-		z3d=numpy.empty((0))    #the lower node is on the bed
+-		thickness3d=md.geometry.thickness    #thickness and bed for these nodes
+-		bed3d=md.geometry.bed
+-
+-		#Create the new layers
+-		for i in xrange(numlayers):
+-			x3d=numpy.concatenate((x3d,md.mesh.x))
+-			y3d=numpy.concatenate((y3d,md.mesh.y))
+-			#nodes are distributed between bed and surface accordingly to the given exponent
+-			z3d=numpy.concatenate((z3d,(bed3d+thickness3d*extrusionlist[i]).reshape(-1)))
+-		number_nodes3d=numpy.size(x3d)    #number of 3d nodes for the non extruded part of the mesh
+-
+-		#Extrude elements 
+-		elements3d=numpy.empty((0,6),int)
+-		for i in xrange(numlayers-1):
+-			elements3d=numpy.vstack((elements3d,numpy.hstack((md.mesh.elements+i*md.mesh.numberofvertices,md.mesh.elements+(i+1)*md.mesh.numberofvertices))))    #Create the elements of the 3d mesh for the non extruded part
+-		number_el3d=numpy.size(elements3d,axis=0)    #number of 3d nodes for the non extruded part of the mesh
+-
+-		#Keep a trace of lower and upper nodes
+-		mesh.lowervertex=-1*numpy.ones(number_nodes3d,int)
+-		mesh.uppervertex=-1*numpy.ones(number_nodes3d,int)
+-		mesh.lowervertex[md.mesh.numberofvertices:]=numpy.arange(1,(numlayers-1)*md.mesh.numberofvertices+1)
+-		mesh.uppervertex[:(numlayers-1)*md.mesh.numberofvertices]=numpy.arange(md.mesh.numberofvertices+1,number_nodes3d+1)
+-		md.mesh.lowervertex=mesh.lowervertex
+-		md.mesh.uppervertex=mesh.uppervertex
+-
+-		#same for lower and upper elements
+-		mesh.lowerelements=-1*numpy.ones(number_el3d,int)
+-		mesh.upperelements=-1*numpy.ones(number_el3d,int)
+-		mesh.lowerelements[md.mesh.numberofelements:]=numpy.arange(1,(numlayers-2)*md.mesh.numberofelements+1)
+-		mesh.upperelements[:(numlayers-2)*md.mesh.numberofelements]=numpy.arange(md.mesh.numberofelements+1,(numlayers-1)*md.mesh.numberofelements+1)
+-		md.mesh.lowerelements=mesh.lowerelements
+-		md.mesh.upperelements=mesh.upperelements
+-
+-		#Save old mesh 
+-		md.mesh.x2d=md.mesh.x
+-		md.mesh.y2d=md.mesh.y
+-		md.mesh.elements2d=md.mesh.elements
+-		md.mesh.numberofelements2d=md.mesh.numberofelements
+-		md.mesh.numberofvertices2d=md.mesh.numberofvertices
+-
+-		#Update mesh type
+-		md.mesh.dimension=3
+-
+-		#Build global 3d mesh 
+-		md.mesh.elements=elements3d
+-		md.mesh.x=x3d
+-		md.mesh.y=y3d
+-		md.mesh.z=z3d
+-		md.mesh.numberofelements=number_el3d
+-		md.mesh.numberofvertices=number_nodes3d
+-		md.mesh.numberoflayers=numlayers
+-
+-		#Ok, now deal with the other fields from the 2d mesh:
+-
+-		#lat long
+-		md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node')
+-		md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node')
+-
+-		#drag coefficient is limited to nodes that are on the bedrock.
+-		md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1)
+-
+-		#p and q (same deal, except for element that are on the bedrock: )
+-		md.friction.p=project3d(md,'vector',md.friction.p,'type','element')
+-		md.friction.q=project3d(md,'vector',md.friction.q,'type','element')
+-
+-		#observations
+-		md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node')
+-		md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node')
+-		md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node')
+-		md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node')
+-		md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node')
+-		md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node')
+-		md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node')
+-
+-		#results
+-		if not numpy.any(numpy.isnan(md.initialization.vx)):
+-			md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node')
+-		if not numpy.any(numpy.isnan(md.initialization.vy)):
+-			md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node')
+-		if not numpy.any(numpy.isnan(md.initialization.vz)):
+-			md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node')
+-		if not numpy.any(numpy.isnan(md.initialization.vel)):
+-			md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node')
+-		if not numpy.any(numpy.isnan(md.initialization.temperature)):
+-			md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node')
+-		if not numpy.any(numpy.isnan(md.initialization.waterfraction)):
+-			md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node')
+-
+-		#bedinfo and surface info
+-		md.mesh.elementonbed=project3d(md,'vector',numpy.ones(md.mesh.numberofelements2d,bool),'type','element','layer',1)
+-		md.mesh.elementonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofelements2d,bool),'type','element','layer',md.mesh.numberoflayers-1)
+-		md.mesh.vertexonbed=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',1)
+-		md.mesh.vertexonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',md.mesh.numberoflayers)
+-
+-		#elementstype
+-		if not numpy.any(numpy.isnan(md.flowequation.element_equation)):
+-			oldelements_type=md.flowequation.element_equation
+-			md.flowequation.element_equation=numpy.zeros(number_el3d,int)
+-			md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element')
+-
+-		#verticestype
+-		if not numpy.any(numpy.isnan(md.flowequation.vertex_equation)):
+-			oldvertices_type=md.flowequation.vertex_equation
+-			md.flowequation.vertex_equation=numpy.zeros(number_nodes3d,int)
+-			md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node')
+-
+-		md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node')
+-		md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node')
+-		md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
+-
+-		#boundary conditions
+-		md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node')
+-		md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node')
+-		md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node')
+-		md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',float('NaN'))
+-		md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
+-		md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
+-		md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node')
+-		md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
+-		md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
+-
+-		#connectivity
+-		md.mesh.elementconnectivity=numpy.tile(md.mesh.elementconnectivity,(numlayers-1,1))
+-		md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity==0)]=-sys.maxint-1
+-		for i in xrange(1,numlayers-1):
+-			md.mesh.elementconnectivity[i*md.mesh.numberofelements2d:(i+1)*md.mesh.numberofelements2d,:] \
+-				=md.mesh.elementconnectivity[i*md.mesh.numberofelements2d:(i+1)*md.mesh.numberofelements2d,:]+md.mesh.numberofelements2d
+-		md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity<0)]=0
+-
+-		#materials
+-		md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node')
+-		md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element')
+-
+-		#damage
+-		md.damage.D=project3d(md,'vector',md.damage.D,'type','node')
+-
+-		#parameters
+-		md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node')
+-		md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node')
+-		md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node')
+-		md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node')
+-		md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node')
+-		md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node')
+-		md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node')
+-		md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node')
+-		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
+-		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node')
+-		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
+-			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+-		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
+-			md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node')
+-		if not numpy.any(numpy.isnan(md.inversion.max_parameters)):
+-			md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node')
+-		if not numpy.any(numpy.isnan(md.qmu.partition)):
+-			md.qmu.partition=project3d(md,'vector',numpy.transpose(md.qmu.partition),'type','node')
+-		if(md.surfaceforcings.isdelta18o):
+-			md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node')
+-		if(md.surfaceforcings.isdelta18o):
+-			md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node')
+-		if(md.surfaceforcings.isdelta18o):
+-			md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node')
+-
+-		#Put lithostatic pressure if there is an existing pressure
+-		if not numpy.any(numpy.isnan(md.initialization.pressure)):
+-			md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,1))
+-
+-		#special for thermal modeling:
+-		md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1)
+-		if not numpy.any(numpy.isnan(md.basalforcings.geothermalflux)):
+-			md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1)    #bedrock only gets geothermal flux
+-
+-		#increase connectivity if less than 25:
+-		if md.mesh.average_vertex_connectivity<=25:
+-			md.mesh.average_vertex_connectivity=100
+-
+-		return md
+-		# }}}
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 16287)
+@@ -0,0 +1,677 @@
++#module imports {{{
++import numpy
++import copy
++import sys
++from mesh import mesh
++from mask import mask
++from geometry import geometry
++from constants import constants
++from surfaceforcings import surfaceforcings
++from basalforcings import basalforcings
++from matice import matice
++from damage import damage
++from friction import friction
++from flowequation import flowequation
++from timestepping import timestepping
++from initialization import initialization
++from rifts import rifts
++from debug import debug
++from verbose import verbose
++from settings import settings
++from toolkits import toolkits
++from generic import generic
++from balancethickness import balancethickness
++from stressbalance import stressbalance
++from groundingline import groundingline
++from hydrologyshreve import hydrologyshreve
++from masstransport import masstransport
++from thermal import thermal
++from steadystate import steadystate
++from transient import transient
++from gia import gia
++from autodiff import autodiff
++from flaim import flaim
++from inversion import inversion
++from qmu import qmu
++from results import results
++from radaroverlay import radaroverlay
++from miscellaneous import miscellaneous
++from private import private
++from EnumDefinitions import *
++from mumpsoptions import *
++from iluasmoptions import *
++from project3d import *
++from FlagElements import *
++from NodeConnectivity import *
++from ElementConnectivity import *
++from contourenvelope import *
++from PythonFuncs import *
++#}}}
++
++class model(object):
++	#properties
++	def __init__(self):#{{{
++		self.mesh             = mesh()
++		self.mask             = mask()
++		self.geometry         = geometry()
++		self.constants        = constants()
++		self.surfaceforcings  = surfaceforcings()
++		self.basalforcings    = basalforcings()
++		self.materials        = matice()
++		self.damage           = damage()
++		self.friction         = friction()
++		self.flowequation     = flowequation()
++		self.timestepping     = timestepping()
++		self.initialization   = initialization()
++		self.rifts            = rifts()
++
++		self.debug            = debug()
++		self.verbose          = verbose()
++		self.settings         = settings()
++		self.toolkits         = toolkits()
++		self.cluster          = generic()
++
++		self.balancethickness = balancethickness()
++		self.stressbalance       = stressbalance()
++		self.groundingline    = groundingline()
++		self.hydrology        = hydrologyshreve()
++		self.masstransport       = masstransport()
++		self.thermal          = thermal()
++		self.steadystate      = steadystate()
++		self.transient        = transient()
++		self.gia              = gia()
++
++		self.autodiff         = autodiff()
++		self.flaim            = flaim()
++		self.inversion        = inversion()
++		self.qmu              = qmu()
++
++		self.results          = results()
++		self.radaroverlay     = radaroverlay()
++		self.miscellaneous    = miscellaneous()
++		self.private          = private()
++		#}}}
++	def properties(self):    # {{{
++		# ordered list of properties since vars(self) is random
++		return ['mesh',\
++		        'mask',\
++		        'geometry',\
++		        'constants',\
++		        'surfaceforcings',\
++		        'basalforcings',\
++		        'materials',\
++		        'damage',\
++		        'friction',\
++		        'flowequation',\
++		        'timestepping',\
++		        'initialization',\
++		        'rifts',\
++		        'debug',\
++		        'verbose',\
++		        'settings',\
++		        'toolkits',\
++		        'cluster',\
++		        'balancethickness',\
++		        'stressbalance',\
++		        'groundingline',\
++		        'hydrology',\
++		        'masstransport',\
++		        'thermal',\
++		        'steadystate',\
++		        'transient',\
++				  'gia',\
++		        'autodiff',\
++		        'flaim',\
++		        'inversion',\
++		        'qmu',\
++		        'results',\
++		        'radaroverlay',\
++		        'miscellaneous',\
++		        'private']
++	# }}}
++	def __repr__(obj): #{{{
++		#print "Here %s the number: %d" % ("is", 37)
++		string="%19s: %-22s -- %s" % ("mesh","[%s,%s]" % ("1x1",obj.mesh.__class__.__name__),"mesh properties")
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("mask","[%s,%s]" % ("1x1",obj.mask.__class__.__name__),"defines grounded and floating elements"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("geometry","[%s,%s]" % ("1x1",obj.geometry.__class__.__name__),"surface elevation, bedrock topography, ice thickness,..."))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("constants","[%s,%s]" % ("1x1",obj.constants.__class__.__name__),"physical constants"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("surfaceforcings","[%s,%s]" % ("1x1",obj.surfaceforcings.__class__.__name__),"surface forcings"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("basalforcings","[%s,%s]" % ("1x1",obj.basalforcings.__class__.__name__),"bed forcings"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("materials","[%s,%s]" % ("1x1",obj.materials.__class__.__name__),"material properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("damage","[%s,%s]" % ("1x1",obj.damage.__class__.__name__),"damage propagation laws"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("friction","[%s,%s]" % ("1x1",obj.friction.__class__.__name__),"basal friction/drag properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flowequation","[%s,%s]" % ("1x1",obj.flowequation.__class__.__name__),"flow equations"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("timestepping","[%s,%s]" % ("1x1",obj.timestepping.__class__.__name__),"time stepping for transient models"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("initialization","[%s,%s]" % ("1x1",obj.initialization.__class__.__name__),"initial guess/state"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("rifts","[%s,%s]" % ("1x1",obj.rifts.__class__.__name__),"rifts properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("debug","[%s,%s]" % ("1x1",obj.debug.__class__.__name__),"debugging tools (valgrind, gprof)"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("verbose","[%s,%s]" % ("1x1",obj.verbose.__class__.__name__),"verbosity level in solve"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("settings","[%s,%s]" % ("1x1",obj.settings.__class__.__name__),"settings properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("toolkits","[%s,%s]" % ("1x1",obj.toolkits.__class__.__name__),"PETSc options for each solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("cluster","[%s,%s]" % ("1x1",obj.cluster.__class__.__name__),"cluster parameters (number of cpus...)"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("balancethickness","[%s,%s]" % ("1x1",obj.balancethickness.__class__.__name__),"parameters for balancethickness solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("stressbalance","[%s,%s]" % ("1x1",obj.stressbalance.__class__.__name__),"parameters for stressbalance solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("groundingline","[%s,%s]" % ("1x1",obj.groundingline.__class__.__name__),"parameters for groundingline solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("hydrology","[%s,%s]" % ("1x1",obj.hydrology.__class__.__name__),"parameters for hydrology solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("masstransport","[%s,%s]" % ("1x1",obj.masstransport.__class__.__name__),"parameters for masstransport solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("thermal","[%s,%s]" % ("1x1",obj.thermal.__class__.__name__),"parameters for thermal solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("steadystate","[%s,%s]" % ("1x1",obj.steadystate.__class__.__name__),"parameters for steadystate solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flaim","[%s,%s]" % ("1x1",obj.flaim.__class__.__name__),"flaim parameters"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("results","[%s,%s]" % ("1x1",obj.results.__class__.__name__),"model results"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("radaroverlay","[%s,%s]" % ("1x1",obj.radaroverlay.__class__.__name__),"radar image for plot overlay"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("miscellaneous","[%s,%s]" % ("1x1",obj.miscellaneous.__class__.__name__),"miscellaneous fields"))
++		return string
++	# }}}
++	def checkmessage(self,string):    # {{{
++		print ("model not consistent: %s" % string)
++		self.private.isconsistent=False
++		return self
++	# }}}
++	def extract(md,area):    # {{{
++		"""
++		extract - extract a model according to an Argus contour or flag list
++
++		   This routine extracts a submodel from a bigger model with respect to a given contour
++		   md must be followed by the corresponding exp file or flags list
++		   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++		   If user wants every element outside the domain to be 
++		   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
++		   an empty string '' will be considered as an empty domain
++		   a string 'all' will be considered as the entire domain
++
++		   Usage:
++		      md2=extract(md,area);
++
++		   Examples:
++		      md2=extract(md,'Domain.exp');
++
++		   See also: EXTRUDE, COLLAPSE
++		"""
++
++		#copy model
++		md1=copy.deepcopy(md)
++
++		#get elements that are inside area
++		flag_elem=FlagElements(md1,area)
++		if not numpy.any(flag_elem):
++			raise RuntimeError("extracted model is empty")
++
++		#kick out all elements with 3 dirichlets
++		spc_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
++		spc_node=numpy.unique(md1.mesh.elements[spc_elem,:])-1
++		flag=numpy.ones(md1.mesh.numberofvertices)
++		flag[spc_node]=0
++		pos=numpy.nonzero(numpy.logical_not(numpy.sum(flag[md1.mesh.elements-1],axis=1)))[0]
++		flag_elem[pos]=0
++
++		#extracted elements and nodes lists
++		pos_elem=numpy.nonzero(flag_elem)[0]
++		pos_node=numpy.unique(md1.mesh.elements[pos_elem,:])-1
++
++		#keep track of some fields
++		numberofvertices1=md1.mesh.numberofvertices
++		numberofelements1=md1.mesh.numberofelements
++		numberofvertices2=numpy.size(pos_node)
++		numberofelements2=numpy.size(pos_elem)
++		flag_node=numpy.zeros(numberofvertices1)
++		flag_node[pos_node]=1
++
++		#Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++		Pelem=numpy.zeros(numberofelements1,int)
++		Pelem[pos_elem]=numpy.arange(1,numberofelements2+1)
++		Pnode=numpy.zeros(numberofvertices1,int)
++		Pnode[pos_node]=numpy.arange(1,numberofvertices2+1)
++
++		#renumber the elements (some node won't exist anymore)
++		elements_1=copy.deepcopy(md1.mesh.elements)
++		elements_2=elements_1[pos_elem,:]
++		elements_2[:,0]=Pnode[elements_2[:,0]-1]
++		elements_2[:,1]=Pnode[elements_2[:,1]-1]
++		elements_2[:,2]=Pnode[elements_2[:,2]-1]
++		if md1.mesh.dimension==3:
++			elements_2[:,3]=Pnode[elements_2[:,3]-1]
++			elements_2[:,4]=Pnode[elements_2[:,4]-1]
++			elements_2[:,5]=Pnode[elements_2[:,5]-1]
++
++		#OK, now create the new model!
++
++		#take every field from model
++		md2=copy.deepcopy(md1)
++
++		#automatically modify fields
++
++		#loop over model fields
++		model_fields=vars(md1)
++		for fieldi in model_fields:
++			#get field
++			field=getattr(md1,fieldi)
++			fieldsize=numpy.shape(field)
++			if hasattr(field,'__dict__') and not ismember(fieldi,['results'])[0]:    #recursive call
++				object_fields=vars(field)
++				for fieldj in object_fields:
++					#get field
++					field=getattr(getattr(md1,fieldi),fieldj)
++					fieldsize=numpy.shape(field)
++					if len(fieldsize):
++						#size = number of nodes * n
++						if   fieldsize[0]==numberofvertices1:
++							setattr(getattr(md2,fieldi),fieldj,field[pos_node,:])
++						elif fieldsize[0]==numberofvertices1+1:
++							setattr(getattr(md2,fieldi),fieldj,numpy.vstack((field[pos_node,:],field[-1,:])))
++						#size = number of elements * n
++						elif fieldsize[0]==numberofelements1:
++							setattr(getattr(md2,fieldi),fieldj,field[pos_elem,:])
++			else:
++				if len(fieldsize):
++					#size = number of nodes * n
++					if   fieldsize[0]==numberofvertices1:
++						setattr(md2,fieldi,field[pos_node,:])
++					elif fieldsize[0]==numberofvertices1+1:
++						setattr(md2,fieldi,numpy.hstack((field[pos_node,:],field[-1,:])))
++					#size = number of elements * n
++					elif fieldsize[0]==numberofelements1:
++						setattr(md2,fieldi,field[pos_elem,:])
++
++		#modify some specific fields
++
++		#Mesh
++		md2.mesh.numberofelements=numberofelements2
++		md2.mesh.numberofvertices=numberofvertices2
++		md2.mesh.elements=elements_2
++
++		#mesh.uppervertex mesh.lowervertex
++		if md1.mesh.dimension==3:
++			md2.mesh.uppervertex=md1.mesh.uppervertex[pos_node]
++			pos=numpy.nonzero(numpy.logical_not(md2.mesh.uppervertex==-1))[0]
++			md2.mesh.uppervertex[pos]=Pnode[md2.mesh.uppervertex[pos]-1]
++
++			md2.mesh.lowervertex=md1.mesh.lowervertex[pos_node]
++			pos=numpy.nonzero(numpy.logical_not(md2.mesh.lowervertex==-1))[0]
++			md2.mesh.lowervertex[pos]=Pnode[md2.mesh.lowervertex[pos]-1]
++
++			md2.mesh.upperelements=md1.mesh.upperelements[pos_elem]
++			pos=numpy.nonzero(numpy.logical_not(md2.mesh.upperelements==-1))[0]
++			md2.mesh.upperelements[pos]=Pelem[md2.mesh.upperelements[pos]-1]
++
++			md2.mesh.lowerelements=md1.mesh.lowerelements[pos_elem]
++			pos=numpy.nonzero(numpy.logical_not(md2.mesh.lowerelements==-1))[0]
++			md2.mesh.lowerelements[pos]=Pelem[md2.mesh.lowerelements[pos]-1]
++
++		#Initial 2d mesh 
++		if md1.mesh.dimension==3:
++			flag_elem_2d=flag_elem[numpy.arange(0,md1.mesh.numberofelements2d)]
++			pos_elem_2d=numpy.nonzero(flag_elem_2d)[0]
++			flag_node_2d=flag_node[numpy.arange(0,md1.mesh.numberofvertices2d)]
++			pos_node_2d=numpy.nonzero(flag_node_2d)[0]
++
++			md2.mesh.numberofelements2d=numpy.size(pos_elem_2d)
++			md2.mesh.numberofvertices2d=numpy.size(pos_node_2d)
++			md2.mesh.elements2d=md1.mesh.elements2d[pos_elem_2d,:]
++			md2.mesh.elements2d[:,0]=Pnode[md2.mesh.elements2d[:,0]-1]
++			md2.mesh.elements2d[:,1]=Pnode[md2.mesh.elements2d[:,1]-1]
++			md2.mesh.elements2d[:,2]=Pnode[md2.mesh.elements2d[:,2]-1]
++
++			md2.mesh.x2d=md1.mesh.x[pos_node_2d]
++			md2.mesh.y2d=md1.mesh.y[pos_node_2d]
++
++		#Edges
++		if numpy.ndim(md2.mesh.edges)>1 and numpy.size(md2.mesh.edges,axis=1)>1:    #do not use ~isnan because there are some NaNs...
++			#renumber first two columns
++			pos=numpy.nonzero(md2.mesh.edges[:,3]!=-1)[0]
++			md2.mesh.edges[:  ,0]=Pnode[md2.mesh.edges[:,0]-1]
++			md2.mesh.edges[:  ,1]=Pnode[md2.mesh.edges[:,1]-1]
++			md2.mesh.edges[:  ,2]=Pelem[md2.mesh.edges[:,2]-1]
++			md2.mesh.edges[pos,3]=Pelem[md2.mesh.edges[pos,3]-1]
++			#remove edges when the 2 vertices are not in the domain.
++			md2.mesh.edges=md2.mesh.edges[numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,0],md2.mesh.edges[:,1]))[0],:]
++			#Replace all zeros by -1 in the last two columns
++			pos=numpy.nonzero(md2.mesh.edges[:,2]==0)[0]
++			md2.mesh.edges[pos,2]=-1
++			pos=numpy.nonzero(md2.mesh.edges[:,3]==0)[0]
++			md2.mesh.edges[pos,3]=-1
++			#Invert -1 on the third column with last column (Also invert first two columns!!)
++			pos=numpy.nonzero(md2.mesh.edges[:,2]==-1)[0]
++			md2.mesh.edges[pos,2]=md2.mesh.edges[pos,3]
++			md2.mesh.edges[pos,3]=-1
++			values=md2.mesh.edges[pos,1]
++			md2.mesh.edges[pos,1]=md2.mesh.edges[pos,0]
++			md2.mesh.edges[pos,0]=values
++			#Finally remove edges that do not belong to any element
++			pos=numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,1]==-1,md2.mesh.edges[:,2]==-1))[0]
++			md2.mesh.edges=numpy.delete(md2.mesh.edges,pos,axis=0)
++
++		#Penalties
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.stressbalance.vertex_pairing))):
++			for i in xrange(numpy.size(md1.stressbalance.vertex_pairing,axis=0)):
++				md2.stressbalance.vertex_pairing[i,:]=Pnode[md1.stressbalance.vertex_pairing[i,:]]
++			md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing[numpy.nonzero(md2.stressbalance.vertex_pairing[:,0])[0],:]
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.masstransport.vertex_pairing))):
++			for i in xrange(numpy.size(md1.masstransport.vertex_pairing,axis=0)):
++				md2.masstransport.vertex_pairing[i,:]=Pnode[md1.masstransport.vertex_pairing[i,:]]
++			md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing[numpy.nonzero(md2.masstransport.vertex_pairing[:,0])[0],:]
++
++		#recreate segments
++		if md1.mesh.dimension==2:
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
++			md2.mesh.segments=contourenvelope(md2)
++			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2,bool)
++			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2]-1]=True
++		else:
++			#First do the connectivity for the contourenvelope in 2d
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity)
++			md2.mesh.segments=contourenvelope(md2)
++			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2/md2.mesh.numberoflayers,bool)
++			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2]-1]=True
++			md2.mesh.vertexonboundary=numpy.tile(md2.mesh.vertexonboundary,md2.mesh.numberoflayers)
++			#Then do it for 3d as usual
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
++
++		#Boundary conditions: Dirichlets on new boundary
++		#Catch the elements that have not been extracted
++		orphans_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
++		orphans_node=numpy.unique(md1.mesh.elements[orphans_elem,:])-1
++		#Figure out which node are on the boundary between md2 and md1
++		nodestoflag1=numpy.intersect1d(orphans_node,pos_node)
++		nodestoflag2=Pnode[nodestoflag1].astype(int)-1
++		if numpy.size(md1.stressbalance.spcvx)>1 and numpy.size(md1.stressbalance.spcvy)>2 and numpy.size(md1.stressbalance.spcvz)>2:
++			if numpy.size(md1.inversion.vx_obs)>1 and numpy.size(md1.inversion.vy_obs)>1:
++				md2.stressbalance.spcvx[nodestoflag2]=md2.inversion.vx_obs[nodestoflag2] 
++				md2.stressbalance.spcvy[nodestoflag2]=md2.inversion.vy_obs[nodestoflag2]
++			else:
++				md2.stressbalance.spcvx[nodestoflag2]=float('NaN')
++				md2.stressbalance.spcvy[nodestoflag2]=float('NaN')
++				print "\n!! extract warning: spc values should be checked !!\n\n"
++			#put 0 for vz
++			md2.stressbalance.spcvz[nodestoflag2]=0
++		if numpy.any(numpy.logical_not(numpy.isnan(md1.thermal.spctemperature))):
++			md2.thermal.spctemperature[nodestoflag2,0]=1
++
++		#Results fields
++		if md1.results:
++			md2.results=results()
++			for solutionfield,field in md1.results.__dict__.iteritems():
++				if   isinstance(field,list):
++					setattr(md2.results,solutionfield,[])
++					#get time step
++					for i,fieldi in enumerate(field):
++						if isinstance(fieldi,results) and fieldi:
++							getattr(md2.results,solutionfield).append(results())
++							fieldr=getattr(md2.results,solutionfield)[i]
++							#get subfields
++							for solutionsubfield,subfield in fieldi.__dict__.iteritems():
++								if   numpy.size(subfield)==numberofvertices1:
++									setattr(fieldr,solutionsubfield,subfield[pos_node])
++								elif numpy.size(subfield)==numberofelements1:
++									setattr(fieldr,solutionsubfield,subfield[pos_elem])
++								else:
++									setattr(fieldr,solutionsubfield,subfield)
++						else:
++							getattr(md2.results,solutionfield).append(None)
++				elif isinstance(field,results):
++					setattr(md2.results,solutionfield,results())
++					if isinstance(field,results) and field:
++						fieldr=getattr(md2.results,solutionfield)
++						#get subfields
++						for solutionsubfield,subfield in field.__dict__.iteritems():
++							if   numpy.size(subfield)==numberofvertices1:
++								setattr(fieldr,solutionsubfield,subfield[pos_node])
++							elif numpy.size(subfield)==numberofelements1:
++								setattr(fieldr,solutionsubfield,subfield[pos_elem])
++							else:
++								setattr(fieldr,solutionsubfield,subfield)
++
++		#Keep track of pos_node and pos_elem
++		md2.mesh.extractedvertices=pos_node+1
++		md2.mesh.extractedelements=pos_elem+1
++
++		return md2
++	# }}}
++	def extrude(md,*args):    # {{{
++		"""
++		EXTRUDE - vertically extrude a 2d mesh
++
++		   vertically extrude a 2d mesh and create corresponding 3d mesh.
++		   The vertical distribution can:
++		    - follow a polynomial law
++		    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
++		    - be discribed by a list of coefficients (between 0 and 1)
++ 
++
++		   Usage:
++		      md=extrude(md,numlayers,extrusionexponent);
++		      md=extrude(md,numlayers,lowerexponent,upperexponent);
++		      md=extrude(md,listofcoefficients);
++
++		   Example:
++		      md=extrude(md,8,3);
++		      md=extrude(md,8,3,2);
++		      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
++
++		   See also: MODELEXTRACT, COLLAPSE
++		"""
++
++		#some checks on list of arguments
++		if len(args)>3 or len(args)<1:
++			raise RuntimeError("extrude error message")
++
++		#Extrude the mesh
++		if   len(args)==1:    #list of coefficients
++			clist=args[0]
++			if any(clist<0) or any(clist>1):
++				raise TypeError("extrusioncoefficients must be between 0 and 1")
++			clist.extend([0.,1.])
++			clist.sort()
++			extrusionlist=list(set(clist))
++			numlayers=len(extrusionlist)
++
++		elif len(args)==2:    #one polynomial law
++			if args[1]<=0:
++				raise TypeError("extrusionexponent must be >=0")
++			numlayers=args[0]
++			extrusionlist=(numpy.arange(0.,float(numlayers-1)+1.,1.)/float(numlayers-1))**args[1]
++
++		elif len(args)==3:    #two polynomial laws
++			numlayers=args[0]
++			lowerexp=args[1]
++			upperexp=args[2]
++
++			if args[1]<=0 or args[2]<=0:
++				raise TypeError("lower and upper extrusionexponents must be >=0")
++
++			lowerextrusionlist=(numpy.arange(0.,1.+2./float(numlayers-1),2./float(numlayers-1)))**lowerexp/2.
++			upperextrusionlist=(numpy.arange(0.,1.+2./float(numlayers-1),2./float(numlayers-1)))**upperexp/2.
++			extrusionlist=numpy.unique(numpy.concatenate((lowerextrusionlist,1.-upperextrusionlist)))
++
++		if numlayers<2:
++			raise TypeError("number of layers should be at least 2")
++		if md.mesh.dimension==3:
++			raise TypeError("Cannot extrude a 3d mesh (extrude cannot be called more than once)")
++
++		#Initialize with the 2d mesh
++		x3d=numpy.empty((0))
++		y3d=numpy.empty((0))
++		z3d=numpy.empty((0))    #the lower node is on the bed
++		thickness3d=md.geometry.thickness    #thickness and bed for these nodes
++		bed3d=md.geometry.bed
++
++		#Create the new layers
++		for i in xrange(numlayers):
++			x3d=numpy.concatenate((x3d,md.mesh.x))
++			y3d=numpy.concatenate((y3d,md.mesh.y))
++			#nodes are distributed between bed and surface accordingly to the given exponent
++			z3d=numpy.concatenate((z3d,(bed3d+thickness3d*extrusionlist[i]).reshape(-1)))
++		number_nodes3d=numpy.size(x3d)    #number of 3d nodes for the non extruded part of the mesh
++
++		#Extrude elements 
++		elements3d=numpy.empty((0,6),int)
++		for i in xrange(numlayers-1):
++			elements3d=numpy.vstack((elements3d,numpy.hstack((md.mesh.elements+i*md.mesh.numberofvertices,md.mesh.elements+(i+1)*md.mesh.numberofvertices))))    #Create the elements of the 3d mesh for the non extruded part
++		number_el3d=numpy.size(elements3d,axis=0)    #number of 3d nodes for the non extruded part of the mesh
++
++		#Keep a trace of lower and upper nodes
++		mesh.lowervertex=-1*numpy.ones(number_nodes3d,int)
++		mesh.uppervertex=-1*numpy.ones(number_nodes3d,int)
++		mesh.lowervertex[md.mesh.numberofvertices:]=numpy.arange(1,(numlayers-1)*md.mesh.numberofvertices+1)
++		mesh.uppervertex[:(numlayers-1)*md.mesh.numberofvertices]=numpy.arange(md.mesh.numberofvertices+1,number_nodes3d+1)
++		md.mesh.lowervertex=mesh.lowervertex
++		md.mesh.uppervertex=mesh.uppervertex
++
++		#same for lower and upper elements
++		mesh.lowerelements=-1*numpy.ones(number_el3d,int)
++		mesh.upperelements=-1*numpy.ones(number_el3d,int)
++		mesh.lowerelements[md.mesh.numberofelements:]=numpy.arange(1,(numlayers-2)*md.mesh.numberofelements+1)
++		mesh.upperelements[:(numlayers-2)*md.mesh.numberofelements]=numpy.arange(md.mesh.numberofelements+1,(numlayers-1)*md.mesh.numberofelements+1)
++		md.mesh.lowerelements=mesh.lowerelements
++		md.mesh.upperelements=mesh.upperelements
++
++		#Save old mesh 
++		md.mesh.x2d=md.mesh.x
++		md.mesh.y2d=md.mesh.y
++		md.mesh.elements2d=md.mesh.elements
++		md.mesh.numberofelements2d=md.mesh.numberofelements
++		md.mesh.numberofvertices2d=md.mesh.numberofvertices
++
++		#Update mesh type
++		md.mesh.dimension=3
++
++		#Build global 3d mesh 
++		md.mesh.elements=elements3d
++		md.mesh.x=x3d
++		md.mesh.y=y3d
++		md.mesh.z=z3d
++		md.mesh.numberofelements=number_el3d
++		md.mesh.numberofvertices=number_nodes3d
++		md.mesh.numberoflayers=numlayers
++
++		#Ok, now deal with the other fields from the 2d mesh:
++
++		#lat long
++		md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node')
++		md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node')
++
++		#drag coefficient is limited to nodes that are on the bedrock.
++		md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1)
++
++		#p and q (same deal, except for element that are on the bedrock: )
++		md.friction.p=project3d(md,'vector',md.friction.p,'type','element')
++		md.friction.q=project3d(md,'vector',md.friction.q,'type','element')
++
++		#observations
++		md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node')
++		md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node')
++		md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node')
++		md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node')
++		md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node')
++		md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node')
++		md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node')
++
++		#results
++		if not numpy.any(numpy.isnan(md.initialization.vx)):
++			md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node')
++		if not numpy.any(numpy.isnan(md.initialization.vy)):
++			md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node')
++		if not numpy.any(numpy.isnan(md.initialization.vz)):
++			md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node')
++		if not numpy.any(numpy.isnan(md.initialization.vel)):
++			md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node')
++		if not numpy.any(numpy.isnan(md.initialization.temperature)):
++			md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node')
++		if not numpy.any(numpy.isnan(md.initialization.waterfraction)):
++			md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node')
++
++		#bedinfo and surface info
++		md.mesh.elementonbed=project3d(md,'vector',numpy.ones(md.mesh.numberofelements2d,bool),'type','element','layer',1)
++		md.mesh.elementonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofelements2d,bool),'type','element','layer',md.mesh.numberoflayers-1)
++		md.mesh.vertexonbed=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',1)
++		md.mesh.vertexonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',md.mesh.numberoflayers)
++
++		#elementstype
++		if not numpy.any(numpy.isnan(md.flowequation.element_equation)):
++			oldelements_type=md.flowequation.element_equation
++			md.flowequation.element_equation=numpy.zeros(number_el3d,int)
++			md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element')
++
++		#verticestype
++		if not numpy.any(numpy.isnan(md.flowequation.vertex_equation)):
++			oldvertices_type=md.flowequation.vertex_equation
++			md.flowequation.vertex_equation=numpy.zeros(number_nodes3d,int)
++			md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node')
++
++		md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node')
++		md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node')
++		md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
++
++		#boundary conditions
++		md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node')
++		md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node')
++		md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node')
++		md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',float('NaN'))
++		md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
++		md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
++		md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node')
++		md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
++		md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
++
++		#connectivity
++		md.mesh.elementconnectivity=numpy.tile(md.mesh.elementconnectivity,(numlayers-1,1))
++		md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity==0)]=-sys.maxint-1
++		for i in xrange(1,numlayers-1):
++			md.mesh.elementconnectivity[i*md.mesh.numberofelements2d:(i+1)*md.mesh.numberofelements2d,:] \
++				=md.mesh.elementconnectivity[i*md.mesh.numberofelements2d:(i+1)*md.mesh.numberofelements2d,:]+md.mesh.numberofelements2d
++		md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity<0)]=0
++
++		#materials
++		md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node')
++		md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element')
++
++		#damage
++		md.damage.D=project3d(md,'vector',md.damage.D,'type','node')
++
++		#parameters
++		md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node')
++		md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node')
++		md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node')
++		md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node')
++		md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node')
++		md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node')
++		md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node')
++		md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node')
++		md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
++		md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node')
++		if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
++			md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
++		if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
++			md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node')
++		if not numpy.any(numpy.isnan(md.inversion.max_parameters)):
++			md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node')
++		if not numpy.any(numpy.isnan(md.qmu.partition)):
++			md.qmu.partition=project3d(md,'vector',numpy.transpose(md.qmu.partition),'type','node')
++		if(md.surfaceforcings.isdelta18o):
++			md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node')
++		if(md.surfaceforcings.isdelta18o):
++			md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node')
++		if(md.surfaceforcings.isdelta18o):
++			md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node')
++
++		#Put lithostatic pressure if there is an existing pressure
++		if not numpy.any(numpy.isnan(md.initialization.pressure)):
++			md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,1))
++
++		#special for thermal modeling:
++		md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1)
++		if not numpy.any(numpy.isnan(md.basalforcings.geothermalflux)):
++			md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1)    #bedrock only gets geothermal flux
++
++		#increase connectivity if less than 25:
++		if md.mesh.average_vertex_connectivity<=25:
++			md.mesh.average_vertex_connectivity=100
++
++		return md
++		# }}}
+Index: ../trunk-jpl/src/m/classes/mesh2d.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/mesh2d.m	(revision 16287)
+@@ -0,0 +1,106 @@
++%MESH class definition
++%
++%   Usage:
++%      mesh=mesh();
++
++classdef mesh
++	properties (SetAccess=public) 
++		x                           = NaN;
++		y                           = NaN;
++		elements                    = NaN
++		numberofelements            = 0;
++		numberofvertices            = 0;
++		numberofedges               = 0;
++
++		lat                         = NaN
++		long                        = NaN
++		hemisphere                  = NaN
++
++		vertexonboundary            = NaN
++
++		edges                       = NaN
++		segments                    = NaN
++		segmentmarkers              = NaN
++		vertexconnectivity          = NaN
++		elementconnectivity         = NaN
++		average_vertex_connectivity = 0;
++
++		extractedvertices           = NaN
++		extractedelements           = NaN
++	end
++	methods
++		function obj = mesh(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%the connectivity is the averaged number of nodes linked to a
++			%given node through an edge. This connectivity is used to initially
++			%allocate memory to the stiffness matrix. A value of 16 seems to
++			%give a good memory/time ration. This value can be checked in
++			%trunk/test/Miscellaneous/runme.m
++			obj.average_vertex_connectivity=25;
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			md = checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mesh.y','NaN',1,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',1:md.mesh.numberofvertices);
++			md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements 3]);
++			if any(~ismember(1:md.mesh.numberofvertices,sort(unique(md.mesh.elements(:)))));
++				md = checkmessage(md,'orphan nodes have been found. Check the mesh outline');
++			end
++			md = checkfield(md,'mesh.numberofelements','>',0);
++			md = checkfield(md,'mesh.numberofvertices','>',0);
++			md = checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]);
++			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
++
++			switch(solution),
++				case ThermalSolutionEnum(),
++					md = checkmessage(md,'thermal not supported for 2d mesh');
++			end
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   2d Mesh:')); 
++
++			disp(sprintf('\n      Elements and vertices:'));
++			fielddisplay(obj,'numberofelements','number of elements');
++			fielddisplay(obj,'numberofvertices','number of vertices');
++			fielddisplay(obj,'elements','vertex indices of the mesh elements');
++			fielddisplay(obj,'x','vertices x coordinate [m]');
++			fielddisplay(obj,'y','vertices y coordinate [m]');
++			fielddisplay(obj,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)');
++			fielddisplay(obj,'numberofedges','number of edges of the 2d mesh');
++
++			disp(sprintf('\n      Properties:'));
++			fielddisplay(obj,'vertexonboundary','vertices on the boundary of the domain flag list');
++			fielddisplay(obj,'segments','edges on domain boundary (vertex1 vertex2 element)');
++			fielddisplay(obj,'segmentmarkers','number associated to each segment');
++			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
++			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
++			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
++
++			disp(sprintf('\n      Extracted model:'));
++			fielddisplay(obj,'extractedvertices','vertices extracted from the model');
++			fielddisplay(obj,'extractedelements','elements extracted from the model');
++
++			disp(sprintf('\n      Projection:'));
++			fielddisplay(obj,'lat','vertices latitude [degrees]');
++			fielddisplay(obj,'long','vertices longitude [degrees]');
++			fielddisplay(obj,'hemisphere','Indicate hemisphere ''n'' or ''s'' ');
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
++			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16287)
+@@ -0,0 +1,1204 @@
++%MODEL class definition
++%
++%   Usage:
++%      md = model(varargin)
++
++classdef model
++	properties (SetAccess=public) %Model fields
++		% {{{
++		%Careful here: no other class should be used as default value this is a bug of matlab
++		mesh             = 0;
++		mask             = 0;
++
++		geometry         = 0;
++		constants        = 0;
++		surfaceforcings  = 0;
++		basalforcings    = 0;
++		materials        = 0;
++		damage           = 0;
++		friction         = 0;
++		flowequation     = 0;
++		timestepping     = 0;
++		initialization   = 0;
++		rifts            = 0;
++
++		debug            = 0;
++		verbose          = 0;
++		settings         = 0;
++		toolkits         = 0;
++		cluster          = 0;
++
++		balancethickness = 0;
++		stressbalance       = 0;
++		groundingline    = 0;
++		hydrology        = 0;
++		masstransport       = 0;
++		thermal          = 0;
++		steadystate      = 0;
++		transient        = 0;
++		gia              = 0;
++
++		autodiff         = 0;
++		flaim            = 0;
++		inversion        = 0;
++		qmu              = 0;
++
++		results          = 0;
++		radaroverlay     = 0;
++		miscellaneous    = 0;
++		private          = 0;
++
++		%}}}
++	end
++	methods (Static)
++		function md = loadobj(md) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. If the input is a struct it is an old version of model and
++			% old fields must be recovered (make sure they are in the deprecated
++			% model properties)
++
++			if verLessThan('matlab','7.9'),
++				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++
++				% This is a Matlab bug: all the fields of md have their default value
++				% Example of error message:
++				% Warning: Error loading an object of class 'model':
++				% Undefined function or method 'exist' for input arguments of type 'cell'
++				%
++				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			end
++
++			if isstruct(md)
++				disp('Recovering model object from a previous version');
++				md = structtomodel(model,md);
++			end
++
++			%2012 August 4th
++			if isa(md.materials,'materials'),
++				disp('Recovering old materials');
++				if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
++					md.materials=matice(md.materials);
++				else
++					md.materials=matdamageice(md.materials);
++				end
++			end
++			%2013 April 12
++			if numel(md.stressbalance.loadingforce==1)
++				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
++			end
++			%2013 April 17
++			if isa(md.hydrology,'hydrology'),
++				disp('Recovering old hydrology class');
++				md.hydrology=hydrologyshreve(md.materials);
++			end
++		end% }}}
++	end
++	methods
++		function md = model(varargin) % {{{
++
++			switch nargin
++				case 0
++					md=setdefaultparameters(md);
++				otherwise
++					error('model constructor error message: 0 of 1 argument only in input.');
++				end
++		end
++		%}}}
++		function md = checkmessage(md,string) % {{{
++			if(nargout~=1) error('wrong usage, model must be an output'); end
++			disp(['model not consistent: ' string]);
++			md.private.isconsistent=false;
++		end
++		%}}}
++		function md = collapse(md)% {{{
++			%COLLAPSE - collapses a 3d mesh into a 2d mesh
++			%
++			%   This routine collapses a 3d model into a 2d model
++			%   and collapses all the fileds of the 3d model by
++			%   taking their depth-averaged values
++			%
++			%   Usage:
++			%      md=collapse(md)
++			%
++			%   See also: EXTRUDE, MODELEXTRACT
++
++			%Check that the model is really a 3d model
++			if ~md.mesh.dimension==3,
++				error('collapse error message: only 3d mesh can be collapsed')
++			end
++
++			%Start with changing alle the fields from the 3d mesh 
++
++			%drag is limited to nodes that are on the bedrock.
++			md.friction.coefficient=project2d(md,md.friction.coefficient,1);
++
++			%p and q (same deal, except for element that are on the bedrock: )
++			md.friction.p=project2d(md,md.friction.p,1);
++			md.friction.q=project2d(md,md.friction.q,1);
++
++			%observations
++			if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.vy_obs), md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.vel_obs), md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.cost_functions_coefficients), md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers); end;
++			if numel(md.inversion.min_parameters)>1, md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers); end;
++			if numel(md.inversion.max_parameters)>1, md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers); end;
++			if ~isnan(md.surfaceforcings.mass_balance),
++				md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.mesh.numberoflayers); 
++			end;
++			if ~isnan(md.balancethickness.thickening_rate), md.balancethickness.thickening_rate=project2d(md,md.balancethickness.thickening_rate,md.mesh.numberoflayers); end;
++
++			%results
++			if ~isnan(md.initialization.vx),md.initialization.vx=DepthAverage(md,md.initialization.vx);end;
++			if ~isnan(md.initialization.vy),md.initialization.vy=DepthAverage(md,md.initialization.vy);end;
++			if ~isnan(md.initialization.vz),md.initialization.vz=DepthAverage(md,md.initialization.vz);end;
++			if ~isnan(md.initialization.vel),md.initialization.vel=DepthAverage(md,md.initialization.vel);end;
++			if ~isnan(md.initialization.temperature),md.initialization.temperature=DepthAverage(md,md.initialization.temperature);end;
++
++			%gia
++			if ~isnan(md.gia.mantle_viscosity), md.gia.mantle_viscosity=project2d(md,md.gia.mantle_viscosity,1); end
++			if ~isnan(md.gia.lithosphere_thickness), md.gia.lithosphere_thickness=project2d(md,md.gia.lithosphere_thickness,1); end
++
++			%bedinfo and surface info
++			md.mesh.elementonbed=ones(md.mesh.numberofelements2d,1);
++			md.mesh.elementonsurface=ones(md.mesh.numberofelements2d,1);
++			md.mesh.vertexonbed=ones(md.mesh.numberofvertices2d,1);
++			md.mesh.vertexonsurface=ones(md.mesh.numberofvertices2d,1);
++
++			%elementstype
++			if ~isnan(md.flowequation.element_equation)
++				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
++				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
++				md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
++				md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
++				md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
++			end	
++
++			%boundary conditions
++			md.stressbalance.spcvx=project2d(md,md.stressbalance.spcvx,md.mesh.numberoflayers);
++			md.stressbalance.spcvy=project2d(md,md.stressbalance.spcvy,md.mesh.numberoflayers);
++			md.stressbalance.spcvz=project2d(md,md.stressbalance.spcvz,md.mesh.numberoflayers);
++			md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
++			md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
++			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
++			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
++
++			%materials
++			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
++			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
++			
++			%damage: 
++			md.damage.D=DepthAverage(md,md.damage.D);
++
++			%special for thermal modeling:
++			md.basalforcings.melting_rate=project2d(md,md.basalforcings.melting_rate,1); 
++			md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); %bedrock only gets geothermal flux
++
++			%update of connectivity matrix
++			md.mesh.average_vertex_connectivity=25;
++
++			%Collapse the mesh
++			nodes2d=md.mesh.numberofvertices2d;
++			elements2d=md.mesh.numberofelements2d;
++
++			%parameters
++			md.geometry.surface=project2d(md,md.geometry.surface,1);
++			md.geometry.thickness=project2d(md,md.geometry.thickness,1);
++			md.geometry.bed=project2d(md,md.geometry.bed,1);
++			md.geometry.bathymetry=project2d(md,md.geometry.bathymetry,1);
++			md.mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
++			md.mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
++			md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1);
++			md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1);
++
++			%lat long
++			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
++			if numel(md.mesh.long)==md.mesh.numberofvertices, md.mesh.long=project2d(md,md.mesh.long,1); end
++
++			%Initialize with the 2d mesh
++			md.mesh.x=md.mesh.x2d;
++			md.mesh.y=md.mesh.y2d;
++			md.mesh.z=zeros(size(md.mesh.x2d));
++			md.mesh.numberofvertices=md.mesh.numberofvertices2d;
++			md.mesh.numberofelements=md.mesh.numberofelements2d;
++			md.mesh.elements=md.mesh.elements2d;
++
++			%Keep a trace of lower and upper nodes
++			md.mesh.lowervertex=NaN;
++			md.mesh.uppervertex=NaN;
++			md.mesh.lowerelements=NaN;
++			md.mesh.upperelements=NaN;
++
++			%Remove old mesh 
++			md.mesh.x2d=NaN;
++			md.mesh.y2d=NaN;
++			md.mesh.elements2d=NaN;
++			md.mesh.numberofelements2d=md.mesh.numberofelements;
++			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
++			md.mesh.numberoflayers=0;
++
++			%Update mesh type
++			md.mesh.dimension=2;
++		end % }}}
++		function md2 = extract(md,area) % {{{
++			%extract - extract a model according to an Argus contour or flag list
++			%
++			%   This routine extracts a submodel from a bigger model with respect to a given contour
++			%   md must be followed by the corresponding exp file or flags list
++			%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++			%   If user wants every element outside the domain to be 
++			%   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
++			%   an empty string '' will be considered as an empty domain
++			%   a string 'all' will be considered as the entire domain
++			%
++			%   Usage:
++			%      md2=extract(md,area);
++			%
++			%   Examples:
++			%      md2=extract(md,'Domain.exp');
++			%
++			%   See also: EXTRUDE, COLLAPSE
++
++			%copy model
++			md1=md;
++
++			%some checks
++			if ((nargin~=2) | (nargout~=1)),
++				help extract
++				error('extract error message: bad usage');
++			end
++
++			%get elements that are inside area
++			flag_elem=FlagElements(md1,area);
++			if ~any(flag_elem),
++				error('extracted model is empty');
++			end
++
++			%kick out all elements with 3 dirichlets
++			spc_elem=find(~flag_elem);
++			spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
++			flag=ones(md1.mesh.numberofvertices,1);
++			flag(spc_node)=0;
++			pos=find(sum(flag(md1.mesh.elements),2)==0);
++			flag_elem(pos)=0;
++
++			%extracted elements and nodes lists
++			pos_elem=find(flag_elem);
++			pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
++
++			%keep track of some fields
++			numberofvertices1=md1.mesh.numberofvertices;
++			numberofelements1=md1.mesh.numberofelements;
++			numberofvertices2=length(pos_node);
++			numberofelements2=length(pos_elem);
++			flag_node=zeros(numberofvertices1,1);
++			flag_node(pos_node)=1;
++
++			%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++			Pelem=zeros(numberofelements1,1);
++			Pelem(pos_elem)=[1:numberofelements2]';
++			Pnode=zeros(numberofvertices1,1);
++			Pnode(pos_node)=[1:numberofvertices2]';
++
++			%renumber the elements (some nodes won't exist anymore)
++			elements_1=md1.mesh.elements;
++			elements_2=elements_1(pos_elem,:);
++			elements_2(:,1)=Pnode(elements_2(:,1));
++			elements_2(:,2)=Pnode(elements_2(:,2));
++			elements_2(:,3)=Pnode(elements_2(:,3));
++			if md1.mesh.dimension==3,
++				elements_2(:,4)=Pnode(elements_2(:,4));
++				elements_2(:,5)=Pnode(elements_2(:,5));
++				elements_2(:,6)=Pnode(elements_2(:,6));
++			end
++
++			%OK, now create the new model!
++
++			%take every field from model
++			md2=md1;
++
++			%automatically modify fields
++
++			%loop over model fields
++			model_fields=fields(md1);
++			for i=1:length(model_fields),
++				%get field
++				field=md1.(model_fields{i});
++				fieldsize=size(field);
++				if isobject(field), %recursive call
++					object_fields=fields(md1.(model_fields{i}));
++					for j=1:length(object_fields),
++						%get field
++						field=md1.(model_fields{i}).(object_fields{j});
++						fieldsize=size(field);
++						%size = number of nodes * n
++						if fieldsize(1)==numberofvertices1
++							md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
++						elseif (fieldsize(1)==numberofvertices1+1)
++							md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
++						%size = number of elements * n
++						elseif fieldsize(1)==numberofelements1
++							md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
++						end
++					end
++				else
++					%size = number of nodes * n
++					if fieldsize(1)==numberofvertices1
++						md2.(model_fields{i})=field(pos_node,:);
++					elseif (fieldsize(1)==numberofvertices1+1)
++						md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
++					%size = number of elements * n
++					elseif fieldsize(1)==numberofelements1
++						md2.(model_fields{i})=field(pos_elem,:);
++					end
++				end
++			end
++
++			%modify some specific fields
++
++			%Mesh
++			md2.mesh.numberofelements=numberofelements2;
++			md2.mesh.numberofvertices=numberofvertices2;
++			md2.mesh.elements=elements_2;
++
++			%mesh.uppervertex mesh.lowervertex
++			if md1.mesh.dimension==3
++				md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
++				pos=find(~isnan(md2.mesh.uppervertex));
++				md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
++
++				md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
++				pos=find(~isnan(md2.mesh.lowervertex));
++				md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
++
++				md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
++				pos=find(~isnan(md2.mesh.upperelements));
++				md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
++
++				md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
++				pos=find(~isnan(md2.mesh.lowerelements));
++				md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
++			end
++
++			%Initial 2d mesh 
++			if md1.mesh.dimension==3
++				flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
++				pos_elem_2d=find(flag_elem_2d);
++				flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
++				pos_node_2d=find(flag_node_2d);
++
++				md2.mesh.numberofelements2d=length(pos_elem_2d);
++				md2.mesh.numberofvertices2d=length(pos_node_2d);
++				md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
++				md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
++				md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
++				md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
++
++				md2.mesh.x2d=md1.mesh.x(pos_node_2d);
++				md2.mesh.y2d=md1.mesh.y(pos_node_2d);
++			end
++
++			%Edges
++			if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
++				%renumber first two columns
++				pos=find(md2.mesh.edges(:,4)~=-1);
++				md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1));
++				md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2));
++				md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
++				md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
++				%remove edges when the 2 vertices are not in the domain.
++				md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
++				%Replace all zeros by -1 in the last two columns
++				pos=find(md2.mesh.edges(:,3)==0);
++				md2.mesh.edges(pos,3)=-1;
++				pos=find(md2.mesh.edges(:,4)==0);
++				md2.mesh.edges(pos,4)=-1;
++				%Invert -1 on the third column with last column (Also invert first two columns!!)
++				pos=find(md2.mesh.edges(:,3)==-1);
++				md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
++				md2.mesh.edges(pos,4)=-1;
++				values=md2.mesh.edges(pos,2);
++				md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
++				md2.mesh.edges(pos,1)=values;
++				%Finally remove edges that do not belong to any element
++				pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
++				md2.mesh.edges(pos,:)=[];
++			end
++
++			%Penalties
++			if ~isnan(md2.stressbalance.vertex_pairing),
++				for i=1:size(md1.stressbalance.vertex_pairing,1);
++					md2.stressbalance.vertex_pairing(i,:)=Pnode(md1.stressbalance.vertex_pairing(i,:));
++				end
++				md2.stressbalance.vertex_pairing=md2.stressbalance.vertex_pairing(find(md2.stressbalance.vertex_pairing(:,1)),:);
++			end
++			if ~isnan(md2.masstransport.vertex_pairing),
++				for i=1:size(md1.masstransport.vertex_pairing,1);
++					md2.masstransport.vertex_pairing(i,:)=Pnode(md1.masstransport.vertex_pairing(i,:));
++				end
++				md2.masstransport.vertex_pairing=md2.masstransport.vertex_pairing(find(md2.masstransport.vertex_pairing(:,1)),:);
++			end
++
++			%recreate segments
++			if md1.mesh.dimension==2
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++				md2.mesh.segments=contourenvelope(md2);
++				md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++			else
++				%First do the connectivity for the contourenvelope in 2d
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
++				md2.mesh.segments=contourenvelope(md2);
++				md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++				md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
++				%Then do it for 3d as usual
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++			end
++
++			%Boundary conditions: Dirichlets on new boundary
++			%Catch the elements that have not been extracted
++			orphans_elem=find(~flag_elem);
++			orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
++			%Figure out which node are on the boundary between md2 and md1
++			nodestoflag1=intersect(orphans_node,pos_node);
++			nodestoflag2=Pnode(nodestoflag1);
++			if numel(md1.stressbalance.spcvx)>1 & numel(md1.stressbalance.spcvy)>2 & numel(md1.stressbalance.spcvz)>2,
++				if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
++					md2.stressbalance.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
++					md2.stressbalance.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
++				else
++					md2.stressbalance.spcvx(nodestoflag2)=NaN;
++					md2.stressbalance.spcvy(nodestoflag2)=NaN;
++					disp(' ')
++					disp('!! extract warning: spc values should be checked !!')
++					disp(' ')
++				end
++				%put 0 for vz
++				md2.stressbalance.spcvz(nodestoflag2)=0;
++			end
++			if ~isnan(md1.thermal.spctemperature),
++				md2.thermal.spctemperature(nodestoflag2,1)=1;
++			end
++
++			%Results fields
++			if isstruct(md1.results),
++				md2.results=struct();
++				solutionfields=fields(md1.results);
++				for i=1:length(solutionfields),
++					if isstruct(md1.results.(solutionfields{i}))
++						%get subfields
++						solutionsubfields=fields(md1.results.(solutionfields{i}));
++						for j=1:length(solutionsubfields),
++							field=md1.results.(solutionfields{i}).(solutionsubfields{j});
++							if length(field)==numberofvertices1,
++								md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
++							elseif length(field)==numberofelements1,
++								md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
++							else
++								md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
++							end
++						end
++					else
++						field=md1.results.(solutionfields{i});
++						if length(field)==numberofvertices1,
++							md2.results.(solutionfields{i})=field(pos_node);
++						elseif length(field)==numberofelements1,
++							md2.results.(solutionfields{i})=field(pos_elem);
++						else
++							md2.results.(solutionfields{i})=field;
++						end
++					end
++				end
++			end
++
++			%Keep track of pos_node and pos_elem
++			md2.mesh.extractedvertices=pos_node;
++			md2.mesh.extractedelements=pos_elem;
++		end % }}}
++		function md = extrude(md,varargin) % {{{
++			%EXTRUDE - vertically extrude a 2d mesh
++			%
++			%   vertically extrude a 2d mesh and create corresponding 3d mesh.
++			%   The vertical distribution can:
++			%    - follow a polynomial law
++			%    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
++			%    - be discribed by a list of coefficients (between 0 and 1)
++			%   
++			%
++			%   Usage:
++			%      md=extrude(md,numlayers,extrusionexponent);
++			%      md=extrude(md,numlayers,lowerexponent,upperexponent);
++			%      md=extrude(md,listofcoefficients);
++			%
++			%   Example:
++			%      md=extrude(md,8,3);
++			%      md=extrude(md,8,3,2);
++			%      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
++			%
++			%   See also: MODELEXTRACT, COLLAPSE
++
++			%some checks on list of arguments
++			if ((nargin>4) | (nargin<2) | (nargout~=1)),
++				help extrude;
++				error('extrude error message');
++			end
++
++			%Extrude the mesh
++			if nargin==2, %list of coefficients
++				clist=varargin{1};
++				if any(clist<0) | any(clist>1),
++					error('extrusioncoefficients must be between 0 and 1');
++				end
++				extrusionlist=sort(unique([clist(:);0;1]));
++				numlayers=length(extrusionlist);
++			elseif nargin==3, %one polynomial law
++				if varargin{2}<=0,
++					help extrude;
++					error('extrusionexponent must be >=0');
++				end
++				numlayers=varargin{1};
++				extrusionlist=((0:1:numlayers-1)/(numlayers-1)).^varargin{2};
++			elseif nargin==4, %two polynomial laws
++				numlayers=varargin{1};
++				lowerexp=varargin{2};
++				upperexp=varargin{3};
++
++				if varargin{2}<=0 | varargin{3}<=0,
++					help extrude;
++					error('lower and upper extrusionexponents must be >=0');
++				end
++
++				lowerextrusionlist=[(0:2/(numlayers-1):1).^lowerexp]/2;
++				upperextrusionlist=[(0:2/(numlayers-1):1).^upperexp]/2;
++				extrusionlist=sort(unique([lowerextrusionlist 1-upperextrusionlist]));
++
++			end
++
++			if numlayers<2,
++				error('number of layers should be at least 2');
++			end
++			if md.mesh.dimension==3,
++				error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
++			end
++
++			%Initialize with the 2d mesh
++			x3d=[]; 
++			y3d=[];
++			z3d=[];  %the lower node is on the bed
++			thickness3d=md.geometry.thickness; %thickness and bed for these nodes
++			bed3d=md.geometry.bed;
++
++			%Create the new layers
++			for i=1:numlayers,
++				x3d=[x3d; md.mesh.x]; 
++				y3d=[y3d; md.mesh.y];
++				%nodes are distributed between bed and surface accordingly to the given exponent
++				z3d=[z3d; bed3d+thickness3d*extrusionlist(i)]; 
++			end
++			number_nodes3d=size(x3d,1); %number of 3d nodes for the non extruded part of the mesh
++
++			%Extrude elements 
++			elements3d=[];
++			for i=1:numlayers-1,
++				elements3d=[elements3d;[md.mesh.elements+(i-1)*md.mesh.numberofvertices md.mesh.elements+i*md.mesh.numberofvertices]]; %Create the elements of the 3d mesh for the non extruded part
++			end
++			number_el3d=size(elements3d,1); %number of 3d nodes for the non extruded part of the mesh
++
++			%Keep a trace of lower and upper nodes
++			mesh.lowervertex=NaN*ones(number_nodes3d,1);
++			mesh.uppervertex=NaN*ones(number_nodes3d,1);
++			mesh.lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;
++			mesh.uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;
++			md.mesh.lowervertex=mesh.lowervertex;
++			md.mesh.uppervertex=mesh.uppervertex;
++
++			%same for lower and upper elements
++			mesh.lowerelements=NaN*ones(number_el3d,1);
++			mesh.upperelements=NaN*ones(number_el3d,1);
++			mesh.lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;
++			mesh.upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;
++			md.mesh.lowerelements=mesh.lowerelements;
++			md.mesh.upperelements=mesh.upperelements;
++
++			%Save old mesh 
++			md.mesh.x2d=md.mesh.x;
++			md.mesh.y2d=md.mesh.y;
++			md.mesh.elements2d=md.mesh.elements;
++			md.mesh.numberofelements2d=md.mesh.numberofelements;
++			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
++
++			%Update mesh type
++			md.mesh.dimension=3;
++
++			%Build global 3d mesh 
++			md.mesh.elements=elements3d;
++			md.mesh.x=x3d;
++			md.mesh.y=y3d;
++			md.mesh.z=z3d;
++			md.mesh.numberofelements=number_el3d;
++			md.mesh.numberofvertices=number_nodes3d;
++			md.mesh.numberoflayers=numlayers;
++
++			%Ok, now deal with the other fields from the 2d mesh:
++
++			%lat long
++			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
++			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
++
++			%drag coefficient is limited to nodes that are on the bedrock.
++			md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
++
++			%p and q (same deal, except for element that are on the bedrock: )
++			md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
++			md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
++
++			%observations
++			md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
++			md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
++			md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
++			md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
++			md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node');
++			md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
++			md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node');
++
++			%results
++			if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end;
++			if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end;
++			if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end;
++			if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
++			if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
++			if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
++            if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node','layer',1);end;
++
++			%bedinfo and surface info
++			md.mesh.elementonbed=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',1);
++			md.mesh.elementonsurface=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',md.mesh.numberoflayers-1);
++			md.mesh.vertexonbed=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
++			md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
++
++			%elementstype
++			if ~isnan(md.flowequation.element_equation)
++				oldelements_type=md.flowequation.element_equation;
++				md.flowequation.element_equation=zeros(number_el3d,1);
++				md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element');
++			end
++
++			%verticestype
++			if ~isnan(md.flowequation.vertex_equation)
++				oldvertices_type=md.flowequation.vertex_equation;
++				md.flowequation.vertex_equation=zeros(number_nodes3d,1);
++				md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
++			end
++			md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node');
++			md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node');
++			md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
++
++			%boundary conditions
++			md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node');
++			md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node');
++			md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node');
++			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
++			md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
++			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
++			md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node');
++			md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
++			md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
++
++			%connectivity
++			md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
++			md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
++			for i=2:numlayers-1,
++				md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
++					=md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
++			end
++			md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
++
++			%materials
++			md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
++			md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
++				
++			%damage
++			md.damage.D=project3d(md,'vector',md.damage.D,'type','node');
++
++			%parameters
++			md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
++			md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node');
++			md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node');
++			md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node');
++			md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node');
++			md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
++			md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node');
++			md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
++			md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node');
++			md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
++			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
++			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
++			if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
++			if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node');end
++
++			%Put lithostatic pressure if there is an existing pressure
++			if ~isnan(md.initialization.pressure),
++				md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
++			end
++
++			%special for thermal modeling:
++			md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1); 
++			if ~isnan(md.basalforcings.geothermalflux)
++				md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
++			end
++
++			%increase connectivity if less than 25:
++			if md.mesh.average_vertex_connectivity<=25,
++				md.mesh.average_vertex_connectivity=100;
++			end
++			end % }}}
++		function md = structtomodel(md,structmd) % {{{
++
++			if ~isstruct(structmd) error('input model is not a structure'); end
++
++			%loaded model is a struct, initialize output and recover all fields
++			md = structtoobj(model,structmd);
++
++			%Old field now classes
++			if (isfield(structmd,'timestepping') & isnumeric(md.timestepping)), md.timestepping=timestepping(); end
++			if (isfield(structmd,'mask') & isnumeric(md.mask)),md.mask=mask(); end
++
++			%Field name change
++			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
++			if isfield(structmd,'p'), md.friction.p=structmd.p; end
++			if isfield(structmd,'q'), md.friction.q=structmd.p; end
++			if isfield(structmd,'melting'), md.basalforcings.melting_rate=structmd.melting; end
++			if isfield(structmd,'melting_rate'), md.basalforcings.melting_rate=structmd.melting_rate; end
++			if isfield(structmd,'accumulation'), md.surfaceforcings.mass_balance=structmd.accumulation; end
++			if isfield(structmd,'numberofgrids'), md.mesh.numberofvertices=structmd.numberofgrids; end
++			if isfield(structmd,'numberofgrids2d'), md.mesh.numberofvertices2d=structmd.numberofgrids2d; end
++			if isfield(structmd,'uppergrids'), md.mesh.uppervertex=structmd.uppergrids; end
++			if isfield(structmd,'lowergrids'), md.mesh.lowervertex=structmd.lowergrids; end
++			if isfield(structmd,'gridonbed'), md.mesh.vertexonbed=structmd.gridonbed; end
++			if isfield(structmd,'gridonsurface'), md.mesh.vertexonsurface=structmd.gridonsurface; end
++			if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
++			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
++			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.toolkits=structmd.petscoptions; end
++			if isfield(structmd,'g'), md.constants.g=structmd.g; end
++			if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
++			if isfield(structmd,'surface_mass_balance'), md.surfaceforcings.mass_balance=structmd.surface_mass_balance; end
++			if isfield(structmd,'basal_melting_rate'), md.basalforcings.melting_rate=structmd.basal_melting_rate; end
++			if isfield(structmd,'basal_melting_rate_correction'), md.basalforcings.melting_rate_correction=structmd.basal_melting_rate_correction; end
++			if isfield(structmd,'geothermalflux'), md.basalforcings.geothermalflux=structmd.geothermalflux; end
++			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
++			if isfield(structmd,'drag_coefficient'), md.friction.coefficient=structmd.drag_coefficient; end
++			if isfield(structmd,'drag_p'), md.friction.p=structmd.drag_p; end
++			if isfield(structmd,'drag_q'), md.friction.q=structmd.drag_q; end
++			if isfield(structmd,'riftproperties'), %old implementation
++				md.rifts=rifts();
++				md.rifts.riftproperties=structmd.riftproperties; 
++				md.rifts.riftstruct=structmd.rifts;
++				md.rifts.riftproperties=structmd.riftinfo;
++			end
++			if isfield(structmd,'bamg'), md.private.bamg=structmd.bamg; end
++			if isfield(structmd,'lowmem'), md.settings.lowmem=structmd.lowmem; end
++			if isfield(structmd,'io_gather'), md.settings.io_gather=structmd.io_gather; end
++			if isfield(structmd,'spcwatercolumn'), md.hydrology.spcwatercolumn=structmd.spcwatercolumn; end
++			if isfield(structmd,'hydro_n'), md.hydrology.n=structmd.hydro_n; end
++			if isfield(structmd,'hydro_p'), md.hydrology.p=structmd.hydro_p; end
++			if isfield(structmd,'hydro_q'), md.hydrology.q=structmd.hydro_q; end
++			if isfield(structmd,'hydro_CR'), md.hydrology.CR=structmd.hydro_CR; end
++			if isfield(structmd,'hydro_kn'), md.hydrology.kn=structmd.hydro_kn; end
++			if isfield(structmd,'spctemperature'), md.thermal.spctemperature=structmd.spctemperature; end
++			if isfield(structmd,'min_thermal_constraints'), md.thermal.penalty_threshold=structmd.min_thermal_constraints; end
++			if isfield(structmd,'artificial_diffusivity'), md.thermal.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'max_nonlinear_iterations'), md.thermal.maxiter=structmd.max_nonlinear_iterations; end
++			if isfield(structmd,'stabilize_constraints'), md.thermal.penalty_lock=structmd.stabilize_constraints; end
++			if isfield(structmd,'penalty_offset'), md.thermal.penalty_factor=structmd.penalty_offset; end
++			if isfield(structmd,'name'), md.miscellaneous.name=structmd.name; end
++			if isfield(structmd,'notes'), md.miscellaneous.notes=structmd.notes; end
++			if isfield(structmd,'dummy'), md.miscellaneous.dummy=structmd.dummy; end
++			if isfield(structmd,'dt'), md.timestepping.time_step=structmd.dt; end
++			if isfield(structmd,'ndt'), md.timestepping.final_time=structmd.ndt; end
++			if isfield(structmd,'time_adapt'), md.timestepping.time_adapt=structmd.time_adapt; end
++			if isfield(structmd,'cfl_coefficient'), md.timestepping.cfl_coefficient=structmd.cfl_coefficient; end
++			if isfield(structmd,'spcthickness'), md.masstransport.spcthickness=structmd.spcthickness; end
++			if isfield(structmd,'artificial_diffusivity'), md.masstransport.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'hydrostatic_adjustment'), md.masstransport.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
++			if isfield(structmd,'penalties'), md.masstransport.vertex_pairing=structmd.penalties; end
++			if isfield(structmd,'penalty_offset'), md.masstransport.penalty_factor=structmd.penalty_offset; end
++			if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end
++			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
++			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
++			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
++			if isfield(structmd,'rheology_Z'), md.damage.D=(1-structmd.rheology_Z); end
++			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
++			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
++			if isfield(structmd,'isSIA'), md.flowequation.isSIA=structmd.isSIA; end
++			if isfield(structmd,'isFS'), md.flowequation.isFS=structmd.isFS; end
++			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
++			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
++			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
++			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
++			if isfield(structmd,'isdiagnostic'), md.transient.isstressbalance=structmd.isdiagnostic; end
++			if isfield(structmd,'isprognostic'), md.transient.ismasstransport=structmd.isprognostic; end
++			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
++			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
++			if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
++			if isfield(structmd,'nsteps'), md.inversion.nsteps=structmd.nsteps; end
++			if isfield(structmd,'maxiter_per_step'), md.inversion.maxiter_per_step=structmd.maxiter_per_step; end
++			if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
++			if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
++			if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
++			if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
++			if isfield(structmd,'vel_obs'), md.inversion.vel_obs=structmd.vel_obs; end
++			if isfield(structmd,'thickness_obs'), md.inversion.thickness_obs=structmd.thickness_obs; end
++			if isfield(structmd,'vx'), md.initialization.vx=structmd.vx; end
++			if isfield(structmd,'vy'), md.initialization.vy=structmd.vy; end
++			if isfield(structmd,'vz'), md.initialization.vz=structmd.vz; end
++			if isfield(structmd,'vel'), md.initialization.vel=structmd.vel; end
++			if isfield(structmd,'pressure'), md.initialization.pressure=structmd.pressure; end
++			if isfield(structmd,'temperature'), md.initialization.temperature=structmd.temperature; end
++			if isfield(structmd,'waterfraction'), md.initialization.waterfraction=structmd.waterfraction; end
++			if isfield(structmd,'watercolumn'), md.initialization.watercolumn=structmd.watercolumn; end
++			if isfield(structmd,'surface'), md.geometry.surface=structmd.surface; end
++			if isfield(structmd,'bed'), md.geometry.bed=structmd.bed; end
++			if isfield(structmd,'thickness'), md.geometry.thickness=structmd.thickness; end
++			if isfield(structmd,'bathymetry'), md.geometry.bathymetry=structmd.bathymetry; end
++			if isfield(structmd,'thickness_coeff'), md.geometry.hydrostatic_ratio=structmd.thickness_coeff; end
++			if isfield(structmd,'connectivity'), md.mesh.average_vertex_connectivity=structmd.connectivity; end
++			if isfield(structmd,'extractednodes'), md.mesh.extractedvertices=structmd.extractednodes; end
++			if isfield(structmd,'extractedelements'), md.mesh.extractedelements=structmd.extractedelements; end
++			if isfield(structmd,'nodeonboundary'), md.mesh.vertexonboundary=structmd.nodeonboundary; end
++			if isfield(structmd,'hemisphere'), md.mesh.hemisphere=structmd.hemisphere; end
++			if isfield(structmd,'lat'), md.mesh.lat=structmd.lat; end
++			if isfield(structmd,'long'), md.mesh.long=structmd.long; end
++			if isfield(structmd,'segments'), md.mesh.segments=structmd.segments; end
++			if isfield(structmd,'segmentmarkers'), md.mesh.segmentmarkers=structmd.segmentmarkers; end
++			if isfield(structmd,'dim'), md.mesh.dimension=structmd.dim; end
++			if isfield(structmd,'numlayers'), md.mesh.numberoflayers=structmd.numlayers; end
++			if isfield(structmd,'numberofelements'), md.mesh.numberofelements=structmd.numberofelements; end
++			if isfield(structmd,'numberofvertices'), md.mesh.numberofvertices=structmd.numberofvertices; end
++			if isfield(structmd,'numberofnodes'), md.mesh.numberofvertices=structmd.numberofnodes; end
++			if isfield(structmd,'numberofedges'), md.mesh.numberofedges=structmd.numberofedges; end
++			if isfield(structmd,'numberofelements2d'), md.mesh.numberofelements2d=structmd.numberofelements2d; end
++			if isfield(structmd,'numberofnodes2d'), md.mesh.numberofvertices2d=structmd.numberofnodes2d; end
++			if isfield(structmd,'nodeconnectivity'), md.mesh.vertexconnectivity=structmd.nodeconnectivity; end
++			if isfield(structmd,'elementconnectivity'), md.mesh.elementconnectivity=structmd.elementconnectivity; end
++			if isfield(structmd,'uppernodes'), md.mesh.uppervertex=structmd.uppernodes; end
++			if isfield(structmd,'lowernodes'), md.mesh.lowervertex=structmd.lowernodes; end
++			if isfield(structmd,'upperelements'), md.mesh.upperelements=structmd.upperelements; end
++			if isfield(structmd,'lowerelements'), md.mesh.lowerelements=structmd.lowerelements; end
++			if isfield(structmd,'elementonbed'), md.mesh.elementonbed=structmd.elementonbed; end
++			if isfield(structmd,'elementonsurface'), md.mesh.elementonsurface=structmd.elementonsurface; end
++			if isfield(structmd,'nodeonsurface'), md.mesh.vertexonsurface=structmd.nodeonsurface; end
++			if isfield(structmd,'nodeonbed'), md.mesh.vertexonbed=structmd.nodeonbed; end
++			if isfield(structmd,'elements2d'), md.mesh.elements2d=structmd.elements2d; end
++			if isfield(structmd,'y2d'), md.mesh.y2d=structmd.y2d; end
++			if isfield(structmd,'x2d'), md.mesh.x2d=structmd.x2d; end
++			if isfield(structmd,'elements'), md.mesh.elements=structmd.elements; end
++			if isfield(structmd,'edges'), 
++				md.mesh.edges=structmd.edges; 
++				md.mesh.edges(isnan(md.mesh.edges))=-1;
++			end
++			if isfield(structmd,'y'), md.mesh.y=structmd.y; end
++			if isfield(structmd,'x'), md.mesh.x=structmd.x; end
++			if isfield(structmd,'z'), md.mesh.z=structmd.z; end
++			if isfield(structmd,'mask'), md.flaim.criterion=structmd.mask; end
++			if isfield(structmd,'diagnostic_ref'), md.stressbalance.referential=structmd.diagnostic_ref; end
++			if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
++			if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
++
++			%Field changes
++			if (isfield(structmd,'type') & ischar(structmd.type)), 
++				if strcmpi(structmd.type,'2d'), md.mesh.dimension=2; end
++				if strcmpi(structmd.type,'3d'), md.mesh.dimension=3; end
++			end
++			if isnumeric(md.verbose),
++				md.verbose=verbose;
++			end
++
++			if isfield(structmd,'spcvelocity'), 
++				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(structmd.spcvelocity(:,1)); md.stressbalance.spcvx(pos)=structmd.spcvelocity(pos,4); 
++				pos=find(structmd.spcvelocity(:,2)); md.stressbalance.spcvy(pos)=structmd.spcvelocity(pos,5); 
++				pos=find(structmd.spcvelocity(:,3)); md.stressbalance.spcvz(pos)=structmd.spcvelocity(pos,6); 
++			end
++			if isfield(structmd,'spcvx'), 
++				md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvx)); md.stressbalance.spcvx(pos)=structmd.spcvx(pos); 
++			end
++			if isfield(structmd,'spcvy'),
++				md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvy)); md.stressbalance.spcvy(pos)=structmd.spcvy(pos);     
++			end
++			if isfield(structmd,'spcvz'),
++				md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvz)); md.stressbalance.spcvz(pos)=structmd.spcvz(pos);     
++			end
++			if isfield(structmd,'pressureload'),
++				if ~isempty(structmd.pressureload) & ismember(structmd.pressureload(end,end),[118 119 120]),
++					pos=find(structmd.pressureload(:,end)==120); md.stressbalance.icefront(pos,end)=0;
++					pos=find(structmd.pressureload(:,end)==118); md.stressbalance.icefront(pos,end)=1;
++					pos=find(structmd.pressureload(:,end)==119); md.stressbalance.icefront(pos,end)=2;
++				end
++			end
++			if isfield(structmd,'elements_type') & structmd.elements_type(end,end)>50,
++				pos=find(structmd.elements_type==59); md.flowequation.element_equation(pos,end)=0;
++				pos=find(structmd.elements_type==55); md.flowequation.element_equation(pos,end)=1;
++				pos=find(structmd.elements_type==56); md.flowequation.element_equation(pos,end)=2;
++				pos=find(structmd.elements_type==60); md.flowequation.element_equation(pos,end)=3;
++				pos=find(structmd.elements_type==62); md.flowequation.element_equation(pos,end)=4;
++				pos=find(structmd.elements_type==57); md.flowequation.element_equation(pos,end)=5;
++				pos=find(structmd.elements_type==58); md.flowequation.element_equation(pos,end)=6;
++				pos=find(structmd.elements_type==61); md.flowequation.element_equation(pos,end)=7;
++			end
++			if isfield(structmd,'vertices_type') & structmd.vertices_type(end,end)>50,
++				pos=find(structmd.vertices_type==59); md.flowequation.vertex_equation(pos,end)=0;
++				pos=find(structmd.vertices_type==55); md.flowequation.vertex_equation(pos,end)=1;
++				pos=find(structmd.vertices_type==56); md.flowequation.vertex_equation(pos,end)=2;
++				pos=find(structmd.vertices_type==60); md.flowequation.vertex_equation(pos,end)=3;
++				pos=find(structmd.vertices_type==62); md.flowequation.vertex_equation(pos,end)=4;
++				pos=find(structmd.vertices_type==57); md.flowequation.vertex_equation(pos,end)=5;
++				pos=find(structmd.vertices_type==58); md.flowequation.vertex_equation(pos,end)=6;
++				pos=find(structmd.vertices_type==61); md.flowequation.vertex_equation(pos,end)=7;
++			end
++			if isfield(structmd,'rheology_law') & isnumeric(structmd.rheology_law),
++				if (structmd.rheology_law==272), md.materials.rheology_law='None';      end
++				if (structmd.rheology_law==368), md.materials.rheology_law='Paterson';  end
++				if (structmd.rheology_law==369), md.materials.rheology_law='Arrhenius'; end
++			end
++			if isfield(structmd,'groundingline_migration') & isnumeric(structmd.groundingline_migration),
++				if (structmd.groundingline_migration==272), md.groundingline.migration='None';      end
++				if (structmd.groundingline_migration==273), md.groundingline.migration='AgressiveMigration';  end
++				if (structmd.groundingline_migration==274), md.groundingline.migration='SoftMigration'; end
++			end
++			if isfield(structmd,'control_type') & isnumeric(structmd.control_type),
++				if (structmd.control_type==143), md.inversion.control_parameters={'FrictionCoefficient'}; end
++				if (structmd.control_type==190), md.inversion.control_parameters={'RheologyBbar'}; end
++				if (structmd.control_type==147), md.inversion.control_parameters={'Thickeningrate'}; end
++			end
++			if isfield(structmd,'cm_responses') & ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
++				pos=find(structmd.cm_responses==166); md.inversion.cost_functions(pos)=101;
++				pos=find(structmd.cm_responses==167); md.inversion.cost_functions(pos)=102;
++				pos=find(structmd.cm_responses==168); md.inversion.cost_functions(pos)=103;
++				pos=find(structmd.cm_responses==169); md.inversion.cost_functions(pos)=104;
++				pos=find(structmd.cm_responses==170); md.inversion.cost_functions(pos)=105;
++				pos=find(structmd.cm_responses==165); md.inversion.cost_functions(pos)=201;
++				pos=find(structmd.cm_responses==389); md.inversion.cost_functions(pos)=501;
++				pos=find(structmd.cm_responses==388); md.inversion.cost_functions(pos)=502;
++				pos=find(structmd.cm_responses==382); md.inversion.cost_functions(pos)=503;
++			end
++
++			if isfield(structmd,'artificial_diffusivity') & structmd.artificial_diffusivity==2,
++					md.thermal.stabilization=2;
++					md.masstransport.stabilization=1;
++					md.balancethickness.stabilization=1;
++			end
++			if isnumeric(md.masstransport.hydrostatic_adjustment)
++				if md.masstransport.hydrostatic_adjustment==269,
++					md.masstransport.hydrostatic_adjustment='Incremental';
++				else
++					md.masstransport.hydrostatic_adjustment='Absolute';
++				end
++			end
++
++			%New fields
++			if ~isfield(structmd,'upperelements');
++				md.mesh.upperelements=transpose(1:md.mesh.numberofelements)+md.mesh.numberofelements2d;
++				md.mesh.upperelements(end-md.mesh.numberofelements2d+1:end)=NaN;
++			end
++			if ~isfield(structmd,'lowerelements');
++				md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
++				md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
++			end
++			if ~isfield(structmd,'diagnostic_ref');
++				md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++			end
++			if ~isfield(structmd,'loadingforce');
++				md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
++			end
++
++			%2013 August 9
++			if isfield(structmd,'prognostic') & isa(structmd.prognostic,'prognostic'),
++				disp('Recovering old prognostic class');
++				md.masstransport=masstransport(structmd.prognostic);
++			end
++			%2013 August 9
++			if isfield(structmd,'diagnostic') & (isa(structmd.diagnostic,'diagnostic') || isa(structmd.diagnostic,'stressbalance')),
++				disp('Recovering old diagnostic class');
++				md.stressbalance=stressbalance(structmd.diagnostic);
++			end
++		end% }}}
++		function md = setdefaultparameters(md) % {{{
++
++			%initialize subclasses
++			md.mesh             = mesh();
++			md.mask             = mask();
++			md.constants        = constants();
++			md.geometry         = geometry();
++			md.initialization   = initialization();
++			md.surfaceforcings  = surfaceforcings();
++			md.basalforcings    = basalforcings();
++			md.friction         = friction();
++			md.rifts            = rifts();
++			md.timestepping     = timestepping();
++			md.groundingline    = groundingline();
++			md.materials        = matice();
++			md.damage           = damage();
++			md.flowequation     = flowequation();
++			md.debug            = debug();
++			md.verbose          = verbose();
++			md.settings         = settings();
++			md.toolkits         = toolkits();
++			md.cluster          = generic();
++			md.balancethickness = balancethickness();
++			md.stressbalance       = stressbalance();
++			md.hydrology        = hydrologyshreve();
++			md.masstransport       = masstransport();
++			md.thermal          = thermal();
++			md.steadystate      = steadystate();
++			md.transient        = transient();
++			md.gia              = gia();
++			md.autodiff         = autodiff();
++			md.flaim            = flaim();
++			md.inversion        = inversion();
++			md.qmu              = qmu();
++			md.radaroverlay     = radaroverlay();
++			md.results          = struct();
++			md.miscellaneous    = miscellaneous();
++			md.private          = private();
++		end
++		%}}}
++		function disp(obj) % {{{
++			disp(sprintf('%19s: %-22s -- %s','mesh'            ,['[1x1 ' class(obj.mesh) ']'],'mesh properties'));
++			disp(sprintf('%19s: %-22s -- %s','mask'            ,['[1x1 ' class(obj.mask) ']'],'defines grounded and floating elements'));
++			disp(sprintf('%19s: %-22s -- %s','geometry'        ,['[1x1 ' class(obj.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...'));
++			disp(sprintf('%19s: %-22s -- %s','constants'       ,['[1x1 ' class(obj.constants) ']'],'physical constants'));
++			disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(obj.surfaceforcings) ']'],'surface forcings'));
++			disp(sprintf('%19s: %-22s -- %s','basalforcings'   ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings'));
++			disp(sprintf('%19s: %-22s -- %s','materials'       ,['[1x1 ' class(obj.materials) ']'],'material properties'));
++			disp(sprintf('%19s: %-22s -- %s','damage'          ,['[1x1 ' class(obj.damage) ']'],'damage propagation laws'));
++			disp(sprintf('%19s: %-22s -- %s','friction'        ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties'));
++			disp(sprintf('%19s: %-22s -- %s','flowequation'    ,['[1x1 ' class(obj.flowequation) ']'],'flow equations'));
++			disp(sprintf('%19s: %-22s -- %s','timestepping'    ,['[1x1 ' class(obj.timestepping) ']'],'time stepping for transient models'));
++			disp(sprintf('%19s: %-22s -- %s','initialization'  ,['[1x1 ' class(obj.initialization) ']'],'initial guess/state'));
++			disp(sprintf('%19s: %-22s -- %s','rifts'           ,['[1x1 ' class(obj.rifts) ']'],'rifts properties'));
++			disp(sprintf('%19s: %-22s -- %s','debug'           ,['[1x1 ' class(obj.debug) ']'],'debugging tools (valgrind, gprof)'));
++			disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
++			disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
++			disp(sprintf('%19s: %-22s -- %s','toolkits'          ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
++			disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
++			disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
++			disp(sprintf('%19s: %-22s -- %s','stressbalance'      ,['[1x1 ' class(obj.stressbalance) ']'],'parameters for stressbalance solution'));
++			disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
++			disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
++			disp(sprintf('%19s: %-22s -- %s','masstransport'      ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
++			disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
++			disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
++			disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
++			disp(sprintf('%19s: %-22s -- %s','gia'       ,['[1x1 ' class(obj.gia) ']'],'parameters for gia solution'));
++			disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(obj.autodiff) ']'],'automatic differentiation parameters'));
++			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
++			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
++			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
++			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
++			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
++			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
++		end % }}}
++		function memory(obj) % {{{
++
++		disp(sprintf('\nMemory imprint:\n'));
++
++		fields=properties('model');
++		mem=0;
++
++		for i=1:length(fields),
++			field=obj.(fields{i});
++			s=whos('field'); 
++			mem=mem+s.bytes/1e6;
++			disp(sprintf('%19s: %6.2f Mb',fields{i},s.bytes/1e6));
++		end
++		disp(sprintf('%19s--%10s','--------------','--------------'));
++		disp(sprintf('%19s: %g Mb','Total',mem));
++		end % }}}
++		function netcdf(obj,filename) % {{{
++		%NETCDF - save model as netcdf
++		%
++		%   Usage:
++		%      netcdf(md,filename)
++		%
++		%   Example:
++		%      netcdf(md,'model.nc');
++
++		disp('Saving model as NetCDF');
++		%1. Create NetCDF file
++		ncid=netcdf.create(filename,'CLOBBER');
++		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4');
++		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);
++		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER'));
++		netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now));
++
++		%Preallocate variable id, needed to write variables in netcdf file
++		var_id=zeros(1000,1);%preallocate
++
++		for step=1:2,
++			counter=0;
++			[var_id,counter]=structtonc(ncid,'md',obj,0,var_id,counter,step);
++			if step==1, netcdf.endDef(ncid); end
++		end
++
++		if counter>1000,
++			warning(['preallocation of var_id need to be updated from ' num2str(1000) ' to ' num2str(counter)]);
++		end
++
++		netcdf.close(ncid)
++		end % }}}
++		function xylim(obj) % {{{
++
++			xlim([min(obj.mesh.x) max(obj.mesh.x)]);
++			ylim([min(obj.mesh.y) max(obj.mesh.y)])
++		end % }}}
++		function md=upload(md) % {{{
++		%the goal of this routine is to upload the model onto a server, and to empty it.
++		%So first, save the model with a unique name and upload the file to the server: 
++		random_part=fix(rand(1)*10000);
++		id=[md.miscellaneous.name '-' regexprep(datestr(now),'[^\w'']','') '-' num2str(random_part)  '-' getenv('USER') '-' oshostname() '.upload']; 
++		eval(['save ' id ' md']);
++
++		%Now, upload the file: 
++		issmscpout(md.settings.upload_server,md.settings.upload_path,md.settings.upload_login,md.settings.upload_port,{id},1);
++
++		%Now, empty this model of everything except settings, and record name of file we just uploaded!
++		settings_back=md.settings;
++		md=model();
++		md.settings=settings_back;
++		md.settings.upload_filename=id;
++
++		%get locally rid of file that was uploaded
++		eval(['delete ' id]);
++
++		end % }}}
++		function md=download(md) % {{{
++
++		%the goal of this routine is to download the internals of the current model from a server, because 
++		%this model is empty, except for the settings which tell us where to go and find this model!
++
++		%Download the file: 
++		issmscpin(md.settings.upload_server, md.settings.upload_login, md.settings.upload_port, md.settings.upload_path, {md.settings.upload_filename});
++
++		name=md.settings.upload_filename;
++
++		%Now, load this model: 
++		md=loadmodel(md.settings.upload_filename);
++
++		%get locally rid of file that was downloaded
++		eval(['delete ' name]);
++
++		end % }}}
++	end
++ end
+Index: ../trunk-jpl/src/m/classes/spheremesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/spheremesh.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/spheremesh.m	(revision 16287)
+@@ -0,0 +1,123 @@
++%SPHEREMESH class definition
++%
++%   Usage:
++%      spheremesh=spheremesh();
++
++classdef spheremesh
++	properties (SetAccess=public) 
++		x                           = NaN;
++		y                           = NaN;
++		z                           = NaN;
++		r                           = NaN;
++		theta                       = NaN;
++		phi                         = NaN
++		elements                    = NaN
++		dimension                   = 0;
++		numberoflayers              = 0;
++		numberofelements            = 0;
++		numberofvertices            = 0;
++
++		vertexconnectivity          = NaN
++		elementconnectivity         = NaN
++		average_vertex_connectivity = 0;
++	end
++	methods
++		function obj = spheremesh(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%the connectivity is the avergaded number of nodes linked to a
++			%given node through an edge. This connectivity is used to initially
++			%allocate memory to the stiffness matrix. A value of 16 seems to
++			%give a good memory/time ration. This value can be checked in
++			%trunk/test/Miscellaneous/runme.m
++			obj.average_vertex_connectivity=25;
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			md = checkfield(md,'spheremesh.x','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.y','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.z','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.r','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.theta','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.phi','NaN',1,'size',[md.spheremesh.numberofvertices 1]);
++			md = checkfield(md,'spheremesh.elements','NaN',1,'>',0,'values',1:md.spheremesh.numberofvertices);
++			if(md.spheremesh.dimension==2),
++				md = checkfield(md,'spheremesh.elements','size',[md.spheremesh.numberofelements 3]);
++			else
++				md = checkfield(md,'spheremesh.elements','size',[md.spheremesh.numberofelements 6]);
++			end
++			if any(~ismember(1:md.spheremesh.numberofvertices,sort(unique(md.spheremesh.elements(:)))));
++				md = checkmessage(md,'orphan nodes have been found. Check the spheremesh outline');
++			end
++			md = checkfield(md,'spheremesh.dimension','values',[2 3]);
++			md = checkfield(md,'spheremesh.numberoflayers','>=',0);
++			md = checkfield(md,'spheremesh.numberofelements','>',0);
++			md = checkfield(md,'spheremesh.numberofvertices','>',0);
++			if (md.spheremesh.dimension==2),
++				md = checkfield(md,'spheremesh.average_vertex_connectivity','>=',9,'message','''spheremesh.average_vertex_connectivity'' should be at least 9 in 2d');
++			else
++				md = checkfield(md,'spheremesh.average_vertex_connectivity','>=',24,'message','''spheremesh.average_vertex_connectivity'' should be at least 24 in 3d');
++			end
++			md = checkfield(md,'spheremesh.elementconnectivity','size',[md.spheremesh.numberofelements 3],'NaN',1);
++
++			%Solution specific checks
++			switch(solution),
++				case MasstransportSolutionEnum(),
++					if md.masstransport.stabilization==3,
++						md = checkfield(md,'spheremesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d spheremeshes');
++					end
++				case TransientSolutionEnum(),
++					if md.transient.ismasstransport & md.masstransport.stabilization==3,
++						md = checkfield(md,'spheremesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d spheremeshes');
++					end
++				case ThermalSolutionEnum(),
++					md = checkfield(md,'spheremesh.dimension','values',3,'message','thermal solution only supported on 3d spheremeshes');
++			end
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Mesh:')); 
++
++			disp(sprintf('\n      Elements and vertices:'));
++			fielddisplay(obj,'numberofelements','number of elements');
++			fielddisplay(obj,'numberofvertices','number of vertices');
++			fielddisplay(obj,'elements','vertex indices of the mesh elements');
++			fielddisplay(obj,'x','vertices x coordinate [m]');
++			fielddisplay(obj,'y','vertices y coordinate [m]');
++			fielddisplay(obj,'z','vertices z coordinate [m]');
++			fielddisplay(obj,'r','vertices r coordinate [m]');
++			fielddisplay(obj,'theta','vertices theta coordinate [degrees]');
++			fielddisplay(obj,'phi','vertices phi coordinate [degrees]');
++
++			disp(sprintf('\n      Properties:'));
++			fielddisplay(obj,'dimension','spheremesh dimension (2d or 3d)');
++			fielddisplay(obj,'numberoflayers','number of extrusion layers');
++
++			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
++			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
++			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','z','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','r','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','theta','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','phi','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
++			WriteData(fid,'object',obj,'fieldname','dimension','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','numberoflayers','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
++			WriteData(fid,'object',obj,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 16287)
+@@ -0,0 +1,107 @@
++import numpy
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from checkfield import *
++from MatlabFuncs import *
++
++class mesh(object):
++	"""
++	MESH class definition
++
++	   Usage:
++	      mesh=mesh();
++	"""
++
++	def __init__(self): # {{{
++		self.x                           = float('NaN');
++		self.y                           = float('NaN');
++		self.elements                    = float('NaN');
++		self.numberofelements            = 0;
++		self.numberofvertices            = 0;
++		self.numberofedges               = 0;
++		
++		self.lat                         = float('NaN');
++		self.long                        = float('NaN');
++		self.hemisphere                  = float('NaN');
++
++		self.vertexonboundary            = float('NaN');
++		self.edges                       = float('NaN');
++		self.segments                    = float('NaN');
++		self.segmentmarkers              = float('NaN');
++		self.vertexconnectivity          = float('NaN');
++		self.elementconnectivity         = float('NaN');
++		self.average_vertex_connectivity = 0;
++
++		self.extractedvertices           = float('NaN');
++		self.extractedelements           = float('NaN');
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#}}}
++	def __repr__(self): # {{{
++		string="   2d Mesh:" 
++
++		string="%s\n%s"%(string,"\n      Elements and vertices:")
++		string="%s\n%s"%(string,fielddisplay(self,"numberofelements","number of elements"))
++		string="%s\n%s"%(string,fielddisplay(self,"numberofvertices","number of vertices"))
++		string="%s\n%s"%(string,fielddisplay(self,"elements","vertex indices of the mesh elements"))
++		string="%s\n%s"%(string,fielddisplay(self,"x","vertices x coordinate [m]"))
++		string="%s\n%s"%(string,fielddisplay(self,"y","vertices y coordinate [m]"))
++		string="%s\n%s"%(string,fielddisplay(self,"edges","edges of the 2d mesh (vertex1 vertex2 element1 element2)"))
++		string="%s\n%s"%(string,fielddisplay(self,"numberofedges","number of edges of the 2d mesh"))
++
++		string="%s%s"%(string,"\n\n      Properties:")
++		string="%s\n%s"%(string,fielddisplay(self,"vertexonboundary","vertices on the boundary of the domain flag list"))
++		string="%s\n%s"%(string,fielddisplay(self,"segments","edges on domain boundary (vertex1 vertex2 element)"))
++		string="%s\n%s"%(string,fielddisplay(self,"segmentmarkers","number associated to each segment"))
++		string="%s\n%s"%(string,fielddisplay(self,"vertexconnectivity","list of vertices connected to vertex_i"))
++		string="%s\n%s"%(string,fielddisplay(self,"elementconnectivity","list of vertices connected to element_i"))
++		string="%s\n%s"%(string,fielddisplay(self,"average_vertex_connectivity","average number of vertices connected to one vertex"))
++
++		string="%s%s"%(string,"\n\n      Extracted model:")
++		string="%s\n%s"%(string,fielddisplay(self,"extractedvertices","vertices extracted from the model"))
++		string="%s\n%s"%(string,fielddisplay(self,"extractedelements","elements extracted from the model"))
++
++		string="%s%s"%(string,"\n\n      Projection:")
++		string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude [degrees]"))
++		string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude [degrees]"))
++		string="%s\n%s"%(string,fielddisplay(self,"hemisphere","Indicate hemisphere 'n' or 's'"))
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		
++		#the connectivity is the averaged number of nodes linked to a
++		#given node through an edge. This connectivity is used to initially
++		#allocate memory to the stiffness matrix. A value of 16 seems to
++		#give a good memory/time ration. This value can be checked in
++		#trunk/test/Miscellaneous/runme.m
++		self.average_vertex_connectivity=25
++
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		md = checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'mesh.y','NaN',1,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'mesh.z','NaN',1,'size',[md.mesh.numberofvertices])
++		md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',numpy.arange(1,md.mesh.numberofvertices+1))
++		md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements,3])
++		if numpy.any(numpy.logical_not(ismember(numpy.arange(1,md.mesh.numberofvertices+1),md.mesh.elements))):
++			md.checkmessage("orphan nodes have been found. Check the mesh outline")
++		md = checkfield(md,'mesh.numberofelements','>',0)
++		md = checkfield(md,'mesh.numberofvertices','>',0)
++		md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message',"'mesh.average_vertex_connectivity' should be at least 9 in 2d")
++		if solution==ThermalSolutionEnum():
++			md.checkmessage("thermal not supported for 2d mesh")
++
++		return md
++	# }}}
++	def marshall(self,md,fid):    # {{{
++		WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2)
++		WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer')
++		WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer')
++		WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer')
++	# }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16287-16288.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16287-16288.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16287-16288.diff	(revision 16556)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 16287)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 16288)
+@@ -16,7 +16,6 @@
+ 					./classes/qmu/*.m \
+ 					./classes/qmu/@dakota_method/*.m \
+ 					./classes/clusters/*.m \
+-					./classes/model/*.m \
+ 					./consistency/*.m \
+ 					./array/*.m \
+ 					./boundaryconditions/*.m \
+@@ -59,7 +58,6 @@
+ bin_SCRIPTS += ./enum/*.py \
+ 					./classes/*.py \
+ 					./classes/clusters/*.py \
+-					./classes/model/*.py \
+ 					./consistency/*.py \
+ 					./boundaryconditions/*.py \
+ 					./exp/*.py \
Index: issm/oecreview/Archive/16133-16554/ISSM-16288-16289.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16288-16289.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16288-16289.diff	(revision 16556)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/shared/String/stricmp.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/stricmp.cpp	(revision 16288)
++++ ../trunk-jpl/src/c/shared/String/stricmp.cpp	(revision 16289)
+@@ -1,11 +0,0 @@
+-/* \file stricmp.cpp
+- * \brief bypass non-standard stricmp
+- */
+-
+-#ifndef WIN32
+-
+-#include <strings.h>
+-int stricmp(const char* a,const char* b){
+-	return  strcasecmp(a,b);
+-}
+-#endif
+Index: ../trunk-jpl/src/c/shared/String/sharedstring.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 16288)
++++ ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 16289)
+@@ -6,11 +6,6 @@
+ #define  _SHAREDSTRING_H_
+ 
+ int  DescriptorIndex(char* root, int* pindex,char* descriptor);
+-
+-#ifndef WIN32
+-int stricmp(const char* a,const char* b);
+-#endif
+-
+ void ApiPrintf(const char* string);
+ 
+ #endif //ifndef _SHAREDSTRING_H_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16288)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16289)
+@@ -1000,8 +1000,7 @@
+ endif
+ #}}}
+ #Overload library, to overload any non-standard symbols. {{{
+-libISSMOverload_a_SOURCES = ./shared/String/stricmp.cpp\
+-							./shared/String/ApiPrintf.cpp
++libISSMOverload_a_SOURCES = ./shared/String/ApiPrintf.cpp
+ 
+ libISSMOverload_a_CFLAGS  = -fPIC -D_C_ $(COPTFLAGS) $(CFLAGS)
+ #}}}
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16288)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16289)
+@@ -543,8 +543,7 @@
+ 
+ # API Print {{{
+ if(NOT PYTHON AND NOT MATLAB)
+-    add_library(ISSMOverload STATIC ./shared/String/stricmp.cpp
+-            ./shared/String/ApiPrintf.cpp)
++    add_library(ISSMOverload STATIC ./shared/String/ApiPrintf.cpp)
+     list(APPEND issm_deps ISSMOverload)
+ else(NOT PYTHON AND NOT MATLAB)
+     message(FATAL_ERROR "Python and Matlab are not supported yet.")
Index: issm/oecreview/Archive/16133-16554/ISSM-16289-16290.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16289-16290.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16289-16290.diff	(revision 16556)
@@ -0,0 +1,164 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16290)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16290)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16290)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16290)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want Shreve?*/
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16290)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16290)
+@@ -18,12 +18,12 @@
+ 	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+ 	}
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16290)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16290)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16290)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want DC?*/
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16290)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16289)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16290)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16290-16291.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16290-16291.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16290-16291.diff	(revision 16556)
@@ -0,0 +1,1391 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16291)
+@@ -24,16 +24,16 @@
+ 	bool   save_results,dakota_analysis;
+ 	bool   time_adapt=false;
+ 	int    output_frequency;
+-	int    dim,groundingline_migration;
++	int    meshtype,groundingline_migration;
+ 	int    numoutputs         = 0;
+-	int    *requested_outputs = NULL;
++	int   *requested_outputs = NULL;
+ 
+ 	/*intermediary: */
+ 	int    step;
+ 	IssmDouble time;
+ 
+ 	//first recover parameters common to all solutions
+-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
+ 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
+ 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+@@ -62,7 +62,7 @@
+ 		if(isstressbalance){
+ 			InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
+ 			InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
+-			if(dim==3){
++			if(meshtype==Mesh3DEnum){
+ 				InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
+ 				if(isFS)InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
+ 			}
+@@ -74,8 +74,8 @@
+ 			InputDuplicatex(femmodel,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
+ 		}
+ 		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
+-		if(dim==2)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+-		if(isthermal && dim==3){
++		if(meshtype==Mesh2DhorizontalEnum)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
++		if(isthermal && meshtype==Mesh3DEnum){
+ 			//Update Vertex Position after updating Thickness and Bed
+ 			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+ 			femmodel->UpdateVertexPositionsx();
+@@ -111,7 +111,7 @@
+ 		 save_results=false;
+ 		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
+ 
+-		if(isthermal && dim==3){
++		if(isthermal && meshtype==Mesh3DEnum){
+ 			if(VerboseSolution()) _printf0_("   computing temperatures\n");
+ 			#ifdef _HAVE_THERMAL_
+ 			if(isenthalpy==0){
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16291)
+@@ -13,7 +13,7 @@
+ 
+ 	/*parameters: */
+ 	bool  dakota_analysis;
+-	int   dim;
++	int   meshtype;
+ 	bool  isSIA,isSSA,isL1L2,isHO,isFS;
+ 	bool  conserve_loads    = true;
+ 	bool  save_results;
+@@ -23,7 +23,7 @@
+ 	int  *requested_outputs = NULL;
+ 
+ 	/* recover parameters:*/
+-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+ 	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
+ 	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
+@@ -77,7 +77,7 @@
+ 		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
+ 	}
+ 
+-	if (dim==3 && (isSIA || isSSA || isL1L2 || isHO)){
++	if (meshtype==Mesh3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
+ 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+ 		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
+@@ -89,7 +89,7 @@
+ 		InputToResultx(femmodel,VyEnum);
+ 		InputToResultx(femmodel,VelEnum);
+ 		InputToResultx(femmodel,PressureEnum);
+-		if(dim==3) InputToResultx(femmodel,VzEnum);
++		if(meshtype==Mesh3DEnum) InputToResultx(femmodel,VzEnum);
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16291)
+@@ -20,7 +20,6 @@
+ 	int        num_controls,num_responses;
+ 	int        nsteps;
+ 	IssmDouble tol_cm;
+-	int        dim;
+ 	int        solution_type;
+ 	bool       isFS;
+ 	bool       dakota_analysis = false;
+@@ -52,7 +51,6 @@
+ 	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
+ 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
+ 	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
+-	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16290)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16291)
+@@ -182,7 +182,6 @@
+ 	MaterialsMantleShearModulusEnum,
+ 	MaterialsMantleDensityEnum,
+ 	MeshAverageVertexConnectivityEnum,
+-	MeshDimensionEnum,
+ 	MeshElementonbedEnum,
+ 	MeshElementonsurfaceEnum,
+ 	MeshElements2dEnum,
+@@ -199,6 +198,10 @@
+ 	MeshXEnum,
+ 	MeshYEnum,
+ 	MeshZEnum,
++	MeshTypeEnum,
++	Mesh2DhorizontalEnum,
++	Mesh2DverticalEnum,
++	Mesh3DEnum,
+ 	MiscellaneousNameEnum, //FIXME: only used by qmu, should not be marshalled (already in queueing script)
+ 	MasstransportHydrostaticAdjustmentEnum,
+ 	MasstransportIsfreesurfaceEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16291)
+@@ -190,7 +190,6 @@
+ 		case MaterialsMantleShearModulusEnum : return "MaterialsMantleShearModulus";
+ 		case MaterialsMantleDensityEnum : return "MaterialsMantleDensity";
+ 		case MeshAverageVertexConnectivityEnum : return "MeshAverageVertexConnectivity";
+-		case MeshDimensionEnum : return "MeshDimension";
+ 		case MeshElementonbedEnum : return "MeshElementonbed";
+ 		case MeshElementonsurfaceEnum : return "MeshElementonsurface";
+ 		case MeshElements2dEnum : return "MeshElements2d";
+@@ -207,6 +206,10 @@
+ 		case MeshXEnum : return "MeshX";
+ 		case MeshYEnum : return "MeshY";
+ 		case MeshZEnum : return "MeshZ";
++		case MeshTypeEnum : return "MeshType";
++		case Mesh2DhorizontalEnum : return "Mesh2Dhorizontal";
++		case Mesh2DverticalEnum : return "Mesh2Dvertical";
++		case Mesh3DEnum : return "Mesh3D";
+ 		case MiscellaneousNameEnum : return "MiscellaneousName";
+ 		case MasstransportHydrostaticAdjustmentEnum : return "MasstransportHydrostaticAdjustment";
+ 		case MasstransportIsfreesurfaceEnum : return "MasstransportIsfreesurface";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16291)
+@@ -193,7 +193,6 @@
+ 	      else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
+ 	      else if (strcmp(name,"MaterialsMantleDensity")==0) return MaterialsMantleDensityEnum;
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+-	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+@@ -210,6 +209,10 @@
+ 	      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 if (strcmp(name,"MeshType")==0) return MeshTypeEnum;
++	      else if (strcmp(name,"Mesh2Dhorizontal")==0) return Mesh2DhorizontalEnum;
++	      else if (strcmp(name,"Mesh2Dvertical")==0) return Mesh2DverticalEnum;
++	      else if (strcmp(name,"Mesh3D")==0) return Mesh3DEnum;
+ 	      else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
+ 	      else if (strcmp(name,"MasstransportHydrostaticAdjustment")==0) return MasstransportHydrostaticAdjustmentEnum;
+ 	      else if (strcmp(name,"MasstransportIsfreesurface")==0) return MasstransportIsfreesurfaceEnum;
+@@ -256,13 +259,13 @@
+ 	      else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
+-	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+-	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+-	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
++	      if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
++	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
++	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
++	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+@@ -379,13 +382,13 @@
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+-	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Matice")==0) return MaticeEnum;
++	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
++	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
++	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+ 	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+@@ -502,13 +505,13 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
++	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
++	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+Index: ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16290)
++++ ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16291)
+@@ -10,7 +10,7 @@
+ /* local prototypes: */
+ template <class doubletype> 
+ int MeshPartitionx(int** pepart, int** pnpart, int numberofelements,int numberofnodes,int* elements,
+-		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int dim,int num_procs){
++		int numberofelements2d,int numberofnodes2d,doubletype* elements2d,int numlayers,int elements_width, int meshtype,int num_procs){
+ 
+ 	int noerr=1;
+ 	int i,j;
+@@ -30,81 +30,85 @@
+ 	int  numflag=0;
+ 	int  edgecut=1;
+ 
+-	if(dim==2){
+-		epart=xNew<int>(numberofelements);
+-		npart=xNew<int>(numberofnodes);
+-		index=xNew<int>(elements_width*numberofelements);
+-		for (i=0;i<numberofelements;i++){
+-			for (j=0;j<elements_width;j++){
+-				*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
++	switch(meshtype){
++		case Mesh2DhorizontalEnum:
++			epart=xNew<int>(numberofelements);
++			npart=xNew<int>(numberofnodes);
++			index=xNew<int>(elements_width*numberofelements);
++			for (i=0;i<numberofelements;i++){
++				for (j=0;j<elements_width;j++){
++					*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
++				}
+ 			}
+-		}
+ 
+-		/*Partition using Metis:*/
+-		if (num_procs>1){
+-			#ifdef _HAVE_METIS_
+-			METIS_PartMeshNodalPatch(&numberofelements,&numberofnodes, index, &etype, &numflag, &num_procs, &edgecut, epart, npart);
+-			#else
+-			_error_("metis has not beed installed. Cannot run with more than 1 cpu");
+-			#endif
+-		}
+-		else if (num_procs==1){
+-			/*METIS does not know how to deal with one cpu only!*/
+-			for (i=0;i<numberofelements;i++) epart[i]=0;
+-			for (i=0;i<numberofnodes;i++)    npart[i]=0;
+-		}
+-		else _error_("At least one processor is required");
+-	}
+-	else{
+-		/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
++			/*Partition using Metis:*/
++			if (num_procs>1){
++#ifdef _HAVE_METIS_
++				METIS_PartMeshNodalPatch(&numberofelements,&numberofnodes, index, &etype, &numflag, &num_procs, &edgecut, epart, npart);
++#else
++				_error_("metis has not beed installed. Cannot run with more than 1 cpu");
++#endif
++			}
++			else if (num_procs==1){
++				/*METIS does not know how to deal with one cpu only!*/
++				for (i=0;i<numberofelements;i++) epart[i]=0;
++				for (i=0;i<numberofnodes;i++)    npart[i]=0;
++			}
++			else _error_("At least one processor is required");
++			break;
++		case Mesh3DEnum:
++			/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
+ 
+-		/*First build concatenated 2d mesh  from 2d_coll and 2d_noncoll: */
+-		epart2d=xNew<int>(numberofelements2d);
+-		npart2d=xNew<int>(numberofnodes2d); 
+-		index2d=xNew<int>(3*numberofelements2d);
++			/*First build concatenated 2d mesh  from 2d_coll and 2d_noncoll: */
++			epart2d=xNew<int>(numberofelements2d);
++			npart2d=xNew<int>(numberofnodes2d); 
++			index2d=xNew<int>(3*numberofelements2d);
+ 
+-		for (i=0;i<numberofelements2d;i++){
+-			for (j=0;j<3;j++){
+-				*(index2d+3*i+j)=reCast<int>(*(elements2d+3*i+j))-1; //-1 for C indexing in Metis
++			for (i=0;i<numberofelements2d;i++){
++				for (j=0;j<3;j++){
++					*(index2d+3*i+j)=reCast<int>(*(elements2d+3*i+j))-1; //-1 for C indexing in Metis
++				}
+ 			}
+-		}
+ 
+-		/*Partition using Metis:*/
+-		if (num_procs>1){
+-			#ifdef _HAVE_METIS_
+-			METIS_PartMeshNodalPatch(&numberofelements2d,&numberofnodes2d, index2d, &etype2d, &numflag, &num_procs, &edgecut, epart2d, npart2d);
+-			#else
+-			_error_("metis has not beed installed. Cannot run with more than 1 cpu");
+-			#endif
+-		}
+-		else if (num_procs==1){
+-			/*METIS does not know how to deal with one cpu only!*/
+-			for (i=0;i<numberofelements2d;i++) epart2d[i]=0;
+-			for (i=0;i<numberofnodes2d;i++)    npart2d[i]=0;
+-		}
+-		else _error_("At least one processor is required");
++			/*Partition using Metis:*/
++			if (num_procs>1){
++#ifdef _HAVE_METIS_
++				METIS_PartMeshNodalPatch(&numberofelements2d,&numberofnodes2d, index2d, &etype2d, &numflag, &num_procs, &edgecut, epart2d, npart2d);
++#else
++				_error_("metis has not beed installed. Cannot run with more than 1 cpu");
++#endif
++			}
++			else if (num_procs==1){
++				/*METIS does not know how to deal with one cpu only!*/
++				for (i=0;i<numberofelements2d;i++) epart2d[i]=0;
++				for (i=0;i<numberofnodes2d;i++)    npart2d[i]=0;
++			}
++			else _error_("At least one processor is required");
+ 
+-		/*Extrude epart2d to epart, using numlayers: */
+-		epart=xNew<int>(numberofelements);
++			/*Extrude epart2d to epart, using numlayers: */
++			epart=xNew<int>(numberofelements);
+ 
+-		count=0;
+-		for(i=0;i<(numlayers-1);i++){
+-			for(j=0;j<numberofelements2d;j++){
+-				epart[count]=epart2d[j];
+-				count++;
++			count=0;
++			for(i=0;i<(numlayers-1);i++){
++				for(j=0;j<numberofelements2d;j++){
++					epart[count]=epart2d[j];
++					count++;
++				}
+ 			}
+-		}
+ 
+-		/*Extrude npart2d to npart, using numlayers: */
+-		npart=xNew<int>(numberofnodes);
++			/*Extrude npart2d to npart, using numlayers: */
++			npart=xNew<int>(numberofnodes);
+ 
+-		count=0;
+-		for(i=0;i<(numlayers);i++){
+-			for(j=0;j<numberofnodes2d;j++){
+-				npart[count]=npart2d[j];
+-				count++;
++			count=0;
++			for(i=0;i<(numlayers);i++){
++				for(j=0;j<numberofnodes2d;j++){
++					npart[count]=npart2d[j];
++					count++;
++				}
+ 			}
+-		}
++			break;
++		default:
++			_error_("mesh type "<<EnumToStringx(meshtype)<<" not supported yet");
+ 	}
+ 
+ 	/*Assign output pointer:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16291)
+@@ -63,7 +63,7 @@
+ 		if(isgroundingline) elements->InputDuplicate(MaskGroundediceLevelsetEnum,QmuMaskGroundediceLevelsetEnum);
+ 	}
+ 
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16291)
+@@ -15,10 +15,10 @@
+ 	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+ 
+ 	/*Check in 3d*/
+-	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
++	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16291)
+@@ -29,7 +29,7 @@
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*return if 2d mesh*/
+-	if(iomodel->dim==2) return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(&spcvector,&M,&N,ThermalSpctemperatureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16291)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16291)
+@@ -12,7 +12,7 @@
+ void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->dim==2)return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	UpdateElementsFreeSurfaceBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->dim==2)return;
++	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	/*Finite element type*/
+ 	int finiteelement = P1Enum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp	(revision 16291)
+@@ -14,7 +14,7 @@
+ 	bool my_face;
+ 
+ 	/*Check Iomodel properties*/
+-	if(iomodel->dim!=2) _error_("only 2d model are supported");
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) _error_("only 2d model are supported");
+ 
+ 	/*Get faces and elements*/
+ 	CreateFaces(iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16291)
+@@ -22,7 +22,7 @@
+ 	int *elementedges_markers = NULL;
+ 
+ 	/*Mesh dependent variables*/
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementnbv = 3;
+ 		elementnbe = 3;
+ 		elementedges         = xNew<int>(elementnbe*2);
+@@ -31,7 +31,7 @@
+ 		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
+ 		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+ 	}
+-	else if(iomodel->dim==3){
++	else if(iomodel->meshtype==Mesh3DEnum){
+ 		elementnbv = 6;
+ 		elementnbe = 9;
+ 		elementedges         = xNew<int>(elementnbe*2);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16291)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want Shreve?*/
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16291)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16291)
+@@ -23,7 +23,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16291)
+@@ -15,10 +15,10 @@
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+ 	/*Check in 3d*/
+-	if(stabilization==3 && iomodel->dim==3) _error_("DG 3d not implemented yet");
++	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16291)
+@@ -41,7 +41,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+ 
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	CreateNodesBalancevelocity(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Check in 3d*/
+-	if(iomodel->dim==3) _error_("DG 3d not implemented yet");
++	if(iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16291)
+@@ -30,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+ 	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+ 
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp	(revision 16291)
+@@ -29,7 +29,7 @@
+ 	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementswidth=3;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16291)
+@@ -34,7 +34,7 @@
+ 	materials = new Materials();
+ 
+ 	#ifdef _HAVE_3D_
+-	if(iomodel->dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+ 	#endif
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 
+@@ -43,7 +43,7 @@
+ 		if(iomodel->my_elements[i]){
+ 
+ 			/*Create and add tria element to elements dataset: */
+-			if(iomodel->dim==2) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
++			if(iomodel->meshtype==Mesh2DhorizontalEnum) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
+ 	        #ifdef _HAVE_3D_
+ 			else       elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
+ 	        #endif
+@@ -56,7 +56,7 @@
+ 			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+ 			if(dakota_analysis){
+-				if(iomodel->dim==2) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
++				if(iomodel->meshtype==Mesh2DhorizontalEnum) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+            #ifdef _HAVE_3D_
+ 				else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
+            #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	UpdateElementsFreeSurfaceTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->dim==2)return;
++	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	int finiteelement = P1Enum;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16291)
+@@ -35,7 +35,7 @@
+ 	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+ 	/*Get element width (3 or 6)*/
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementswidth=3;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 16291)
+@@ -64,7 +64,7 @@
+ 	bool* my_nodes=xNewZeroInit<bool>(3*iomodel->numberofelements);
+ 
+ 	/*First: add all the nodes of all the elements belonging to this cpu*/
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		for (i=0;i<iomodel->numberofelements;i++){
+ 			if (my_elements[i]){
+ 				my_nodes[3*i+0]=true;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16291)
+@@ -20,7 +20,7 @@
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*return if 2d mesh*/
+-	if(iomodel->dim==2) return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	CreateNodesStressbalanceVertical(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(iomodel->dim==2) return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
+ 
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	UpdateElementsStressbalanceVertical(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->dim==2)return;
++	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ 	if(iomodel->faces) return;
+ 
+ 	/*Check Iomodel properties*/
+-	if(iomodel->dim!=2)             _error_("only 2d model are supported");
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum)             _error_("only 2d model are supported");
+ 	if(iomodel->numberofvertices<3) _error_("not enough elements in mesh");
+ 	_assert_(iomodel->elements);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16291)
+@@ -160,10 +160,10 @@
+ 	iomodel->FetchData(&spcvy,&My,&Ny,StressbalanceSpcvyEnum);
+ 	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+ 	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+ 	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+ 	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+@@ -384,7 +384,7 @@
+ 			}
+ 
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (iomodel->dim==3) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
++			if (iomodel->meshtype==Mesh3DEnum) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
+ 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+ 					case SSAFSApproximationEnum:
+ 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
+@@ -409,10 +409,10 @@
+ 	iomodel->DeleteData(spcvy,StressbalanceSpcvyEnum);
+ 	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
+ 	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-	if(iomodel->dim==3)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+ 	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 	iomodel->DeleteData(surface,SurfaceEnum);
+ 	iomodel->DeleteData(z,MeshZEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16291)
+@@ -49,8 +49,8 @@
+ 			approximation = FSApproximationEnum;
+ 			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+ 		}
+-		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
+ 		CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
+ 		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16291)
+@@ -103,7 +103,7 @@
+ 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+ 	iomodel->FetchDataToInput(elements,DamageDEnum);
+ 
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16291)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16291)
+@@ -23,7 +23,7 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16291)
+@@ -21,7 +21,7 @@
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if (iomodel->dim==3){
++		if (iomodel->meshtype==Mesh3DEnum){
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i]==1)){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16291)
+@@ -17,7 +17,7 @@
+ 	/*Now, do we really want DC?*/
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+ 
+-	if(iomodel->dim==2) _error_("2d meshes not supported yet");
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+ 
+ 	/*create penalties for nodes: no node can have a temperature over the melting point*/
+ 	iomodel->FetchData(1,ThermalSpctemperatureEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16291)
+@@ -14,7 +14,7 @@
+ 	Constraints* constraints=*pconstraints;
+ 
+ 	/*Only 3d mesh supported*/
+-	if(iomodel->dim==3){
++	if(iomodel->meshtype==Mesh3DEnum){
+ 		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16291)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16291)
+@@ -12,7 +12,7 @@
+ void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->dim==2)return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16291)
+@@ -11,7 +11,7 @@
+ void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->dim==2)return;
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16291)
+@@ -9,7 +9,7 @@
+ void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*if 2d: Error*/
+-	if(iomodel->dim==2) _error_("2d meshes not supported yet");
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+ 
+ 	/*Recover pointer: */
+ 	Loads* loads=*ploads;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16291)
+@@ -10,7 +10,7 @@
+ 
+ void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+ 
+-	iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16291)
+@@ -17,10 +17,10 @@
+ 	_assert_(iomodel->elementtoedgeconnectivity);
+ 
+ 	/*Mesh dependent variables*/
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementnbe = 3;
+ 	}
+-	else if(iomodel->dim==3){
++	else if(iomodel->meshtype==Mesh3DEnum){
+ 		elementnbe = 9;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16291)
+@@ -18,7 +18,7 @@
+ void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type,int analysis_type,int analysis_counter){
+ 
+ 	int         i,j,m,k;
+-	int         numoutputs;
++	int         numoutputs,meshtype;
+ 	Parameters *parameters       = NULL;
+ 	IssmDouble *requestedoutputs = NULL;
+ 	IssmDouble  time;
+@@ -44,7 +44,7 @@
+ 	parameters = new Parameters();
+ 
+ 	/*Copy some constants from iomodel */
+-	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(MeshTypeEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
+@@ -73,7 +73,6 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsAsPatchesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
+@@ -93,7 +92,11 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
+-	
++
++	/*For stress balance only*/
++	if(iomodel->meshtype==Mesh3DEnum)
++	 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
++
+ 	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+ 	if(ispdd){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16291)
+@@ -46,9 +46,9 @@
+ 		analysis_type=analysis_type_list[i];
+ 
+ 		/*Hack for trasient runs (FIXME: to be improved)*/
+-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->dim==2) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->dim==2) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->dim==2) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
+ 		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isthermal==false) continue;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16291)
+@@ -44,9 +44,7 @@
+ 	num_procs = IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+-	iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
+-	iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
+-	iomodel->Constant(&numlayers,MeshNumberoflayersEnum);
++
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+ 	/*First, check that partitioning has not yet been carryed out. Just check whether my_elements pointers is not already assigned a value: */
+@@ -54,15 +52,25 @@
+ 
+ 	/*Number of vertices per elements, needed to correctly retrieve data: */
+ 	/*Determine parallel partitioning of elements: we use Metis for now. First load the data, then partition*/
+-	if(iomodel->dim==2){
+-		elements_width=3; //tria elements
++	switch(iomodel->meshtype){
++		case Mesh2DhorizontalEnum:
++			elements_width=3;
++			numberofelements2d = 0;
++			numberofvertices2d = 0;
++			numlayers          = 0;
++			break;
++		case Mesh3DEnum:
++			elements_width=6; //penta elements
++			iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
++			iomodel->Constant(&numberofelements2d,MeshNumberofelements2dEnum);
++			iomodel->Constant(&numberofvertices2d,MeshNumberofvertices2dEnum);
++			iomodel->Constant(&numlayers,MeshNumberoflayersEnum);
++			break;
++		default:
++			_error_("mesh not supported yet");
+ 	}
+-	else{
+-		elements_width=6; //penta elements
+-		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+-	}
+ 
+-	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->dim,num_procs);
++	MeshPartitionx(&epart,&npart,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements,numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width,iomodel->meshtype,num_procs);
+ 
+ 	/*Free elements2d: */
+ 	xDelete<int>(elements2d);
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16291)
+@@ -47,9 +47,9 @@
+ 			/*Nothing else to do*/
+ 			break;
+ 		case P1bubbleEnum:
+-			switch(iomodel->dim){
+-				case 2: elementnbv = 3; break;
+-				case 3: elementnbv = 6; break;
++			switch(iomodel->meshtype){
++				case Mesh2DhorizontalEnum: elementnbv = 3; break;
++				case Mesh3DEnum:           elementnbv = 6; break;
+ 				default: _error_("3d is the only supported dimension");
+ 			}
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16291)
+@@ -700,9 +700,9 @@
+ void  Matice::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+ 
+ 	/*Intermediaries*/
+-	Element *element      = NULL;
+-	Parameters* parameters= NULL;
+-	int         dim;
++	Element    *element    = NULL;
++	Parameters *parameters = NULL;
++	int         meshtype;
+ 
+ 	/*Recover element*/
+ 	element=(Element*)helement->delivers();
+@@ -729,8 +729,8 @@
+ 						else{
+ 							parameters=((Penta*)(element))->parameters;
+ 						}
+-						parameters->FindParam(&dim,MeshDimensionEnum);
+-						if(dim==2){
++						parameters->FindParam(&meshtype,MeshTypeEnum);
++						if(meshtype==Mesh3DEnum){
+ 							/*Duplicate rheology input: */
+ 							this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
+ 						}
+@@ -789,7 +789,7 @@
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+ 
+-	if(iomodel->dim==2){
++	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 
+ 		/*Intermediaries*/
+ 		const int num_vertices = 3; //Tria has 3 vertices
+@@ -846,7 +846,7 @@
+ 
+ 	/*if 3d*/
+ 	#ifdef _HAVE_3D_
+-	else if(iomodel->dim==3){
++	else if(iomodel->meshtype==Mesh3DEnum){
+ 
+ 		/*Intermediaries*/
+ 		const int  num_vertices = 6; //Penta has 6 vertices
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16291)
+@@ -2572,7 +2572,7 @@
+ /*FUNCTION Tria::MassFlux {{{*/
+ IssmDouble Tria::MassFlux( IssmDouble* segment){
+ 
+-	int        dim;
++	int        meshtype;
+ 	IssmDouble mass_flux=0.;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble normal[2];
+@@ -2606,10 +2606,10 @@
+ 	length=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
+ 
+ 	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	Input* vx_input=NULL;
+ 	Input* vy_input=NULL;
+-	if(dim==2){
++	if(meshtype==Mesh2DhorizontalEnum){
+ 		vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 		vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	}
+@@ -6236,7 +6236,7 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        dim;
++	int        meshtype;
+ 	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+@@ -6255,11 +6255,11 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
+ 	Input* vxaverage_input=NULL;
+ 	Input* vyaverage_input=NULL;
+-	if(dim==2){
++	if(meshtype==Mesh2DhorizontalEnum){
+ 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
+ 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
+ 	}
+@@ -6354,7 +6354,7 @@
+ ElementMatrix* Tria::CreateKMatrixMasstransport_DG(void){
+ 
+ 	/*Intermediaries */
+-	int        dim;
++	int        meshtype;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdet,D_scalar,dt,vx,vy;
+ 
+@@ -6371,10 +6371,10 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	Input* vxaverage_input=NULL;
+ 	Input* vyaverage_input=NULL;
+-	if(dim==2){
++	if(meshtype==Mesh2DhorizontalEnum){
+ 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
+ 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
+ 	}
+@@ -6843,7 +6843,7 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        dim;
++	int        meshtype;
+ 	IssmDouble Jdet,D_scalar,dt,h;
+ 	IssmDouble vel,vx,vy,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+@@ -6862,11 +6862,11 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	this->parameters->FindParam(&stabilization,DamageStabilizationEnum);
+ 	Input* vxaverage_input=NULL;
+ 	Input* vyaverage_input=NULL;
+-	if(dim==2){
++	if(meshtype==Mesh2DhorizontalEnum){
+ 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
+ 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
+ 	}
+@@ -7267,7 +7267,7 @@
+ ElementMatrix* Tria::CreateKMatrixBalancethickness_CG(void){
+ 
+ 	/*Intermediaries */
+-	int        stabilization,dim;
++	int        stabilization,meshtype;
+ 	IssmDouble Jdet,vx,vy,dvxdx,dvydy,vel,h;
+ 	IssmDouble D_scalar;
+ 	IssmDouble dvx[2],dvy[2];
+@@ -7286,10 +7286,10 @@
+ 	/*Retrieve all Inputs and parameters: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&stabilization,BalancethicknessStabilizationEnum);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	Input* vxaverage_input=NULL;
+ 	Input* vyaverage_input=NULL;
+-	if(dim==2){
++	if(meshtype==Mesh2DhorizontalEnum){
+ 		vxaverage_input=inputs->GetInput(VxEnum); _assert_(vxaverage_input);
+ 		vyaverage_input=inputs->GetInput(VyEnum); _assert_(vyaverage_input);
+ 	}
+@@ -7375,7 +7375,6 @@
+ ElementMatrix* Tria::CreateKMatrixBalancethickness_DG(void){
+ 
+ 	/*Intermediaries*/
+-	int        dim;
+ 	IssmDouble vx,vy,D_scalar,Jdet;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 
+@@ -7391,7 +7390,6 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16290)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16291)
+@@ -30,17 +30,17 @@
+ 		int  *my_vertices;
+ 
+ 		/*Mesh properties and connectivity tables*/
+-		int   dim;
+-		int   numberofvertices;
+-		int   numberofelements;
+-		int   numberoffaces;
+-		int   numberofedges;
+-		int  *elements;
+-		int  *faces;
+-		int  *edges;
+-		int  *elementtoedgeconnectivity;
+-		int  *singlenodetoelementconnectivity;
+-		int  *numbernodetoelementconnectivity;
++		int  meshtype;
++		int  numberofvertices;
++		int  numberofelements;
++		int  numberoffaces;
++		int  numberofedges;
++		int *elements;
++		int *faces;
++		int *edges;
++		int *elementtoedgeconnectivity;
++		int *singlenodetoelementconnectivity;
++		int *numbernodetoelementconnectivity;
+ 
+ 		/*Data to synchronize through low level object drivers: */
+ 		int nodecounter;         //keep track of how many nodes are being created in each analysis
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16291)
+@@ -54,7 +54,7 @@
+ 		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(StressbalanceReferentialEnum)[io_index*6]);
+ 		_assert_(sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[1][0]*coord_system[1][0]) >1.e-4);
+ 
+-		if(iomodel->dim==3){
++		if(iomodel->meshtype==Mesh3DEnum){
+ 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum)); 
+ 			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
+@@ -94,7 +94,7 @@
+ 				analysis_type==DamageEvolutionAnalysisEnum || 
+ 				analysis_type==HydrologyDCEfficientAnalysisEnum
+ 				){
+-		if(iomodel->dim==3){
++		if(iomodel->meshtype==Mesh3DEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum));
+ 			if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
+@@ -103,7 +103,7 @@
+ 		}
+ 	}
+ 	if(analysis_type==FreeSurfaceTopAnalysisEnum){
+-		if(iomodel->dim==3){
++		if(iomodel->meshtype==Mesh3DEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
+ 			if(!(reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index]))){
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16290)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16291)
+@@ -29,7 +29,7 @@
+ 	this->my_elements=NULL;
+ 	this->my_vertices=NULL;
+ 
+-	this->dim=-1;
++	this->meshtype=-1;
+ 	this->numberofvertices=-1;
+ 	this->numberofelements=-1;
+ 	this->numberoffaces=-1;
+@@ -73,7 +73,7 @@
+ 	this->my_elements = NULL;
+ 	this->my_vertices = NULL;
+ 
+-	FetchData(&this->dim,MeshDimensionEnum);
++	FetchData(&this->meshtype,MeshTypeEnum);
+ 	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
+ 	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
+ 	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
Index: issm/oecreview/Archive/16133-16554/ISSM-16291-16292.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16291-16292.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16291-16292.diff	(revision 16556)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 16291)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 16292)
+@@ -55,7 +55,6 @@
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+-
+ 		#}}}
+ 	def __repr__(self): # {{{
+ 		string="   Mesh:" 
+@@ -162,7 +161,15 @@
+ 
+ 		return md
+ 	# }}}
++	def meshtype(self): # {{{
++
++		if self.dimension==2:
++			return "2Dhorizontal"
++		else:
++			return "3D"
++	#}}}
+ 	def marshall(self,md,fid):    # {{{
++		WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum("Mesh"+self.meshtype())[0],'format','Integer');
+ 		WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','z','format','DoubleMat','mattype',1)
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 16291)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 16292)
+@@ -180,11 +180,12 @@
+ 			fielddisplay(obj,'hemisphere','Indicate hemisphere ''n'' or ''s'' ');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
++			WriteData(fid,'object',obj,'fieldname','dimension','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','z','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','dimension','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberoflayers','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
+@@ -199,5 +200,12 @@
+ 			WriteData(fid,'object',obj,'fieldname','numberofvertices2d','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofelements2d','format','Integer');
+ 		end % }}}
++		function type = meshtype(obj) % {{{
++			if obj.dimension==2,
++				type = '2Dhorizontal';
++			else
++				type = '3D';
++			end
++		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16292-16293.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16292-16293.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16292-16293.diff	(revision 16556)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/m/enum/MeshDimensionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshDimensionEnum.m	(revision 16292)
++++ ../trunk-jpl/src/m/enum/MeshDimensionEnum.m	(revision 16293)
+@@ -1,11 +0,0 @@
+-function macro=MeshDimensionEnum()
+-%MESHDIMENSIONENUM - Enum of MeshDimension
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MeshDimensionEnum()
+-
+-macro=StringToEnum('MeshDimension');
+Index: ../trunk-jpl/src/m/enum/Mesh3DEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/Mesh3DEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/Mesh3DEnum.m	(revision 16293)
+@@ -0,0 +1,11 @@
++function macro=Mesh3DEnum()
++%MESH3DENUM - Enum of Mesh3D
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=Mesh3DEnum()
++
++macro=StringToEnum('Mesh3D');
+Index: ../trunk-jpl/src/m/enum/Mesh2DverticalEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/Mesh2DverticalEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/Mesh2DverticalEnum.m	(revision 16293)
+@@ -0,0 +1,11 @@
++function macro=Mesh2DverticalEnum()
++%MESH2DVERTICALENUM - Enum of Mesh2Dvertical
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=Mesh2DverticalEnum()
++
++macro=StringToEnum('Mesh2Dvertical');
+Index: ../trunk-jpl/src/m/enum/MeshTypeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshTypeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MeshTypeEnum.m	(revision 16293)
+@@ -0,0 +1,11 @@
++function macro=MeshTypeEnum()
++%MESHTYPEENUM - Enum of MeshType
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MeshTypeEnum()
++
++macro=StringToEnum('MeshType');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16292)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16293)
+@@ -182,7 +182,6 @@
+ def MaterialsMantleShearModulusEnum(): return StringToEnum("MaterialsMantleShearModulus")[0]
+ def MaterialsMantleDensityEnum(): return StringToEnum("MaterialsMantleDensity")[0]
+ def MeshAverageVertexConnectivityEnum(): return StringToEnum("MeshAverageVertexConnectivity")[0]
+-def MeshDimensionEnum(): return StringToEnum("MeshDimension")[0]
+ def MeshElementonbedEnum(): return StringToEnum("MeshElementonbed")[0]
+ def MeshElementonsurfaceEnum(): return StringToEnum("MeshElementonsurface")[0]
+ def MeshElements2dEnum(): return StringToEnum("MeshElements2d")[0]
+@@ -199,6 +198,10 @@
+ def MeshXEnum(): return StringToEnum("MeshX")[0]
+ def MeshYEnum(): return StringToEnum("MeshY")[0]
+ def MeshZEnum(): return StringToEnum("MeshZ")[0]
++def MeshTypeEnum(): return StringToEnum("MeshType")[0]
++def Mesh2DhorizontalEnum(): return StringToEnum("Mesh2Dhorizontal")[0]
++def Mesh2DverticalEnum(): return StringToEnum("Mesh2Dvertical")[0]
++def Mesh3DEnum(): return StringToEnum("Mesh3D")[0]
+ def MiscellaneousNameEnum(): return StringToEnum("MiscellaneousName")[0]
+ def MasstransportHydrostaticAdjustmentEnum(): return StringToEnum("MasstransportHydrostaticAdjustment")[0]
+ def MasstransportIsfreesurfaceEnum(): return StringToEnum("MasstransportIsfreesurface")[0]
+Index: ../trunk-jpl/src/m/enum/Mesh2DhorizontalEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/Mesh2DhorizontalEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/Mesh2DhorizontalEnum.m	(revision 16293)
+@@ -0,0 +1,11 @@
++function macro=Mesh2DhorizontalEnum()
++%MESH2DHORIZONTALENUM - Enum of Mesh2Dhorizontal
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=Mesh2DhorizontalEnum()
++
++macro=StringToEnum('Mesh2Dhorizontal');
Index: issm/oecreview/Archive/16133-16554/ISSM-16293-16294.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16293-16294.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16293-16294.diff	(revision 16556)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 16293)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 16294)
+@@ -174,7 +174,6 @@
+ 		WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','z','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','dimension','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberoflayers','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer')
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 16293)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 16294)
+@@ -181,7 +181,6 @@
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','dimension','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'fieldname','z','format','DoubleMat','mattype',1);
Index: issm/oecreview/Archive/16133-16554/ISSM-16294-16295.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16294-16295.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16294-16295.diff	(revision 16556)
@@ -0,0 +1,188 @@
+Index: ../trunk-jpl/src/m/classes/mesh2d.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.m	(revision 16294)
++++ ../trunk-jpl/src/m/classes/mesh2d.m	(revision 16295)
+@@ -1,9 +1,9 @@
+-%MESH class definition
++%MESH2D class definition
+ %
+ %   Usage:
+-%      mesh=mesh();
++%      mesh2d=mesh2d();
+ 
+-classdef mesh
++classdef mesh2d
+ 	properties (SetAccess=public) 
+ 		x                           = NaN;
+ 		y                           = NaN;
+@@ -29,7 +29,7 @@
+ 		extractedelements           = NaN
+ 	end
+ 	methods
+-		function obj = mesh(varargin) % {{{
++		function obj = mesh2d(varargin) % {{{
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
+@@ -57,7 +57,6 @@
+ 			end
+ 			md = checkfield(md,'mesh.numberofelements','>',0);
+ 			md = checkfield(md,'mesh.numberofvertices','>',0);
+-			md = checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
+ 
+ 			switch(solution),
+@@ -95,12 +94,17 @@
+ 			fielddisplay(obj,'hemisphere','Indicate hemisphere ''n'' or ''s'' ');
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
+-			WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
++			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
++			WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 		end % }}}
++		function t = meshtype(obj) % {{{
++			t = '2Dhorizontal';
++		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16294)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16295)
+@@ -111,7 +111,7 @@
+ 
+ 		md = checkfield(md,'stressbalance.spcvx','forcing',1)
+ 		md = checkfield(md,'stressbalance.spcvy','forcing',1)
+-		if md.mesh.dimension==3:
++		if strcmp(md.mesh.meshtype(),'3D'):
+ 			md = checkfield(md,'stressbalance.spcvz','forcing',1)
+ 		md = checkfield(md,'stressbalance.restol','size',[1],'>',0)
+ 		md = checkfield(md,'stressbalance.reltol','size',[1])
+@@ -144,8 +144,7 @@
+ 				if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon:
+ 					md.checkmessage("Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
+ 		#CHECK THAT NO rotation specified for FS Grounded ice at base
+-#		if md.mesh.dimension==3 & md.flowequation.isFS,
+-		if md.mesh.dimension==3 and md.flowequation.isFS:
++		if strcmp(md.mesh.meshtype(),'3D') and md.flowequation.isFS:
+ 			pos=numpy.nonzero(numpy.logical_and(md.mask.groundedice_levelset,md.mesh.vertexonbed))
+ 			if numpy.any(numpy.logical_not(numpy.isnan(md.stressbalance.referential[pos,:]))):
+ 				md.checkmessage("no referential should be specified for basal vertices of grounded ice")
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16294)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16295)
+@@ -80,7 +80,7 @@
+ 
+ 			md = checkfield(md,'stressbalance.spcvx','forcing',1);
+ 			md = checkfield(md,'stressbalance.spcvy','forcing',1);
+-			if md.mesh.dimension==3, md = checkfield(md,'stressbalance.spcvz','forcing',1); end
++			if strcmp(meshtype(md.mesh),'3D'), md = checkfield(md,'stressbalance.spcvz','forcing',1); end
+ 			md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1);
+ 			md = checkfield(md,'stressbalance.reltol','size',[1 1]);
+ 			md = checkfield(md,'stressbalance.abstol','size',[1 1]);
+@@ -110,7 +110,7 @@
+ 				end
+ 			end
+ 			%CHECK THAT NO rotation specified for FS Grounded ice at base
+-			if md.mesh.dimension==3 & md.flowequation.isFS,
++			if strcmp(meshtype(md.mesh),'3D') & md.flowequation.isFS,
+ 				pos=find(md.mask.groundedice_levelset>0. & md.mesh.vertexonbed);
+ 				if any(~isnan(md.stressbalance.referential(pos,:))),
+ 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 16294)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 16295)
+@@ -78,12 +78,14 @@
+ 			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+ 			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
+-			if md.mesh.dimension==2:
++			if strcmp(md.mesh.meshtype(),'2Dhorizontal'):
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
+-			else:
++			elif strcmp(md.mesh.meshtype(),'3D'):
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8+1))
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8+1))
++			else:
++				raise RuntimeError('mesh type not supported yet')
+ 			if not (self.isSIA or self.isSSA or self.isL1L2 or self.isHO or self.isFS):
+ 				md.checkmessage("no element types set for this model")
+ 
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 16294)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 16295)
+@@ -90,12 +90,14 @@
+ 				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+-				if (md.mesh.dimension==2),
++				if strcmp(meshtype(md.mesh),'2Dhorizontal')
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[1:2]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[1:2]);
+-				else
++				elseif strcmp(meshtype(md.mesh),'3D'),
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
++				else
++					error('Case not supported yet');
+ 				end
+ 				if ~(obj.isSIA || obj.isSSA || obj.isL1L2 || obj.isHO || obj.isFS),
+ 					md = checkmessage(md,['no element types set for this model']);
+Index: ../trunk-jpl/src/m/classes/mesh2d.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2d.py	(revision 16294)
++++ ../trunk-jpl/src/m/classes/mesh2d.py	(revision 16295)
+@@ -4,12 +4,12 @@
+ from checkfield import *
+ from MatlabFuncs import *
+ 
+-class mesh(object):
++class mesh2d(object):
+ 	"""
+-	MESH class definition
++	MESH2D class definition
+ 
+ 	   Usage:
+-	      mesh=mesh();
++	      mesh2d=mesh2d();
+ 	"""
+ 
+ 	def __init__(self): # {{{
+@@ -97,11 +97,16 @@
+ 
+ 		return md
+ 	# }}}
++	def meshtype(self): # {{{
++		return "2Dhorizontal"
++	#}}}
+ 	def marshall(self,md,fid):    # {{{
+-		WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2)
+-		WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer')
++		WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum("Mesh"+self.meshtype())[0],'format','Integer');
++		WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
++		WriteData(fid,'enum',MeshZEnum(),'data',numpy.zeros(self.numberofvertices),'format','DoubleMat','mattype',1);
++		WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
++		WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
++		WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
++		WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
+ 	# }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16295-16296.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16295-16296.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16295-16296.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16295)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16296)
+@@ -730,7 +730,7 @@
+ 							parameters=((Penta*)(element))->parameters;
+ 						}
+ 						parameters->FindParam(&meshtype,MeshTypeEnum);
+-						if(meshtype==Mesh3DEnum){
++						if(meshtype==Mesh2DhorizontalEnum){
+ 							/*Duplicate rheology input: */
+ 							this->inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));
+ 						}
Index: issm/oecreview/Archive/16133-16554/ISSM-16296-16297.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16296-16297.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16296-16297.diff	(revision 16556)
@@ -0,0 +1,252 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 16296)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 16297)
+@@ -27,17 +27,23 @@
+ %responses
+ md.qmu.responses.MaxVel=response_function('MaxVel',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ md.qmu.responses.IceVolume=response_function('IceVolume',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux1=response_function('indexed_MassFlux_1',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux2=response_function('indexed_MassFlux_2',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux3=response_function('indexed_MassFlux_3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux4=response_function('indexed_MassFlux_4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux5=response_function('indexed_MassFlux_5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.massFlux6=response_function('indexed_MassFlux_6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux1=response_function('MassFlux1',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux2=response_function('MassFlux2',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux3=response_function('MassFlux3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux4=response_function('MassFlux4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux5=response_function('MassFlux5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.massFlux6=response_function('MassFlux6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ 
+-%mass flux profiles
+-md.qmu.mass_flux_profiles={'../Exp/MassFlux1.exp','../Exp/MassFlux2.exp','../Exp/MassFlux3.exp','../Exp/MassFlux4.exp','../Exp/MassFlux5.exp','../Exp/MassFlux6.exp'};
+-md.qmu.mass_flux_profile_directory=pwd;
++md.outputdefinition.list={...
++		massfluxatgate('MassFlux1','../Exp/MassFlux1.exp'),...
++		massfluxatgate('MassFlux2','../Exp/MassFlux2.exp'),...
++		massfluxatgate('MassFlux3','../Exp/MassFlux3.exp'),...
++		massfluxatgate('MassFlux4','../Exp/MassFlux4.exp'),...
++		massfluxatgate('MassFlux5','../Exp/MassFlux5.exp'),...
++		massfluxatgate('MassFlux6','../Exp/MassFlux6.exp')...
++	};
+ 
++
+ %%  nond_sampling study
+ md.qmu.method=dakota_method('nond_samp');
+ md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',20,'sample_type','lhs');
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16297)
+@@ -0,0 +1,59 @@
++%MASSFLUXATGATE class definition
++%
++%   Usage:
++%      massfluxatgate=massfluxatgate();
++
++classdef massfluxatgate
++	properties (SetAccess=public)  
++		%massfluxatgate 
++		name                = '';
++		profilename            = ''; 
++	end
++	properties (SetAccess=private)  
++		segments            = NaN;
++	end
++	methods
++		function obj = massfluxatgate(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				case 1
++					obj.name=varargin{1};
++				case 2
++					obj.name=varargin{1};
++					obj.profilename=varargin{2};
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			
++			md = checkfield(md,'massfluxatgate.name','empty',1);
++			md = checkfield(md,'massfluxatgate.profilename','empty',1);
++
++			%check the profilename points to a file!: 
++			if exist(profilename,'file'),
++				error('massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!');
++			end
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Massfluxatgate:\n'));
++
++			fielddisplay(obj,'name','identifier for this massfluxatgate response');
++			fielddisplay(obj,'profilename','name of file (shapefile or argus file) defining a profile (or gate)');
++			
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++
++		%before marshalling, we need to create the segments out of the profilename: 
++		obj.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,obj.profilename);
++
++		%ok, marshall name and segments: 
++		WriteData(fid,'object',obj,'fieldname','name','format','String');
++		WriteData(fid,'object',obj,'fieldname','segments','format','DoubleMat','mattype',1);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 16296)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 16297)
+@@ -16,9 +16,6 @@
+ 		numberofresponses           = 0;
+ 		variabledescriptors         = {};
+ 		responsedescriptors         = {};
+-		mass_flux_profile_directory = NaN;
+-		mass_flux_profiles          = NaN;
+-		mass_flux_segments          = {};
+ 		adjacency                   = NaN;
+ 		vertex_weight               = NaN;
+ 	end
+@@ -132,9 +129,6 @@
+ 			fielddisplay(obj,'variabledescriptors','');
+ 			fielddisplay(obj,'responsedescriptors','');
+ 			fielddisplay(obj,'method','array of dakota_method class');
+-			fielddisplay(obj,'mass_flux_profile_directory','directory for mass flux profiles');
+-			fielddisplay(obj,'mass_flux_profiles','list of mass_flux profiles');
+-			fielddisplay(obj,'mass_flux_segments','');
+ 			fielddisplay(obj,'adjacency','');
+ 			fielddisplay(obj,'vertex_weight','weight applied to each mesh vertex');
+ 
+@@ -150,13 +144,6 @@
+ 			WriteData(fid,'object',obj,'fieldname','numberofresponses','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','variabledescriptors','format','StringArray');
+ 			WriteData(fid,'object',obj,'fieldname','responsedescriptors','format','StringArray');
+-			if ~isempty(obj.mass_flux_segments), 
+-				WriteData(fid,'data',obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
+-				flag=true; 
+-			else 
+-				flag=false; 
+-			end
+-			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16297)
+@@ -0,0 +1,45 @@
++%CONSTANTS class definition
++%
++%   Usage:
++%      outputdefinition=outputdefinition();
++
++classdef outputdefinition
++	properties (SetAccess=public) 
++		list                 = {};
++	end
++	methods
++		function obj = outputdefinition(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			obj.list={};
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			md = checkfield(md,'outputdefinition.list','cell',1);
++
++			for i=1:length(obj.list),
++				md=checkconsistency(obj.list{i},md,solution,analyses);
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   outputdefinition:'));
++			fielddisplay(obj,'list','list of potential outputs that can be requested, but which need additional data to be defined');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++
++		for i=1:length(obj.list),
++			obj.list{i}.marshall(md,fid);
++		end
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/qmu.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.py	(revision 16296)
++++ ../trunk-jpl/src/m/classes/qmu.py	(revision 16297)
+@@ -26,9 +26,6 @@
+ 		self.numberofresponses           = 0
+ 		self.variabledescriptors         = []
+ 		self.responsedescriptors         = []
+-		self.mass_flux_profile_directory = float('NaN')
+-		self.mass_flux_profiles          = float('NaN')
+-		self.mass_flux_segments          = []
+ 		self.adjacency                   = float('NaN')
+ 		self.vertex_weight               = float('NaN')
+ 
+@@ -125,9 +122,6 @@
+ 		s+="%s\n" % fielddisplay(self,'variabledescriptors','')
+ 		s+="%s\n" % fielddisplay(self,'responsedescriptors','')
+ 		s+="%s\n" % fielddisplay(self,'method','array of dakota_method class')
+-		s+="%s\n" % fielddisplay(self,'mass_flux_profile_directory','directory for mass flux profiles')
+-		s+="%s\n" % fielddisplay(self,'mass_flux_profiles','list of mass_flux profiles')
+-		s+="%s\n" % fielddisplay(self,'mass_flux_segments','')
+ 		s+="%s\n" % fielddisplay(self,'adjacency','')
+ 		s+="%s\n" % fielddisplay(self,'vertex_weight','weight applied to each mesh vertex')
+ 
+@@ -143,10 +137,4 @@
+ 		WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray')
+ 		WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray')
+-		if not self.mass_flux_segments:
+-			WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+-			flag=True; 
+-		else:
+-			flag=False; 
+-		WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16296)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16297)
+@@ -44,6 +44,7 @@
+ 		qmu              = 0;
+ 
+ 		results          = 0;
++		outputdefinition = 0;
+ 		radaroverlay     = 0;
+ 		miscellaneous    = 0;
+ 		private          = 0;
+@@ -1070,6 +1071,7 @@
+ 			md.qmu              = qmu();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
++			md.outputdefinition = outputdefinition();
+ 			md.miscellaneous    = miscellaneous();
+ 			md.private          = private();
+ 		end
+@@ -1106,6 +1108,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+ 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
++			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(obj.outputdefinition) ']'],'output definition'));
+ 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+ 			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+ 			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
Index: issm/oecreview/Archive/16133-16554/ISSM-16297-16298.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16297-16298.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16297-16298.diff	(revision 16556)
@@ -0,0 +1,349 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16297)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16298)
+@@ -26,7 +26,6 @@
+ 	AutodiffFosForwardIndexEnum,
+ 	AutodiffFovForwardIndicesEnum,
+ 	AutodiffFosReverseIndexEnum,
+-	AutodiffMassFluxSegmentsPresentEnum,
+ 	AutodiffKeepEnum,
+ 	AutodiffObufsizeEnum,
+ 	AutodiffLbufsizeEnum,
+@@ -212,10 +211,11 @@
+ 	MasstransportVertexPairingEnum,
+ 	MasstransportNumRequestedOutputsEnum,
+ 	MasstransportRequestedOutputsEnum,
+-	QmuIsdakotaEnum,
+ 	MassFluxSegmentsEnum,
+ 	MassFluxSegmentsPresentEnum,
+-	QmuMassFluxSegmentsPresentEnum,
++	MassfluxatgateNameEnum,
++	MassfluxatgateSegmentsEnum,
++	QmuIsdakotaEnum,
+ 	QmuNumberofpartitionsEnum,
+ 	QmuNumberofresponsesEnum,
+ 	QmuPartitionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16297)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16298)
+@@ -34,7 +34,6 @@
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
+ 		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+-		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+ 		case AutodiffKeepEnum : return "AutodiffKeep";
+ 		case AutodiffObufsizeEnum : return "AutodiffObufsize";
+ 		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
+@@ -220,10 +219,11 @@
+ 		case MasstransportVertexPairingEnum : return "MasstransportVertexPairing";
+ 		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
+ 		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
+-		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case MassFluxSegmentsEnum : return "MassFluxSegments";
+ 		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+-		case QmuMassFluxSegmentsPresentEnum : return "QmuMassFluxSegmentsPresent";
++		case MassfluxatgateNameEnum : return "MassfluxatgateName";
++		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
++		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+ 		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+ 		case QmuPartitionEnum : return "QmuPartition";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16297)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16298)
+@@ -34,7 +34,6 @@
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
+ 	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+-	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"AutodiffObufsize")==0) return AutodiffObufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
+@@ -136,11 +135,11 @@
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
++	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+-	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
++	      if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+@@ -223,10 +222,11 @@
+ 	      else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
+ 	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
+-	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
+ 	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+-	      else if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum;
++	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
++	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
++	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+ 	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16297)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16298)
+@@ -27,7 +27,6 @@
+ 	/*parameters for mass flux: {{{*/
+ 	int          mass_flux_num_profiles     = 0;
+ 	bool         qmu_mass_flux_present      = false;
+-	bool         autodiff_mass_flux_present = false;
+ 	bool         mass_flux_present          = false;
+ 	IssmDouble **array                      = NULL;
+ 	int         *mdims_array                = NULL;
+@@ -152,9 +151,8 @@
+ 
+ 	/*Deal with mass flux segments: {{{*/
+ 	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
+-	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+ 
+-	if(qmu_mass_flux_present || autodiff_mass_flux_present)mass_flux_present=true;
++	if(qmu_mass_flux_present)mass_flux_present=true;
+ 	else mass_flux_present=false;
+ 	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
+ 
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16297)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16298)
+@@ -30,11 +30,15 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			
+-			md = checkfield(md,'massfluxatgate.name','empty',1);
+-			md = checkfield(md,'massfluxatgate.profilename','empty',1);
++			if ~ischar(obj.name),
++				error('massfluxatgate error message: ''name'' field should be a string!');
++			end
++			if ~ischar(obj.profilename),
++				error('massfluxatgate error message: ''profilename'' field should be a string!');
++			end
+ 
+ 			%check the profilename points to a file!: 
+-			if exist(profilename,'file'),
++			if exist(obj.profilename,'file')~=2,
+ 				error('massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!');
+ 			end
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16297)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16298)
+@@ -85,7 +85,6 @@
+ 
+ 		#early return
+ 		if not self.isautodiff:
+-			WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+ 			WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean')
+ 			return
+ 			
+@@ -181,16 +180,6 @@
+ 			indices-=1    #get c-indices numbering going
+ 			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
+-		#deal with mass fluxes:  {{{
+-		mass_flux_segments=[dep.segments for dep in self.dependents if strcmpi(dep.name,'MassFlux')]
+-
+-		if mass_flux_segments:
+-			WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray')
+-			flag=True
+-		else:
+-			flag=False
+-		WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+-		#}}}
+ 		#deal with trace keep on: {{{
+ 		keep=False
+ 
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16297)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16298)
+@@ -82,7 +82,6 @@
+ 
+ 			%early return
+ 			if ~obj.isautodiff,
+-				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 				WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean');
+ 				return;
+ 			end
+@@ -197,22 +196,6 @@
+ 				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3);
+ 			end
+ 			%}}}
+-			%deal with mass fluxes:  {{{
+-			mass_flux_segments=cell(0,1);
+-			for i=1:num_dependent_objects,
+-				dep=obj.dependents{i};
+-				if strcmpi(dep.name,'MassFlux'),
+-					mass_flux_segments{end+1,1}=dep.segments;
+-				end
+-			end
+-			if ~isempty(mass_flux_segments), 
+-				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+-				flag=true;
+-			else
+-				flag=false;
+-			end
+-			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+-			%}}}
+ 			%deal with trace keep on: {{{
+ 			keep=false;
+ 
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16297)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16298)
+@@ -5,8 +5,11 @@
+ 
+ classdef outputdefinition
+ 	properties (SetAccess=public) 
+-		list                 = {};
++		definitions                 = {};
+ 	end
++	properties (SetAccess=private) 
++		enums                 = {};
++	end
+ 	methods
+ 		function obj = outputdefinition(varargin) % {{{
+ 			switch nargin
+@@ -18,28 +21,32 @@
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+-			obj.list={};
++			obj.definitions={};
++			obj.enums=NaN;
+ 
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			md = checkfield(md,'outputdefinition.list','cell',1);
++			md = checkfield(md,'outputdefinition.definitions','cell',1);
+ 
+-			for i=1:length(obj.list),
+-				md=checkconsistency(obj.list{i},md,solution,analyses);
++			for i=1:length(obj.definitions),
++				md=checkconsistency(obj.definitions{i},md,solution,analyses);
+ 			end
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   outputdefinition:'));
+-			fielddisplay(obj,'list','list of potential outputs that can be requested, but which need additional data to be defined');
++			fielddisplay(obj,'definitions','list of potential outputs that can be requested, but which need additional data to be defined');
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+ 
+-		for i=1:length(obj.list),
+-			obj.list{i}.marshall(md,fid);
++		enums=zeros(length(obj.definitions),1);
++		for i=1:length(obj.definitions),
++			obj.definitions{i}.marshall(md,fid);
++			obj.enums(i)=StringToEnum(class(obj.definitions{i}));
+ 		end
++		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 16297)
++++ ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 16298)
+@@ -1,11 +0,0 @@
+-function macro=AutodiffMassFluxSegmentsPresentEnum()
+-%AUTODIFFMASSFLUXSEGMENTSPRESENTENUM - Enum of AutodiffMassFluxSegmentsPresent
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=AutodiffMassFluxSegmentsPresentEnum()
+-
+-macro=StringToEnum('AutodiffMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 16297)
++++ ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 16298)
+@@ -1,11 +0,0 @@
+-function macro=QmuMassFluxSegmentsPresentEnum()
+-%QMUMASSFLUXSEGMENTSPRESENTENUM - Enum of QmuMassFluxSegmentsPresent
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=QmuMassFluxSegmentsPresentEnum()
+-
+-macro=StringToEnum('QmuMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 16298)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateSegmentsEnum()
++%MASSFLUXATGATESEGMENTSENUM - Enum of MassfluxatgateSegments
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateSegmentsEnum()
++
++macro=StringToEnum('MassfluxatgateSegments');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 16298)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateNameEnum()
++%MASSFLUXATGATENAMEENUM - Enum of MassfluxatgateName
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateNameEnum()
++
++macro=StringToEnum('MassfluxatgateName');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16297)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16298)
+@@ -26,7 +26,6 @@
+ def AutodiffFosForwardIndexEnum(): return StringToEnum("AutodiffFosForwardIndex")[0]
+ def AutodiffFovForwardIndicesEnum(): return StringToEnum("AutodiffFovForwardIndices")[0]
+ def AutodiffFosReverseIndexEnum(): return StringToEnum("AutodiffFosReverseIndex")[0]
+-def AutodiffMassFluxSegmentsPresentEnum(): return StringToEnum("AutodiffMassFluxSegmentsPresent")[0]
+ def AutodiffKeepEnum(): return StringToEnum("AutodiffKeep")[0]
+ def AutodiffObufsizeEnum(): return StringToEnum("AutodiffObufsize")[0]
+ def AutodiffLbufsizeEnum(): return StringToEnum("AutodiffLbufsize")[0]
+@@ -212,10 +211,11 @@
+ def MasstransportVertexPairingEnum(): return StringToEnum("MasstransportVertexPairing")[0]
+ def MasstransportNumRequestedOutputsEnum(): return StringToEnum("MasstransportNumRequestedOutputs")[0]
+ def MasstransportRequestedOutputsEnum(): return StringToEnum("MasstransportRequestedOutputs")[0]
+-def QmuIsdakotaEnum(): return StringToEnum("QmuIsdakota")[0]
+ def MassFluxSegmentsEnum(): return StringToEnum("MassFluxSegments")[0]
+ def MassFluxSegmentsPresentEnum(): return StringToEnum("MassFluxSegmentsPresent")[0]
+-def QmuMassFluxSegmentsPresentEnum(): return StringToEnum("QmuMassFluxSegmentsPresent")[0]
++def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
++def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
++def QmuIsdakotaEnum(): return StringToEnum("QmuIsdakota")[0]
+ def QmuNumberofpartitionsEnum(): return StringToEnum("QmuNumberofpartitions")[0]
+ def QmuNumberofresponsesEnum(): return StringToEnum("QmuNumberofresponses")[0]
+ def QmuPartitionEnum(): return StringToEnum("QmuPartition")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16298-16299.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16298-16299.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16298-16299.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16298)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16299)
+@@ -109,7 +109,7 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Damage:\n'));
+ 
+-			fielddisplay(obj,'D','damage tensor (scalar)');
++			fielddisplay(obj,'D','damage tensor (vector)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
+ 			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)');
+ 			fielddisplay(obj,'max_damage','maximum possible damage (0<=max_damage<1)');
Index: issm/oecreview/Archive/16133-16554/ISSM-16299-16300.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16299-16300.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16299-16300.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 16299)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 16300)
+@@ -34,7 +34,7 @@
+ md.qmu.responses.MassFlux5=response_function('MassFlux5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ md.qmu.responses.massFlux6=response_function('MassFlux6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ 
+-md.outputdefinition.list={...
++md.outputdefinition.definitions={...
+ 		massfluxatgate('MassFlux1','../Exp/MassFlux1.exp'),...
+ 		massfluxatgate('MassFlux2','../Exp/MassFlux2.exp'),...
+ 		massfluxatgate('MassFlux3','../Exp/MassFlux3.exp'),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16300-16301.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16300-16301.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16300-16301.diff	(revision 16556)
@@ -0,0 +1,892 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16300)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16301)
+@@ -211,10 +211,6 @@
+ 	MasstransportVertexPairingEnum,
+ 	MasstransportNumRequestedOutputsEnum,
+ 	MasstransportRequestedOutputsEnum,
+-	MassFluxSegmentsEnum,
+-	MassFluxSegmentsPresentEnum,
+-	MassfluxatgateNameEnum,
+-	MassfluxatgateSegmentsEnum,
+ 	QmuIsdakotaEnum,
+ 	QmuNumberofpartitionsEnum,
+ 	QmuNumberofresponsesEnum,
+@@ -542,6 +538,13 @@
+ 	TriaP1ElementResultEnum,
+ 	WaterColumnOldEnum,
+ 	/*}}}*/
++	/*Output Definitions{{{*/
++	OutputdefinitionEnum,
++	OutputdefinitionEnumsEnum,
++	MassfluxatgateEnum,
++	MassfluxatgateNameEnum,
++	MassfluxatgateSegmentsEnum,
++	/*}}}*/
+ 	/*Responses{{{*/
+ 	MinVelEnum,
+ 	MaxVelEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16300)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16301)
+@@ -219,10 +219,6 @@
+ 		case MasstransportVertexPairingEnum : return "MasstransportVertexPairing";
+ 		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
+ 		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
+-		case MassFluxSegmentsEnum : return "MassFluxSegments";
+-		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+-		case MassfluxatgateNameEnum : return "MassfluxatgateName";
+-		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+ 		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+@@ -531,6 +527,11 @@
+ 		case TimeEnum : return "Time";
+ 		case TriaP1ElementResultEnum : return "TriaP1ElementResult";
+ 		case WaterColumnOldEnum : return "WaterColumnOld";
++		case OutputdefinitionEnum : return "Outputdefinition";
++		case OutputdefinitionEnumsEnum : return "OutputdefinitionEnums";
++		case MassfluxatgateEnum : return "Massfluxatgate";
++		case MassfluxatgateNameEnum : return "MassfluxatgateName";
++		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
+ 		case MinVelEnum : return "MinVel";
+ 		case MaxVelEnum : return "MaxVel";
+ 		case MinVxEnum : return "MinVx";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16300)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16301)
+@@ -222,10 +222,6 @@
+ 	      else if (strcmp(name,"MasstransportVertexPairing")==0) return MasstransportVertexPairingEnum;
+ 	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
+-	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
+-	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+-	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
+-	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+ 	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+@@ -259,14 +255,14 @@
+ 	      else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
++	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
++	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
++	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
++	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+-	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+-	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+-	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+-	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++	      if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+@@ -382,14 +378,14 @@
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
++	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
++	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
++	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
++	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
+-	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+-	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+-	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+@@ -505,14 +501,14 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
++	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+-	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+-	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+-	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
++	      if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+@@ -543,6 +539,11 @@
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
++	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
++	      else if (strcmp(name,"OutputdefinitionEnums")==0) return OutputdefinitionEnumsEnum;
++	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
++	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
++	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16300)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16301)
+@@ -159,4 +159,8 @@
+ /*Distribution of dofs: */
+ void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type);
+ 
++#ifdef _HAVE_RESPONSES_
++void CreateParametersOutputDefinitions(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ #endif
++
++#endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16301)
+@@ -0,0 +1,41 @@
++/*!\file: CreateParametersOutputDefinitions.cpp
++ * \brief driver for creating output definitions dataset, and including it into the parameters dataset
++ */ 
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void CreateParametersOutputDefinitions(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
++
++	Parameters *parameters = NULL;
++	DataSet* output_definitions=NULL;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	output_definitions=new DataSet();
++	
++	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionEnumsEnum); 
++	if(num_output_definitions){
++		for (i=0;i<num_output_definitions;i++){
++
++			if (output_definition_enums[i]==MassfluxatgateEnum){
++
++				/*Fetch segments and names: */
++				iomodel->FetchMultipleData(&gatenames,&numgates,MassfluxatgateNameEnum);
++				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,&gatesegments_N,&numgates,MassfluxatgateSegmentsEnum);
++				for(j=0;j<numgates;j++){
++					output_definitions->AddObject(new Massfluxgate(gatenames[i],gatesegments[i],gatesegments_M[i],gatesegments_N[i]));
++				}
++			}
++			else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!");
++		}
++	}
++	parameters->AddObject(new DataSetParam(OutputdefinitionEnum,output_definitions);
++
++	
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16300)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16301)
+@@ -24,19 +24,6 @@
+ 	IssmDouble  time;
+ 	bool        ispdd,isdelta18o;
+ 
+-	/*parameters for mass flux: {{{*/
+-	int          mass_flux_num_profiles     = 0;
+-	bool         qmu_mass_flux_present      = false;
+-	bool         mass_flux_present          = false;
+-	IssmDouble **array                      = NULL;
+-	int         *mdims_array                = NULL;
+-	int         *ndims_array                = NULL;
+-	IssmDouble  *temp_matrix                = NULL;
+-	int          temp_m,temp_n;
+-	IssmDouble  *matrix                     = NULL;
+-	int          count;
+-	/*}}}*/
+-
+ 	if(*pparameters)return; //do not create parameters twice!
+ 
+ 	/*Initialize dataset: */
+@@ -149,67 +136,9 @@
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,MasstransportRequestedOutputsEnum);
+ 
+-	/*Deal with mass flux segments: {{{*/
+-	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
++	/*Output definitions dataset: */
++	CreateOutputDefinitions(&parameters,iomodel);
+ 
+-	if(qmu_mass_flux_present)mass_flux_present=true;
+-	else mass_flux_present=false;
+-	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
+-
+-	if(mass_flux_present){
+-
+-		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
+-		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
+-		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
+-
+-		/*Go through segments, and extract those that belong to this cpu: */
+-		for(i=0;i<mass_flux_num_profiles;i++){
+-			temp_matrix=array[i];
+-			temp_m=mdims_array[i];
+-			temp_n=ndims_array[i];
+-			_assert_(temp_n==5);
+-
+-			m=0;
+-			for(j=0;j<temp_m;j++){
+-				if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
+-			}
+-			if(m){
+-				matrix=xNewZeroInit<IssmDouble>(5*m);
+-				count=0;
+-				for(j=0;j<temp_m;j++){
+-					if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
+-						for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
+-						count++;
+-					}
+-				}
+-			}
+-			else{
+-				matrix=NULL;
+-			}
+-
+-			/*Assign: */
+-			array[i]=matrix;
+-			mdims_array[i]=m;
+-			ndims_array[i]=5;
+-
+-			/*Free temporary matrix: */
+-			xDelete<IssmDouble>(temp_matrix);
+-		}
+-
+-		/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
+-		parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
+-
+-		/*Free data: */
+-		for(i=0;i<mass_flux_num_profiles;i++){
+-			IssmDouble* matrix=array[i];
+-			xDelete<IssmDouble>(matrix);
+-		}
+-		xDelete<int>(mdims_array); 
+-		xDelete<int>(ndims_array);
+-		xDelete<IssmDouble*>(array);
+-	}
+-	/*}}}*/
+-
+ 	/*Solution specific parameters*/
+ 	#ifdef _HAVE_HYDROLOGY_
+ 	CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16300)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16301)
+@@ -541,6 +541,10 @@
+ 					./classes/GiaDeflectionCoreArgs.h
+ 
+ #}}}
++#Responses sources  {{{
++responses_sources =  ./classes/Massfluxatgate.h \
++					 ./modules/ModelProcessorx/CreateOutputDefinitions.cpp
++#}}}
+ #Damage sources  {{{
+ damage_sources =  ./analyses/damage_core.cpp\
+ 					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+@@ -877,6 +881,10 @@
+ issm_sources  +=  $(dakota_sources)
+ endif
+ 
++if RESPONSES
++issm_sources  +=  $(responses_sources)
++endif
++
+ if PETSC
+ issm_sources  +=  $(petsc_sources)
+ endif
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16300)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16301)
+@@ -16,6 +16,7 @@
+ #include "./DependentObject.h"
+ #include "./IndependentObject.h"
+ #include "./Segment.h"
++#include "./Massfluxatgate.h"
+ 
+ /*Constraints: */
+ #include "./Constraints/Constraints.h"
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16300)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16301)
+@@ -75,11 +75,14 @@
+ 		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
+ 		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
+ 		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
++		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,int data_enum);
++		void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+ 		void        FetchData(Option **poption,int data_enum);
+ 		void        FetchData(int num,...);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value);
+ 		void        LastIndex(int *pindex);
++		FILE**      SetFilePointersToData(int** pcodes,int** pvector_types, int data_enum);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+ 		void        DeclareIndependents(void);
+ 		void        StartTrace(void);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16300)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16301)
+@@ -890,6 +890,73 @@
+ 	*pnumstrings=numstrings;
+ }
+ /*}}}*/
++/*FUNCTION IoModel::FetchMultipleData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
++void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,int data_enum){
++
++	int my_rank;
++
++	int i;
++	int num_instances;
++
++	/*output: */
++	int   numstrings=0;
++	char** strings=NULL;
++
++	/*intermediary: */
++	char* string=NULL;
++	int   string_size;
++	int*   code=NULL;
++	FILE** file_instances=NULL;
++	FILE* file_id=NULL;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Get file pointers to beginning of the data (multiple instances of it): */
++	file_instances=this->SetFilePointerToData(&codes,NULL,&num_instances,data_enum);
++
++	if(num_instances){
++
++		strings=xNew<char*>(num_instances);
++
++		for(i=0;i<num_instances;i++){
++
++			file_id=file_instances[i];
++
++			/*check we are indeed finding a string, not something else: */
++			if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
++
++			/*We have to read a string from disk. First read the dimensions of the string, then the string: */
++			if(my_rank==0){  
++				if(fread(&string_size,sizeof(int),1,file_id)!=1) _error_("could not read length of string ");
++			}
++
++			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++			/*Now allocate string: */
++			if(string_size){
++				string=xNew<char>((string_size+1));
++				string[string_size]='\0';
++
++				/*Read string on node 0, then broadcast: */
++				if(my_rank==0){  
++					if(fread(string,string_size*sizeof(char),1,file_id)!=1)_error_(" could not read string ");
++				}
++				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
++			}
++			else{
++				string=xNew<char>(1);
++				string[0]='\0';
++			}
++			strings[i]=string;
++		}
++	}
++	
++	/*Assign output pointers: */
++	*pstrings=strings;
++	*pnumstrings=num_instances;
++}
++/*}}}*/
+ /*FUNCTION IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+ 
+@@ -976,6 +1043,99 @@
+ 	*pnumrecords=numrecords;
+ }
+ /*}}}*/
++/*FUNCTION IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
++void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
++
++	int i;
++	int num_instances;
++	int my_rank;
++	
++	FILE** file_instances=NULL;
++	FILE* file_id=NULL;
++
++	/*output: */
++	IssmDouble** matrices=NULL;
++	int*     mdims=NULL;
++	int*     ndims=NULL;
++	int      numrecords=0;
++
++	/*intermediary: */
++	int     M, N;
++	IssmPDouble *pmatrix = NULL;
++	IssmDouble *matrix = NULL;
++	int     code;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	
++	/*Get file pointers to beginning of the data (multiple instances of it): */
++	file_instances=this->SetFilePointerToData(&codes,NULL,&num_instances,data_enum);
++
++	if(num_instances){
++
++		/*Allocate matrices :*/
++		matrices=xNew<IssmDouble*>(numrecords);
++		mdims=xNew<int>(numrecords);
++		ndims=xNew<int>(numrecords);
++
++		for(i=0;i<num_instances;i++){
++
++			file_id=file_instances[i];
++			code=codes[i];
++
++			if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
++			
++			/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
++			/*numberofelements: */
++			if(my_rank==0){  
++				if(fread(&M,sizeof(int),1,file_id)!=1) _error_("could not read number of rows for matrix ");
++			}
++			ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++			if(my_rank==0){  
++				if(fread(&N,sizeof(int),1,file_id)!=1) _error_("could not read number of columns for matrix ");
++			}
++			ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++			/*Now allocate matrix: */
++			if(M*N){
++				pmatrix=xNew<IssmPDouble>(M*N);
++
++				/*Read matrix on node 0, then broadcast: */
++				if(my_rank==0){  
++					if(fread(pmatrix,M*N*sizeof(IssmPDouble),1,file_id)!=1) _error_("could not read matrix ");
++				}
++				ISSM_MPI_Bcast(pmatrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
++
++				_assert_(this->independents);
++				if (this->independents[data_enum]){
++					/*this data has already been checked out! So cancel all that we've done here, and return 
++					 * the data[data_enum] directly: */
++					matrix=this->data[data_enum];
++				}
++				else{
++					matrix=xNew<IssmDouble>(M*N);
++					for (int i=0;i<M*N;++i) matrix[i]=pmatrix[i];
++				}
++				xDelete<IssmPDouble>(matrix);
++			}
++			else
++				matrix=NULL;
++			
++			/*Assign: */
++			mdims[i]=M;
++			matrices[i]=matrix;
++			ndims[i]=N;
++		}
++	}
++
++	/*Assign output pointers: */
++	*pmatrices=matrices;
++	*pmdims=mdims;
++	*pndims=ndims;
++	*pnumrecords=num_instances;
++}
++/*}}}*/
+ /*FUNCTION IoModel::FetchData(Option**  poption,int data_enum){{{*/
+ void  IoModel::FetchData(Option** poption,int index){
+ 
+@@ -1256,7 +1416,6 @@
+ 	/*Broadcast code and vector type: */
+ 	ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 	ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	if(record_code==5) ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pcode=record_code;
+@@ -1265,3 +1424,101 @@
+ 	return fid;
+ }
+ /*}}}*/
++/*FUNCTION IoModel::SetFilePointersToData{{{*/
++FILE** IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum){
++
++	int  my_rank;
++	int  found         = 0;
++	int  record_enum;
++	int  record_length;
++	int  record_code;       //1 to 7 number
++	int  vector_type;       //1 to 7 number
++	int* vector_types   = NULL;
++	int* codes= NULL;
++	int  num_instances  = 0;
++	int  counter;
++	FILE** file_instances =NULL;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Go find in the binary file, the data we want to fetch and count the number of 
++	 * instances it appears: */
++	if(my_rank==0){
++
++		/*First set FILE* position to the beginning of the file: */
++		fseek(fid,0,SEEK_SET);
++
++		/*Now march through file looking for the correct data identifier: */
++		for(;;){
++			/*Read enum for this size of first string name: */
++			if(fread(&record_enum,sizeof(int),1,fid)==0){
++				/*Ok, we have reached the end of the file. break: */
++				break;
++			}
++
++			/*Is this the record sought for? : */
++			if (data_enum==record_enum) num_instances++;
++
++			/*Read the record length, and use it to skip the record: */
++			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
++			fseek(fid,record_length,SEEK_CUR);
++		}
++
++		/*Ok, initialize the number of file handles we are going to return: */
++		if(num_instances){
++			file_instances = xNew<FILE*>(num_instances);
++			codes = xNew<int>(num_instances);
++			vector_types = xNew<int>(num_instances);
++		}
++
++	
++		/*Reset FILE* position to the beginning of the file, and start again, this time saving the data information 
++		 * as we find it: */
++		counter=0;
++		fseek(fid,0,SEEK_SET);
++
++		for(;;){
++			/*Read enum for this size of first string name: */
++			if(fread(&record_enum,sizeof(int),1,fid)==0){
++				/*Ok, we have reached the end of the file. break: */
++				break;
++			}
++
++			/*Is this the record sought for? : */
++			if (data_enum==record_enum){
++				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
++				fseek(fid,sizeof(int),SEEK_CUR);
++				if(fread(&record_code,sizeof(int),1,fid)!=1) _error_("Could not read record_code");
++
++				/*if record_code points to a vector, get its type (nodal or elementary): */
++				if(5<=record_code && record_code<=7){
++					if(fread(&vector_type,sizeof(int),1,fid)!=1) _error_("Could not read vector_type");
++				}
++				codes[counter]=record_code;
++				vector_types[counter]=vector_type;
++				file_instances[counter]=fid;
++				counter++;
++				break;
++			}
++			else{
++				/*This is not the correct string, read the record length, and use it to skip this record: */
++				if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
++				/*skip: */
++				fseek(fid,record_length,SEEK_CUR);
++			}
++		}
++	}
++
++	/*Broadcast data: */
++	ISSM_MPI_Bcast(&num_instances,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(codes,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(vector_types,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++	/*Assign output pointers:*/
++	*pcodes=codes;
++	*pnum_instances=num_instances;
++	if(pvector_types)*pvector_types=vector_types;
++	return file_instances;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Massfluxatgate.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16301)
+@@ -0,0 +1,124 @@
++/*!\file Massfluxatgate.h
++ * \brief: header file for Massfluxatgate object
++ */
++
++#ifndef _MASSFLUXATGATE_H_
++#define _MASSFLUXATGATE_H_
++
++/*Headers:*/
++/*{{{*/
++#include "../shared/shared.h"
++#include "../datastructures/datastructures.h"
++/*}}}*/
++
++template <class doubletype>
++class Massfluxatgate: public Object{
++
++	public: 
++
++		char*       name;
++		int         numsegments;
++		doubletype *x1;
++		doubletype *y1;
++		doubletype *x2;
++		doubletype *y2;
++		int*        elements;
++
++		/*Massfluxatgate constructors, destructors :*/
++		/*FUNCTION Massfluxatgate() {{{*/
++		Massfluxatgate(){
++			this->name     = 0;
++			this->numsegments     = 0;
++			this->segments   = 0;
++		}
++		/*}}}*/
++		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* segments) {{{*/
++		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_segments) {
++
++			this->name   = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->numsegments=in_numsegments;
++
++			if(this->numsegments){
++				this->x1=xNew<doubletype>(this->numsegments);
++				this->x2=xNew<doubletype>(this->numsegments);
++				this->y1=xNew<doubletype>(this->numsegments);
++				this->y2=xNew<doubletype>(this->numsegments);
++				this->elements=xNew<int>(this->numsegments);
++
++				for(i=0;i<this->numsegments;i++){
++					this->x1[i]=in_segments[5*i+0];
++					this->y1[i]=in_segments[5*i+1];
++					this->x2[i]=in_segments[5*i+2];
++					this->y2[i]=in_segments[5*i+3];
++					this->elements[i]=(int)in_segments[5*i+4];
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* x1, doubletype* y1, doubletype* x2, doubletype* y2,int* elements) {{{*/
++		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_x1, doubletype* in_y1, doubletype* in_x2, doubletype* in_y2,int* in_elements){
++
++			this->name   = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->numsegments=in_numsegments;
++
++			if(this->numsegments){
++				this->x1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x1,in_x1,this->numsegments);
++				this->y1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y1,in_y1,this->numsegments);
++				this->x2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x2,in_x2,this->numsegments);
++				this->y2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y2,in_y2,this->numsegments);
++				this->elements=xNew<int>(this->numsegments); xMemCpy<int>(this->elements,in_elements,this->numsegments);
++				
++			}
++		}
++		/*}}}*/
++		/*FUNCTION ~Massfluxatgate() {{{*/
++		~Massfluxatgate(){
++			xDelete<doubletype>(this->x1);
++			xDelete<doubletype>(this->y1);
++			xDelete<doubletype>(this->x2);
++			xDelete<doubletype>(this->y2);
++			xDelete<int>(this->elements);
++			xDelete<char>(this->name);
++		}
++		/*}}}*/
++
++		/*Object virtual function resolutoin: */
++		/*FUNCTION Echo(){{{*/
++		void Echo(void){
++			_printf_(" Massfluxatgate: " << name << "\n");
++			_printf_("    numsegments: " << numsegments << "\n");
++			if(numsegments){
++				_printf_("   element: x1, y1, x2, y2:\n");
++				for(int i=0;i<numsegments;i++){
++					_printf_(elements[i] << " " << x1[i] << " " << y1[i] << " " << x2[i] << " " << y2[i] << "\n");
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION DeepEcho(){{{*/
++		void DeepEcho(void){
++			this->Echo();
++		}
++		/*}}}*/
++		/*FUNCTION Id(){{{*/
++		int Id(void){
++			return -1;
++		}
++		/*}}}*/
++		/*FUNCTION ObjectEnum{{{*/
++		int ObjectEnum(void){
++			return MassfluxatgateEnum;
++		}
++		/*}}}*/
++		/*FUNCTION copy {{{*/
++		Object* copy() {
++			return new Massfluxatgate(this->name,this->numsegments,this->); 
++		}
++		/*}}}*/
++};
++
++#endif  /* _MASSFLUXATGATE_H_ */
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16300)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16301)
+@@ -46,7 +46,9 @@
+ 			obj.definitions{i}.marshall(md,fid);
+ 			obj.enums(i)=StringToEnum(class(obj.definitions{i}));
+ 		end
+-		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);
++		obj.enums=unique(obj.enums);
++		
++		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 16300)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 16301)
+@@ -1,11 +0,0 @@
+-function macro=MassFluxSegmentsEnum()
+-%MASSFLUXSEGMENTSENUM - Enum of MassFluxSegments
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MassFluxSegmentsEnum()
+-
+-macro=StringToEnum('MassFluxSegments');
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 16300)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 16301)
+@@ -1,11 +0,0 @@
+-function macro=MassFluxSegmentsPresentEnum()
+-%MASSFLUXSEGMENTSPRESENTENUM - Enum of MassFluxSegmentsPresent
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MassFluxSegmentsPresentEnum()
+-
+-macro=StringToEnum('MassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 16301)
+@@ -0,0 +1,11 @@
++function macro=OutputdefinitionEnum()
++%OUTPUTDEFINITIONENUM - Enum of Outputdefinition
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=OutputdefinitionEnum()
++
++macro=StringToEnum('Outputdefinition');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 16301)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateEnum()
++%MASSFLUXATGATEENUM - Enum of Massfluxatgate
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateEnum()
++
++macro=StringToEnum('Massfluxatgate');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16300)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16301)
+@@ -211,10 +211,6 @@
+ def MasstransportVertexPairingEnum(): return StringToEnum("MasstransportVertexPairing")[0]
+ def MasstransportNumRequestedOutputsEnum(): return StringToEnum("MasstransportNumRequestedOutputs")[0]
+ def MasstransportRequestedOutputsEnum(): return StringToEnum("MasstransportRequestedOutputs")[0]
+-def MassFluxSegmentsEnum(): return StringToEnum("MassFluxSegments")[0]
+-def MassFluxSegmentsPresentEnum(): return StringToEnum("MassFluxSegmentsPresent")[0]
+-def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
+-def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
+ def QmuIsdakotaEnum(): return StringToEnum("QmuIsdakota")[0]
+ def QmuNumberofpartitionsEnum(): return StringToEnum("QmuNumberofpartitions")[0]
+ def QmuNumberofresponsesEnum(): return StringToEnum("QmuNumberofresponses")[0]
+@@ -523,6 +519,11 @@
+ def TimeEnum(): return StringToEnum("Time")[0]
+ def TriaP1ElementResultEnum(): return StringToEnum("TriaP1ElementResult")[0]
+ def WaterColumnOldEnum(): return StringToEnum("WaterColumnOld")[0]
++def OutputdefinitionEnum(): return StringToEnum("Outputdefinition")[0]
++def OutputdefinitionEnumsEnum(): return StringToEnum("OutputdefinitionEnums")[0]
++def MassfluxatgateEnum(): return StringToEnum("Massfluxatgate")[0]
++def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
++def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
+ def MinVelEnum(): return StringToEnum("MinVel")[0]
+ def MaxVelEnum(): return StringToEnum("MaxVel")[0]
+ def MinVxEnum(): return StringToEnum("MinVx")[0]
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16301)
+@@ -0,0 +1,11 @@
++function macro=OutputdefinitionEnumsEnum()
++%OUTPUTDEFINITIONENUMSENUM - Enum of Outputdefinitions
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=OutputdefinitionEnumsEnum()
++
++macro=StringToEnum('Outputdefinitions');
Index: issm/oecreview/Archive/16133-16554/ISSM-16301-16302.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16301-16302.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16301-16302.diff	(revision 16556)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 16301)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 16302)
+@@ -35,12 +35,12 @@
+ md.qmu.responses.massFlux6=response_function('MassFlux6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ 
+ md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1','../Exp/MassFlux1.exp'),...
+-		massfluxatgate('MassFlux2','../Exp/MassFlux2.exp'),...
+-		massfluxatgate('MassFlux3','../Exp/MassFlux3.exp'),...
+-		massfluxatgate('MassFlux4','../Exp/MassFlux4.exp'),...
+-		massfluxatgate('MassFlux5','../Exp/MassFlux5.exp'),...
+-		massfluxatgate('MassFlux6','../Exp/MassFlux6.exp')...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+ 	};
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16302-16303.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16302-16303.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16302-16303.diff	(revision 16556)
@@ -0,0 +1,159 @@
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16302)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16303)
+@@ -1,4 +1,4 @@
+-function exportVTK(filename,model,Solution)
++function exportVTK(filename,model)
+ % vtk export
+ % function exportVTK(filename,model,Solution)
+ % creates a directory with the vtk files for you simulation
+@@ -18,14 +18,12 @@
+ separator=filesep;
+ mkdir(filename);
+ 
++%get the element related variables
+ points=[model.mesh.x model.mesh.y model.mesh.z];
+ [num_of_points,dim]=size(points);
+ [num_of_elt]=size(model.mesh.elements,1);
+ [point_per_elt]=size(model.mesh.elements,2);
+-sol_enum=EnumToString(Solution);
+ 
+-sol_struct=model.results.(sol_enum);
+-
+ %Select the type of element function of the number of nodes per elements
+ if point_per_elt==3;
+ 	celltype=5; %triangles
+@@ -35,21 +33,33 @@
+ 	error('Your Element definition is not taken into account \n');
+ end
+ 
+-%looking for multiple time steps
+-num_of_timesteps=size(sol_struct,2);
++%sol_enum=EnumToString(Solution);
+ 
+-%getting the number of fields in the solution
+-fieldnames=fields(sol_struct(1));
+-num_of_fields=length(fieldnames);
++%this is the result structure
++res_struct=model.results;
+ 
+-if num_of_timesteps==1; %just one timestep only write one file
++%Getting all the solutions of the model
++solnames=fields(res_struct);
++num_of_sols=length(solnames);
+ 
+-	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk'),'w+');
++%building solution structure 
++for i=1:num_of_sols
++	sol_struct{i}=res_struct.(solnames{i});
++end
++
++%looking for multiple time steps
++num_of_timesteps=size(sol_struct{1},2);
++
++for i=1:num_of_timesteps;
++	%by default, we take the timestep from the first solution sturcture
++	timestep=sol_struct{1}(i).step;
++	
++	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+ 	fprintf(FID,'# vtk DataFile Version 2.0 \n');
+ 	fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+ 	fprintf(FID,'ASCII \n');
+ 	fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
++	
+ 	fprintf(FID,'POINTS %d float\n',num_of_points);
+ 	if(dim==3);
+ 		s='%f %f %f \n';
+@@ -58,72 +68,38 @@
+   end
+ 	P=[points zeros(num_of_points,3-dim)];
+ 	fprintf(FID,s,P');
+-
++ 
+ 	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+ 	s='%d';
+ 	for k=1:point_per_elt
+-    s=horzcat(s,{' %d'});
++		s=horzcat(s,{' %d'});
+   end
+ 	s=cell2mat(horzcat(s,{'\n'}));
+ 	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
++ 
+ 	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+ 	s='%d\n';
+ 	fprintf(FID,s,celltype*ones(num_of_elt,1));
++	
++	%loop over the different solution structures
++	for j=1:num_of_sols
+ 
+-	%check which field is a real result and print	
+-	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-	for j=1:num_of_fields
+-
+-		if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-			fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
+-			fprintf(FID,'LOOKUP_TABLE default\n');
+-			s='%e\n';
+-			fprintf(FID,s,sol_struct.(fieldnames{j}));
+-	  end
+-  end
+-		fclose(FID);
+-else
+-	for i=1:num_of_timesteps;
+-		timestep=sol_struct(i).step;
+-		FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+-		fprintf(FID,'# vtk DataFile Version 2.0 \n');
+-		fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+-		fprintf(FID,'ASCII \n');
+-		fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
+-		fprintf(FID,'POINTS %d float\n',num_of_points);
+-		if(dim==3);
+-			s='%f %f %f \n';
+-		elseif(dim==2);
+-			s='%f %f \n';
+-   end
+-		P=[points zeros(num_of_points,3-dim)];
+-		fprintf(FID,s,P');
+-
+-		fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+-		s='%d';
+-		for k=1:point_per_elt
+-			s=horzcat(s,{' %d'});
+-  	end
+-		s=cell2mat(horzcat(s,{'\n'}));
+-		fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
+-		fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+-		s='%d\n';
+-		fprintf(FID,s,celltype*ones(num_of_elt,1));
+-
++		%getting the number of fields in the solution
++		fieldnames=fields(sol_struct{j}(i));
++		num_of_fields=length(fieldnames);
++		
+ 		%check which field is a real result and print
+ 		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-		for j=1:num_of_fields
+-
+-			if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
++		for k=1:num_of_fields
++			
++			if ((length(sol_struct{j}(i).(fieldnames{k})))==num_of_points);
++				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{k});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
+-				fprintf(FID,s,sol_struct(i).(fieldnames{j}));
++				fprintf(FID,s,sol_struct{j}(i).(fieldnames{k}));
+ 	    end		
+-    end 
+-		fclose(FID);
++     end 
++	 end
++	 fclose(FID);
+   end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16303-16304.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16303-16304.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16303-16304.diff	(revision 16556)
@@ -0,0 +1,1486 @@
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 16303)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 16304)
+@@ -27,23 +27,17 @@
+ %responses
+ md.qmu.responses.MaxVel=response_function('MaxVel',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ md.qmu.responses.IceVolume=response_function('IceVolume',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux1=response_function('MassFlux1',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux2=response_function('MassFlux2',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux3=response_function('MassFlux3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux4=response_function('MassFlux4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.MassFlux5=response_function('MassFlux5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+-md.qmu.responses.massFlux6=response_function('MassFlux6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux1=response_function('indexed_MassFlux_1',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux2=response_function('indexed_MassFlux_2',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux3=response_function('indexed_MassFlux_3',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux4=response_function('indexed_MassFlux_4',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.MassFlux5=response_function('indexed_MassFlux_5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
++md.qmu.responses.massFlux6=response_function('indexed_MassFlux_6',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
+ 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
++%mass flux profiles
++md.qmu.mass_flux_profiles={'../Exp/MassFlux1.exp','../Exp/MassFlux2.exp','../Exp/MassFlux3.exp','../Exp/MassFlux4.exp','../Exp/MassFlux5.exp','../Exp/MassFlux6.exp'};
++md.qmu.mass_flux_profile_directory=pwd;
+ 
+-
+ %%  nond_sampling study
+ md.qmu.method=dakota_method('nond_samp');
+ md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),'seed',1234,'samples',20,'sample_type','lhs');
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16303)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16304)
+@@ -26,6 +26,7 @@
+ 	AutodiffFosForwardIndexEnum,
+ 	AutodiffFovForwardIndicesEnum,
+ 	AutodiffFosReverseIndexEnum,
++	AutodiffMassFluxSegmentsPresentEnum,
+ 	AutodiffKeepEnum,
+ 	AutodiffObufsizeEnum,
+ 	AutodiffLbufsizeEnum,
+@@ -212,6 +213,9 @@
+ 	MasstransportNumRequestedOutputsEnum,
+ 	MasstransportRequestedOutputsEnum,
+ 	QmuIsdakotaEnum,
++	MassFluxSegmentsEnum,
++	MassFluxSegmentsPresentEnum,
++	QmuMassFluxSegmentsPresentEnum,
+ 	QmuNumberofpartitionsEnum,
+ 	QmuNumberofresponsesEnum,
+ 	QmuPartitionEnum,
+@@ -538,13 +542,6 @@
+ 	TriaP1ElementResultEnum,
+ 	WaterColumnOldEnum,
+ 	/*}}}*/
+-	/*Output Definitions{{{*/
+-	OutputdefinitionEnum,
+-	OutputdefinitionEnumsEnum,
+-	MassfluxatgateEnum,
+-	MassfluxatgateNameEnum,
+-	MassfluxatgateSegmentsEnum,
+-	/*}}}*/
+ 	/*Responses{{{*/
+ 	MinVelEnum,
+ 	MaxVelEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16303)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16304)
+@@ -34,6 +34,7 @@
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
+ 		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
++		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+ 		case AutodiffKeepEnum : return "AutodiffKeep";
+ 		case AutodiffObufsizeEnum : return "AutodiffObufsize";
+ 		case AutodiffLbufsizeEnum : return "AutodiffLbufsize";
+@@ -220,6 +221,9 @@
+ 		case MasstransportNumRequestedOutputsEnum : return "MasstransportNumRequestedOutputs";
+ 		case MasstransportRequestedOutputsEnum : return "MasstransportRequestedOutputs";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
++		case MassFluxSegmentsEnum : return "MassFluxSegments";
++		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
++		case QmuMassFluxSegmentsPresentEnum : return "QmuMassFluxSegmentsPresent";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+ 		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+ 		case QmuPartitionEnum : return "QmuPartition";
+@@ -527,11 +531,6 @@
+ 		case TimeEnum : return "Time";
+ 		case TriaP1ElementResultEnum : return "TriaP1ElementResult";
+ 		case WaterColumnOldEnum : return "WaterColumnOld";
+-		case OutputdefinitionEnum : return "Outputdefinition";
+-		case OutputdefinitionEnumsEnum : return "OutputdefinitionEnums";
+-		case MassfluxatgateEnum : return "Massfluxatgate";
+-		case MassfluxatgateNameEnum : return "MassfluxatgateName";
+-		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
+ 		case MinVelEnum : return "MinVel";
+ 		case MaxVelEnum : return "MaxVel";
+ 		case MinVxEnum : return "MinVx";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16303)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16304)
+@@ -34,6 +34,7 @@
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
+ 	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
++	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"AutodiffObufsize")==0) return AutodiffObufsizeEnum;
+ 	      else if (strcmp(name,"AutodiffLbufsize")==0) return AutodiffLbufsizeEnum;
+@@ -135,11 +136,11 @@
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
+ 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
+-	      else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
++	      if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
++	      else if (strcmp(name,"InversionIscontrol")==0) return InversionIscontrolEnum;
+ 	      else if (strcmp(name,"InversionTao")==0) return InversionTaoEnum;
+ 	      else if (strcmp(name,"InversionIncompleteAdjoint")==0) return InversionIncompleteAdjointEnum;
+ 	      else if (strcmp(name,"InversionMaxParameters")==0) return InversionMaxParametersEnum;
+@@ -223,6 +224,9 @@
+ 	      else if (strcmp(name,"MasstransportNumRequestedOutputs")==0) return MasstransportNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"MasstransportRequestedOutputs")==0) return MasstransportRequestedOutputsEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
++	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
++	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
++	      else if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+ 	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+@@ -255,14 +259,14 @@
+ 	      else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
+-	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+@@ -378,14 +382,14 @@
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"Matpar")==0) return MatparEnum;
++	      else if (strcmp(name,"Matpar")==0) return MatparEnum;
+ 	      else if (strcmp(name,"Node")==0) return NodeEnum;
+ 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+ 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
+@@ -501,14 +505,14 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+-         else stage=5;
+-   }
+-   if(stage==5){
+-	      if (strcmp(name,"GiaW")==0) return GiaWEnum;
++	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+ 	      else if (strcmp(name,"P0")==0) return P0Enum;
+ 	      else if (strcmp(name,"P1")==0) return P1Enum;
+ 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
+@@ -539,11 +543,6 @@
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+-	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+-	      else if (strcmp(name,"OutputdefinitionEnums")==0) return OutputdefinitionEnumsEnum;
+-	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+-	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
+-	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16303)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16304)
+@@ -1,41 +0,0 @@
+-/*!\file: CreateParametersOutputDefinitions.cpp
+- * \brief driver for creating output definitions dataset, and including it into the parameters dataset
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersOutputDefinitions(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	Parameters *parameters = NULL;
+-	DataSet* output_definitions=NULL;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+-	output_definitions=new DataSet();
+-	
+-	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionEnumsEnum); 
+-	if(num_output_definitions){
+-		for (i=0;i<num_output_definitions;i++){
+-
+-			if (output_definition_enums[i]==MassfluxatgateEnum){
+-
+-				/*Fetch segments and names: */
+-				iomodel->FetchMultipleData(&gatenames,&numgates,MassfluxatgateNameEnum);
+-				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,&gatesegments_N,&numgates,MassfluxatgateSegmentsEnum);
+-				for(j=0;j<numgates;j++){
+-					output_definitions->AddObject(new Massfluxgate(gatenames[i],gatesegments[i],gatesegments_M[i],gatesegments_N[i]));
+-				}
+-			}
+-			else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!");
+-		}
+-	}
+-	parameters->AddObject(new DataSetParam(OutputdefinitionEnum,output_definitions);
+-
+-	
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16303)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16304)
+@@ -159,8 +159,4 @@
+ /*Distribution of dofs: */
+ void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type);
+ 
+-#ifdef _HAVE_RESPONSES_
+-void CreateParametersOutputDefinitions(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ #endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16303)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16304)
+@@ -24,6 +24,20 @@
+ 	IssmDouble  time;
+ 	bool        ispdd,isdelta18o;
+ 
++	/*parameters for mass flux: {{{*/
++	int          mass_flux_num_profiles     = 0;
++	bool         qmu_mass_flux_present      = false;
++	bool         autodiff_mass_flux_present = false;
++	bool         mass_flux_present          = false;
++	IssmDouble **array                      = NULL;
++	int         *mdims_array                = NULL;
++	int         *ndims_array                = NULL;
++	IssmDouble  *temp_matrix                = NULL;
++	int          temp_m,temp_n;
++	IssmDouble  *matrix                     = NULL;
++	int          count;
++	/*}}}*/
++
+ 	if(*pparameters)return; //do not create parameters twice!
+ 
+ 	/*Initialize dataset: */
+@@ -136,9 +150,68 @@
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,MasstransportRequestedOutputsEnum);
+ 
+-	/*Output definitions dataset: */
+-	CreateOutputDefinitions(&parameters,iomodel);
++	/*Deal with mass flux segments: {{{*/
++	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
++	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+ 
++	if(qmu_mass_flux_present || autodiff_mass_flux_present)mass_flux_present=true;
++	else mass_flux_present=false;
++	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
++
++	if(mass_flux_present){
++
++		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
++		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
++		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
++
++		/*Go through segments, and extract those that belong to this cpu: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			temp_matrix=array[i];
++			temp_m=mdims_array[i];
++			temp_n=ndims_array[i];
++			_assert_(temp_n==5);
++
++			m=0;
++			for(j=0;j<temp_m;j++){
++				if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
++			}
++			if(m){
++				matrix=xNewZeroInit<IssmDouble>(5*m);
++				count=0;
++				for(j=0;j<temp_m;j++){
++					if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
++						for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
++						count++;
++					}
++				}
++			}
++			else{
++				matrix=NULL;
++			}
++
++			/*Assign: */
++			array[i]=matrix;
++			mdims_array[i]=m;
++			ndims_array[i]=5;
++
++			/*Free temporary matrix: */
++			xDelete<IssmDouble>(temp_matrix);
++		}
++
++		/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
++		parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
++
++		/*Free data: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			IssmDouble* matrix=array[i];
++			xDelete<IssmDouble>(matrix);
++		}
++		xDelete<int>(mdims_array); 
++		xDelete<int>(ndims_array);
++		xDelete<IssmDouble*>(array);
++	}
++	/*}}}*/
++
+ 	/*Solution specific parameters*/
+ 	#ifdef _HAVE_HYDROLOGY_
+ 	CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16303)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16304)
+@@ -541,10 +541,6 @@
+ 					./classes/GiaDeflectionCoreArgs.h
+ 
+ #}}}
+-#Responses sources  {{{
+-responses_sources =  ./classes/Massfluxatgate.h \
+-					 ./modules/ModelProcessorx/CreateOutputDefinitions.cpp
+-#}}}
+ #Damage sources  {{{
+ damage_sources =  ./analyses/damage_core.cpp\
+ 					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+@@ -881,10 +877,6 @@
+ issm_sources  +=  $(dakota_sources)
+ endif
+ 
+-if RESPONSES
+-issm_sources  +=  $(responses_sources)
+-endif
+-
+ if PETSC
+ issm_sources  +=  $(petsc_sources)
+ endif
+Index: ../trunk-jpl/src/c/classes/Massfluxatgate.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16303)
++++ ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16304)
+@@ -1,124 +0,0 @@
+-/*!\file Massfluxatgate.h
+- * \brief: header file for Massfluxatgate object
+- */
+-
+-#ifndef _MASSFLUXATGATE_H_
+-#define _MASSFLUXATGATE_H_
+-
+-/*Headers:*/
+-/*{{{*/
+-#include "../shared/shared.h"
+-#include "../datastructures/datastructures.h"
+-/*}}}*/
+-
+-template <class doubletype>
+-class Massfluxatgate: public Object{
+-
+-	public: 
+-
+-		char*       name;
+-		int         numsegments;
+-		doubletype *x1;
+-		doubletype *y1;
+-		doubletype *x2;
+-		doubletype *y2;
+-		int*        elements;
+-
+-		/*Massfluxatgate constructors, destructors :*/
+-		/*FUNCTION Massfluxatgate() {{{*/
+-		Massfluxatgate(){
+-			this->name     = 0;
+-			this->numsegments     = 0;
+-			this->segments   = 0;
+-		}
+-		/*}}}*/
+-		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* segments) {{{*/
+-		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_segments) {
+-
+-			this->name   = xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->numsegments=in_numsegments;
+-
+-			if(this->numsegments){
+-				this->x1=xNew<doubletype>(this->numsegments);
+-				this->x2=xNew<doubletype>(this->numsegments);
+-				this->y1=xNew<doubletype>(this->numsegments);
+-				this->y2=xNew<doubletype>(this->numsegments);
+-				this->elements=xNew<int>(this->numsegments);
+-
+-				for(i=0;i<this->numsegments;i++){
+-					this->x1[i]=in_segments[5*i+0];
+-					this->y1[i]=in_segments[5*i+1];
+-					this->x2[i]=in_segments[5*i+2];
+-					this->y2[i]=in_segments[5*i+3];
+-					this->elements[i]=(int)in_segments[5*i+4];
+-				}
+-			}
+-		}
+-		/*}}}*/
+-		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* x1, doubletype* y1, doubletype* x2, doubletype* y2,int* elements) {{{*/
+-		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_x1, doubletype* in_y1, doubletype* in_x2, doubletype* in_y2,int* in_elements){
+-
+-			this->name   = xNew<char>(strlen(in_name)+1);
+-			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+-
+-			this->numsegments=in_numsegments;
+-
+-			if(this->numsegments){
+-				this->x1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x1,in_x1,this->numsegments);
+-				this->y1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y1,in_y1,this->numsegments);
+-				this->x2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x2,in_x2,this->numsegments);
+-				this->y2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y2,in_y2,this->numsegments);
+-				this->elements=xNew<int>(this->numsegments); xMemCpy<int>(this->elements,in_elements,this->numsegments);
+-				
+-			}
+-		}
+-		/*}}}*/
+-		/*FUNCTION ~Massfluxatgate() {{{*/
+-		~Massfluxatgate(){
+-			xDelete<doubletype>(this->x1);
+-			xDelete<doubletype>(this->y1);
+-			xDelete<doubletype>(this->x2);
+-			xDelete<doubletype>(this->y2);
+-			xDelete<int>(this->elements);
+-			xDelete<char>(this->name);
+-		}
+-		/*}}}*/
+-
+-		/*Object virtual function resolutoin: */
+-		/*FUNCTION Echo(){{{*/
+-		void Echo(void){
+-			_printf_(" Massfluxatgate: " << name << "\n");
+-			_printf_("    numsegments: " << numsegments << "\n");
+-			if(numsegments){
+-				_printf_("   element: x1, y1, x2, y2:\n");
+-				for(int i=0;i<numsegments;i++){
+-					_printf_(elements[i] << " " << x1[i] << " " << y1[i] << " " << x2[i] << " " << y2[i] << "\n");
+-				}
+-			}
+-		}
+-		/*}}}*/
+-		/*FUNCTION DeepEcho(){{{*/
+-		void DeepEcho(void){
+-			this->Echo();
+-		}
+-		/*}}}*/
+-		/*FUNCTION Id(){{{*/
+-		int Id(void){
+-			return -1;
+-		}
+-		/*}}}*/
+-		/*FUNCTION ObjectEnum{{{*/
+-		int ObjectEnum(void){
+-			return MassfluxatgateEnum;
+-		}
+-		/*}}}*/
+-		/*FUNCTION copy {{{*/
+-		Object* copy() {
+-			return new Massfluxatgate(this->name,this->numsegments,this->); 
+-		}
+-		/*}}}*/
+-};
+-
+-#endif  /* _MASSFLUXATGATE_H_ */
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16303)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16304)
+@@ -16,7 +16,6 @@
+ #include "./DependentObject.h"
+ #include "./IndependentObject.h"
+ #include "./Segment.h"
+-#include "./Massfluxatgate.h"
+ 
+ /*Constraints: */
+ #include "./Constraints/Constraints.h"
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16303)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16304)
+@@ -75,14 +75,11 @@
+ 		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
+ 		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
+ 		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+-		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,int data_enum);
+-		void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+ 		void        FetchData(Option **poption,int data_enum);
+ 		void        FetchData(int num,...);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value);
+ 		void        LastIndex(int *pindex);
+-		FILE**      SetFilePointersToData(int** pcodes,int** pvector_types, int data_enum);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+ 		void        DeclareIndependents(void);
+ 		void        StartTrace(void);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16303)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16304)
+@@ -890,73 +890,6 @@
+ 	*pnumstrings=numstrings;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchMultipleData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
+-void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,int data_enum){
+-
+-	int my_rank;
+-
+-	int i;
+-	int num_instances;
+-
+-	/*output: */
+-	int   numstrings=0;
+-	char** strings=NULL;
+-
+-	/*intermediary: */
+-	char* string=NULL;
+-	int   string_size;
+-	int*   code=NULL;
+-	FILE** file_instances=NULL;
+-	FILE* file_id=NULL;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	/*Get file pointers to beginning of the data (multiple instances of it): */
+-	file_instances=this->SetFilePointerToData(&codes,NULL,&num_instances,data_enum);
+-
+-	if(num_instances){
+-
+-		strings=xNew<char*>(num_instances);
+-
+-		for(i=0;i<num_instances;i++){
+-
+-			file_id=file_instances[i];
+-
+-			/*check we are indeed finding a string, not something else: */
+-			if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+-
+-			/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+-			if(my_rank==0){  
+-				if(fread(&string_size,sizeof(int),1,file_id)!=1) _error_("could not read length of string ");
+-			}
+-
+-			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-			/*Now allocate string: */
+-			if(string_size){
+-				string=xNew<char>((string_size+1));
+-				string[string_size]='\0';
+-
+-				/*Read string on node 0, then broadcast: */
+-				if(my_rank==0){  
+-					if(fread(string,string_size*sizeof(char),1,file_id)!=1)_error_(" could not read string ");
+-				}
+-				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+-			}
+-			else{
+-				string=xNew<char>(1);
+-				string[0]='\0';
+-			}
+-			strings[i]=string;
+-		}
+-	}
+-	
+-	/*Assign output pointers: */
+-	*pstrings=strings;
+-	*pnumstrings=num_instances;
+-}
+-/*}}}*/
+ /*FUNCTION IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+ 
+@@ -1043,99 +976,6 @@
+ 	*pnumrecords=numrecords;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
+-void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+-
+-	int i;
+-	int num_instances;
+-	int my_rank;
+-	
+-	FILE** file_instances=NULL;
+-	FILE* file_id=NULL;
+-
+-	/*output: */
+-	IssmDouble** matrices=NULL;
+-	int*     mdims=NULL;
+-	int*     ndims=NULL;
+-	int      numrecords=0;
+-
+-	/*intermediary: */
+-	int     M, N;
+-	IssmPDouble *pmatrix = NULL;
+-	IssmDouble *matrix = NULL;
+-	int     code;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-	
+-	/*Get file pointers to beginning of the data (multiple instances of it): */
+-	file_instances=this->SetFilePointerToData(&codes,NULL,&num_instances,data_enum);
+-
+-	if(num_instances){
+-
+-		/*Allocate matrices :*/
+-		matrices=xNew<IssmDouble*>(numrecords);
+-		mdims=xNew<int>(numrecords);
+-		ndims=xNew<int>(numrecords);
+-
+-		for(i=0;i<num_instances;i++){
+-
+-			file_id=file_instances[i];
+-			code=codes[i];
+-
+-			if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+-			
+-			/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+-			/*numberofelements: */
+-			if(my_rank==0){  
+-				if(fread(&M,sizeof(int),1,file_id)!=1) _error_("could not read number of rows for matrix ");
+-			}
+-			ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-			if(my_rank==0){  
+-				if(fread(&N,sizeof(int),1,file_id)!=1) _error_("could not read number of columns for matrix ");
+-			}
+-			ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-			/*Now allocate matrix: */
+-			if(M*N){
+-				pmatrix=xNew<IssmPDouble>(M*N);
+-
+-				/*Read matrix on node 0, then broadcast: */
+-				if(my_rank==0){  
+-					if(fread(pmatrix,M*N*sizeof(IssmPDouble),1,file_id)!=1) _error_("could not read matrix ");
+-				}
+-				ISSM_MPI_Bcast(pmatrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+-
+-				_assert_(this->independents);
+-				if (this->independents[data_enum]){
+-					/*this data has already been checked out! So cancel all that we've done here, and return 
+-					 * the data[data_enum] directly: */
+-					matrix=this->data[data_enum];
+-				}
+-				else{
+-					matrix=xNew<IssmDouble>(M*N);
+-					for (int i=0;i<M*N;++i) matrix[i]=pmatrix[i];
+-				}
+-				xDelete<IssmPDouble>(matrix);
+-			}
+-			else
+-				matrix=NULL;
+-			
+-			/*Assign: */
+-			mdims[i]=M;
+-			matrices[i]=matrix;
+-			ndims[i]=N;
+-		}
+-	}
+-
+-	/*Assign output pointers: */
+-	*pmatrices=matrices;
+-	*pmdims=mdims;
+-	*pndims=ndims;
+-	*pnumrecords=num_instances;
+-}
+-/*}}}*/
+ /*FUNCTION IoModel::FetchData(Option**  poption,int data_enum){{{*/
+ void  IoModel::FetchData(Option** poption,int index){
+ 
+@@ -1416,6 +1256,7 @@
+ 	/*Broadcast code and vector type: */
+ 	ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 	ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	if(record_code==5) ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pcode=record_code;
+@@ -1424,101 +1265,3 @@
+ 	return fid;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::SetFilePointersToData{{{*/
+-FILE** IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum){
+-
+-	int  my_rank;
+-	int  found         = 0;
+-	int  record_enum;
+-	int  record_length;
+-	int  record_code;       //1 to 7 number
+-	int  vector_type;       //1 to 7 number
+-	int* vector_types   = NULL;
+-	int* codes= NULL;
+-	int  num_instances  = 0;
+-	int  counter;
+-	FILE** file_instances =NULL;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	/*Go find in the binary file, the data we want to fetch and count the number of 
+-	 * instances it appears: */
+-	if(my_rank==0){
+-
+-		/*First set FILE* position to the beginning of the file: */
+-		fseek(fid,0,SEEK_SET);
+-
+-		/*Now march through file looking for the correct data identifier: */
+-		for(;;){
+-			/*Read enum for this size of first string name: */
+-			if(fread(&record_enum,sizeof(int),1,fid)==0){
+-				/*Ok, we have reached the end of the file. break: */
+-				break;
+-			}
+-
+-			/*Is this the record sought for? : */
+-			if (data_enum==record_enum) num_instances++;
+-
+-			/*Read the record length, and use it to skip the record: */
+-			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
+-			fseek(fid,record_length,SEEK_CUR);
+-		}
+-
+-		/*Ok, initialize the number of file handles we are going to return: */
+-		if(num_instances){
+-			file_instances = xNew<FILE*>(num_instances);
+-			codes = xNew<int>(num_instances);
+-			vector_types = xNew<int>(num_instances);
+-		}
+-
+-	
+-		/*Reset FILE* position to the beginning of the file, and start again, this time saving the data information 
+-		 * as we find it: */
+-		counter=0;
+-		fseek(fid,0,SEEK_SET);
+-
+-		for(;;){
+-			/*Read enum for this size of first string name: */
+-			if(fread(&record_enum,sizeof(int),1,fid)==0){
+-				/*Ok, we have reached the end of the file. break: */
+-				break;
+-			}
+-
+-			/*Is this the record sought for? : */
+-			if (data_enum==record_enum){
+-				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
+-				fseek(fid,sizeof(int),SEEK_CUR);
+-				if(fread(&record_code,sizeof(int),1,fid)!=1) _error_("Could not read record_code");
+-
+-				/*if record_code points to a vector, get its type (nodal or elementary): */
+-				if(5<=record_code && record_code<=7){
+-					if(fread(&vector_type,sizeof(int),1,fid)!=1) _error_("Could not read vector_type");
+-				}
+-				codes[counter]=record_code;
+-				vector_types[counter]=vector_type;
+-				file_instances[counter]=fid;
+-				counter++;
+-				break;
+-			}
+-			else{
+-				/*This is not the correct string, read the record length, and use it to skip this record: */
+-				if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
+-				/*skip: */
+-				fseek(fid,record_length,SEEK_CUR);
+-			}
+-		}
+-	}
+-
+-	/*Broadcast data: */
+-	ISSM_MPI_Bcast(&num_instances,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	ISSM_MPI_Bcast(codes,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	ISSM_MPI_Bcast(vector_types,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-	/*Assign output pointers:*/
+-	*pcodes=codes;
+-	*pnum_instances=num_instances;
+-	if(pvector_types)*pvector_types=vector_types;
+-	return file_instances;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16304)
+@@ -1,63 +0,0 @@
+-%MASSFLUXATGATE class definition
+-%
+-%   Usage:
+-%      massfluxatgate=massfluxatgate();
+-
+-classdef massfluxatgate
+-	properties (SetAccess=public)  
+-		%massfluxatgate 
+-		name                = '';
+-		profilename            = ''; 
+-	end
+-	properties (SetAccess=private)  
+-		segments            = NaN;
+-	end
+-	methods
+-		function obj = massfluxatgate(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				case 1
+-					obj.name=varargin{1};
+-				case 2
+-					obj.name=varargin{1};
+-					obj.profilename=varargin{2};
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-			
+-			if ~ischar(obj.name),
+-				error('massfluxatgate error message: ''name'' field should be a string!');
+-			end
+-			if ~ischar(obj.profilename),
+-				error('massfluxatgate error message: ''profilename'' field should be a string!');
+-			end
+-
+-			%check the profilename points to a file!: 
+-			if exist(obj.profilename,'file')~=2,
+-				error('massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!');
+-			end
+-		end % }}}
+-		function disp(obj) % {{{
+-			disp(sprintf('   Massfluxatgate:\n'));
+-
+-			fielddisplay(obj,'name','identifier for this massfluxatgate response');
+-			fielddisplay(obj,'profilename','name of file (shapefile or argus file) defining a profile (or gate)');
+-			
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-
+-		%before marshalling, we need to create the segments out of the profilename: 
+-		obj.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,obj.profilename);
+-
+-		%ok, marshall name and segments: 
+-		WriteData(fid,'object',obj,'fieldname','name','format','String');
+-		WriteData(fid,'object',obj,'fieldname','segments','format','DoubleMat','mattype',1);
+-
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16304)
+@@ -1,54 +0,0 @@
+-%CONSTANTS class definition
+-%
+-%   Usage:
+-%      outputdefinition=outputdefinition();
+-
+-classdef outputdefinition
+-	properties (SetAccess=public) 
+-		definitions                 = {};
+-	end
+-	properties (SetAccess=private) 
+-		enums                 = {};
+-	end
+-	methods
+-		function obj = outputdefinition(varargin) % {{{
+-			switch nargin
+-				case 0
+-					obj=setdefaultparameters(obj);
+-				otherwise
+-					error('constructor not supported');
+-			end
+-		end % }}}
+-		function obj = setdefaultparameters(obj) % {{{
+-
+-			obj.definitions={};
+-			obj.enums=NaN;
+-
+-		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-
+-			md = checkfield(md,'outputdefinition.definitions','cell',1);
+-
+-			for i=1:length(obj.definitions),
+-				md=checkconsistency(obj.definitions{i},md,solution,analyses);
+-			end
+-
+-		end % }}}
+-		function disp(obj) % {{{
+-			disp(sprintf('   outputdefinition:'));
+-			fielddisplay(obj,'definitions','list of potential outputs that can be requested, but which need additional data to be defined');
+-
+-		end % }}}
+-		function marshall(obj,md,fid) % {{{
+-
+-		enums=zeros(length(obj.definitions),1);
+-		for i=1:length(obj.definitions),
+-			obj.definitions{i}.marshall(md,fid);
+-			obj.enums(i)=StringToEnum(class(obj.definitions{i}));
+-		end
+-		obj.enums=unique(obj.enums);
+-		
+-		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1);
+-		end % }}}
+-	end
+-end
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16303)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16304)
+@@ -85,6 +85,7 @@
+ 
+ 		#early return
+ 		if not self.isautodiff:
++			WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+ 			WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean')
+ 			return
+ 			
+@@ -180,6 +181,16 @@
+ 			indices-=1    #get c-indices numbering going
+ 			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
++		#deal with mass fluxes:  {{{
++		mass_flux_segments=[dep.segments for dep in self.dependents if strcmpi(dep.name,'MassFlux')]
++
++		if mass_flux_segments:
++			WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray')
++			flag=True
++		else:
++			flag=False
++		WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
++		#}}}
+ 		#deal with trace keep on: {{{
+ 		keep=False
+ 
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16304)
+@@ -82,6 +82,7 @@
+ 
+ 			%early return
+ 			if ~obj.isautodiff,
++				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 				WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean');
+ 				return;
+ 			end
+@@ -196,6 +197,22 @@
+ 				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3);
+ 			end
+ 			%}}}
++			%deal with mass fluxes:  {{{
++			mass_flux_segments=cell(0,1);
++			for i=1:num_dependent_objects,
++				dep=obj.dependents{i};
++				if strcmpi(dep.name,'MassFlux'),
++					mass_flux_segments{end+1,1}=dep.segments;
++				end
++			end
++			if ~isempty(mass_flux_segments), 
++				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
++				flag=true;
++			else
++				flag=false;
++			end
++			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
++			%}}}
+ 			%deal with trace keep on: {{{
+ 			keep=false;
+ 
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 16304)
+@@ -16,6 +16,9 @@
+ 		numberofresponses           = 0;
+ 		variabledescriptors         = {};
+ 		responsedescriptors         = {};
++		mass_flux_profile_directory = NaN;
++		mass_flux_profiles          = NaN;
++		mass_flux_segments          = {};
+ 		adjacency                   = NaN;
+ 		vertex_weight               = NaN;
+ 	end
+@@ -129,6 +132,9 @@
+ 			fielddisplay(obj,'variabledescriptors','');
+ 			fielddisplay(obj,'responsedescriptors','');
+ 			fielddisplay(obj,'method','array of dakota_method class');
++			fielddisplay(obj,'mass_flux_profile_directory','directory for mass flux profiles');
++			fielddisplay(obj,'mass_flux_profiles','list of mass_flux profiles');
++			fielddisplay(obj,'mass_flux_segments','');
+ 			fielddisplay(obj,'adjacency','');
+ 			fielddisplay(obj,'vertex_weight','weight applied to each mesh vertex');
+ 
+@@ -144,6 +150,13 @@
+ 			WriteData(fid,'object',obj,'fieldname','numberofresponses','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','variabledescriptors','format','StringArray');
+ 			WriteData(fid,'object',obj,'fieldname','responsedescriptors','format','StringArray');
++			if ~isempty(obj.mass_flux_segments), 
++				WriteData(fid,'data',obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
++				flag=true; 
++			else 
++				flag=false; 
++			end
++			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/qmu.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.py	(revision 16303)
++++ ../trunk-jpl/src/m/classes/qmu.py	(revision 16304)
+@@ -26,6 +26,9 @@
+ 		self.numberofresponses           = 0
+ 		self.variabledescriptors         = []
+ 		self.responsedescriptors         = []
++		self.mass_flux_profile_directory = float('NaN')
++		self.mass_flux_profiles          = float('NaN')
++		self.mass_flux_segments          = []
+ 		self.adjacency                   = float('NaN')
+ 		self.vertex_weight               = float('NaN')
+ 
+@@ -122,6 +125,9 @@
+ 		s+="%s\n" % fielddisplay(self,'variabledescriptors','')
+ 		s+="%s\n" % fielddisplay(self,'responsedescriptors','')
+ 		s+="%s\n" % fielddisplay(self,'method','array of dakota_method class')
++		s+="%s\n" % fielddisplay(self,'mass_flux_profile_directory','directory for mass flux profiles')
++		s+="%s\n" % fielddisplay(self,'mass_flux_profiles','list of mass_flux profiles')
++		s+="%s\n" % fielddisplay(self,'mass_flux_segments','')
+ 		s+="%s\n" % fielddisplay(self,'adjacency','')
+ 		s+="%s\n" % fielddisplay(self,'vertex_weight','weight applied to each mesh vertex')
+ 
+@@ -137,4 +143,10 @@
+ 		WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray')
+ 		WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray')
++		if not self.mass_flux_segments:
++			WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
++			flag=True; 
++		else:
++			flag=False; 
++		WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16304)
+@@ -44,7 +44,6 @@
+ 		qmu              = 0;
+ 
+ 		results          = 0;
+-		outputdefinition = 0;
+ 		radaroverlay     = 0;
+ 		miscellaneous    = 0;
+ 		private          = 0;
+@@ -1071,7 +1070,6 @@
+ 			md.qmu              = qmu();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
+-			md.outputdefinition = outputdefinition();
+ 			md.miscellaneous    = miscellaneous();
+ 			md.private          = private();
+ 		end
+@@ -1108,7 +1106,6 @@
+ 			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+ 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
+-			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(obj.outputdefinition) ']'],'output definition'));
+ 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+ 			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+ 			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
+Index: ../trunk-jpl/src/m/classes/damage.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/damage.m	(revision 16303)
++++ ../trunk-jpl/src/m/classes/damage.m	(revision 16304)
+@@ -109,7 +109,7 @@
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Damage:\n'));
+ 
+-			fielddisplay(obj,'D','damage tensor (vector)');
++			fielddisplay(obj,'D','damage tensor (scalar)');
+ 			fielddisplay(obj,'law','damage law (string) from {''undamaged'',''pralong''}');
+ 			fielddisplay(obj,'spcdamage','damage constraints (NaN means no constraint)');
+ 			fielddisplay(obj,'max_damage','maximum possible damage (0<=max_damage<1)');
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16303)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16304)
+@@ -1,4 +1,4 @@
+-function exportVTK(filename,model)
++function exportVTK(filename,model,Solution)
+ % vtk export
+ % function exportVTK(filename,model,Solution)
+ % creates a directory with the vtk files for you simulation
+@@ -18,12 +18,14 @@
+ separator=filesep;
+ mkdir(filename);
+ 
+-%get the element related variables
+ points=[model.mesh.x model.mesh.y model.mesh.z];
+ [num_of_points,dim]=size(points);
+ [num_of_elt]=size(model.mesh.elements,1);
+ [point_per_elt]=size(model.mesh.elements,2);
++sol_enum=EnumToString(Solution);
+ 
++sol_struct=model.results.(sol_enum);
++
+ %Select the type of element function of the number of nodes per elements
+ if point_per_elt==3;
+ 	celltype=5; %triangles
+@@ -33,33 +35,21 @@
+ 	error('Your Element definition is not taken into account \n');
+ end
+ 
+-%sol_enum=EnumToString(Solution);
++%looking for multiple time steps
++num_of_timesteps=size(sol_struct,2);
+ 
+-%this is the result structure
+-res_struct=model.results;
++%getting the number of fields in the solution
++fieldnames=fields(sol_struct(1));
++num_of_fields=length(fieldnames);
+ 
+-%Getting all the solutions of the model
+-solnames=fields(res_struct);
+-num_of_sols=length(solnames);
++if num_of_timesteps==1; %just one timestep only write one file
+ 
+-%building solution structure 
+-for i=1:num_of_sols
+-	sol_struct{i}=res_struct.(solnames{i});
+-end
+-
+-%looking for multiple time steps
+-num_of_timesteps=size(sol_struct{1},2);
+-
+-for i=1:num_of_timesteps;
+-	%by default, we take the timestep from the first solution sturcture
+-	timestep=sol_struct{1}(i).step;
+-	
+-	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
++	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk'),'w+');
+ 	fprintf(FID,'# vtk DataFile Version 2.0 \n');
+ 	fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+ 	fprintf(FID,'ASCII \n');
+ 	fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-	
++
+ 	fprintf(FID,'POINTS %d float\n',num_of_points);
+ 	if(dim==3);
+ 		s='%f %f %f \n';
+@@ -68,38 +58,72 @@
+   end
+ 	P=[points zeros(num_of_points,3-dim)];
+ 	fprintf(FID,s,P');
+- 
++
+ 	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+ 	s='%d';
+ 	for k=1:point_per_elt
+-		s=horzcat(s,{' %d'});
++    s=horzcat(s,{' %d'});
+   end
+ 	s=cell2mat(horzcat(s,{'\n'}));
+ 	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+- 
++
+ 	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+ 	s='%d\n';
+ 	fprintf(FID,s,celltype*ones(num_of_elt,1));
+-	
+-	%loop over the different solution structures
+-	for j=1:num_of_sols
+ 
+-		%getting the number of fields in the solution
+-		fieldnames=fields(sol_struct{j}(i));
+-		num_of_fields=length(fieldnames);
+-		
++	%check which field is a real result and print	
++	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
++	for j=1:num_of_fields
++
++		if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
++			fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
++			fprintf(FID,'LOOKUP_TABLE default\n');
++			s='%e\n';
++			fprintf(FID,s,sol_struct.(fieldnames{j}));
++	  end
++  end
++		fclose(FID);
++else
++	for i=1:num_of_timesteps;
++		timestep=sol_struct(i).step;
++		FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
++		fprintf(FID,'# vtk DataFile Version 2.0 \n');
++		fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
++		fprintf(FID,'ASCII \n');
++		fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
++
++		fprintf(FID,'POINTS %d float\n',num_of_points);
++		if(dim==3);
++			s='%f %f %f \n';
++		elseif(dim==2);
++			s='%f %f \n';
++   end
++		P=[points zeros(num_of_points,3-dim)];
++		fprintf(FID,s,P');
++
++		fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
++		s='%d';
++		for k=1:point_per_elt
++			s=horzcat(s,{' %d'});
++  	end
++		s=cell2mat(horzcat(s,{'\n'}));
++		fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
++
++		fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
++		s='%d\n';
++		fprintf(FID,s,celltype*ones(num_of_elt,1));
++
+ 		%check which field is a real result and print
+ 		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-		for k=1:num_of_fields
+-			
+-			if ((length(sol_struct{j}(i).(fieldnames{k})))==num_of_points);
+-				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{k});
++		for j=1:num_of_fields
++
++			if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
++				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
+-				fprintf(FID,s,sol_struct{j}(i).(fieldnames{k}));
++				fprintf(FID,s,sol_struct(i).(fieldnames{j}));
+ 	    end		
+-     end 
+-	 end
+-	 fclose(FID);
++    end 
++		fclose(FID);
+   end
+ end
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 16303)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 16304)
+@@ -1,11 +0,0 @@
+-function macro=OutputdefinitionEnum()
+-%OUTPUTDEFINITIONENUM - Enum of Outputdefinition
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OutputdefinitionEnum()
+-
+-macro=StringToEnum('Outputdefinition');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 16303)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 16304)
+@@ -1,11 +0,0 @@
+-function macro=MassfluxatgateSegmentsEnum()
+-%MASSFLUXATGATESEGMENTSENUM - Enum of MassfluxatgateSegments
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MassfluxatgateSegmentsEnum()
+-
+-macro=StringToEnum('MassfluxatgateSegments');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 16303)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 16304)
+@@ -1,11 +0,0 @@
+-function macro=MassfluxatgateEnum()
+-%MASSFLUXATGATEENUM - Enum of Massfluxatgate
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MassfluxatgateEnum()
+-
+-macro=StringToEnum('Massfluxatgate');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 16303)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 16304)
+@@ -1,11 +0,0 @@
+-function macro=MassfluxatgateNameEnum()
+-%MASSFLUXATGATENAMEENUM - Enum of MassfluxatgateName
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=MassfluxatgateNameEnum()
+-
+-macro=StringToEnum('MassfluxatgateName');
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16303)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16304)
+@@ -1,11 +0,0 @@
+-function macro=OutputdefinitionEnumsEnum()
+-%OUTPUTDEFINITIONENUMSENUM - Enum of Outputdefinitions
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OutputdefinitionEnumsEnum()
+-
+-macro=StringToEnum('Outputdefinitions');
+Index: ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 16304)
+@@ -0,0 +1,11 @@
++function macro=AutodiffMassFluxSegmentsPresentEnum()
++%AUTODIFFMASSFLUXSEGMENTSPRESENTENUM - Enum of AutodiffMassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=AutodiffMassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('AutodiffMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 16304)
+@@ -0,0 +1,11 @@
++function macro=MassFluxSegmentsEnum()
++%MASSFLUXSEGMENTSENUM - Enum of MassFluxSegments
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassFluxSegmentsEnum()
++
++macro=StringToEnum('MassFluxSegments');
+Index: ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 16304)
+@@ -0,0 +1,11 @@
++function macro=QmuMassFluxSegmentsPresentEnum()
++%QMUMASSFLUXSEGMENTSPRESENTENUM - Enum of QmuMassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=QmuMassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('QmuMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 16304)
+@@ -0,0 +1,11 @@
++function macro=MassFluxSegmentsPresentEnum()
++%MASSFLUXSEGMENTSPRESENTENUM - Enum of MassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('MassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16303)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16304)
+@@ -26,6 +26,7 @@
+ def AutodiffFosForwardIndexEnum(): return StringToEnum("AutodiffFosForwardIndex")[0]
+ def AutodiffFovForwardIndicesEnum(): return StringToEnum("AutodiffFovForwardIndices")[0]
+ def AutodiffFosReverseIndexEnum(): return StringToEnum("AutodiffFosReverseIndex")[0]
++def AutodiffMassFluxSegmentsPresentEnum(): return StringToEnum("AutodiffMassFluxSegmentsPresent")[0]
+ def AutodiffKeepEnum(): return StringToEnum("AutodiffKeep")[0]
+ def AutodiffObufsizeEnum(): return StringToEnum("AutodiffObufsize")[0]
+ def AutodiffLbufsizeEnum(): return StringToEnum("AutodiffLbufsize")[0]
+@@ -212,6 +213,9 @@
+ def MasstransportNumRequestedOutputsEnum(): return StringToEnum("MasstransportNumRequestedOutputs")[0]
+ def MasstransportRequestedOutputsEnum(): return StringToEnum("MasstransportRequestedOutputs")[0]
+ def QmuIsdakotaEnum(): return StringToEnum("QmuIsdakota")[0]
++def MassFluxSegmentsEnum(): return StringToEnum("MassFluxSegments")[0]
++def MassFluxSegmentsPresentEnum(): return StringToEnum("MassFluxSegmentsPresent")[0]
++def QmuMassFluxSegmentsPresentEnum(): return StringToEnum("QmuMassFluxSegmentsPresent")[0]
+ def QmuNumberofpartitionsEnum(): return StringToEnum("QmuNumberofpartitions")[0]
+ def QmuNumberofresponsesEnum(): return StringToEnum("QmuNumberofresponses")[0]
+ def QmuPartitionEnum(): return StringToEnum("QmuPartition")[0]
+@@ -519,11 +523,6 @@
+ def TimeEnum(): return StringToEnum("Time")[0]
+ def TriaP1ElementResultEnum(): return StringToEnum("TriaP1ElementResult")[0]
+ def WaterColumnOldEnum(): return StringToEnum("WaterColumnOld")[0]
+-def OutputdefinitionEnum(): return StringToEnum("Outputdefinition")[0]
+-def OutputdefinitionEnumsEnum(): return StringToEnum("OutputdefinitionEnums")[0]
+-def MassfluxatgateEnum(): return StringToEnum("Massfluxatgate")[0]
+-def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
+-def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
+ def MinVelEnum(): return StringToEnum("MinVel")[0]
+ def MaxVelEnum(): return StringToEnum("MaxVel")[0]
+ def MinVxEnum(): return StringToEnum("MinVx")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16304-16305.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16304-16305.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16304-16305.diff	(revision 16556)
@@ -0,0 +1,159 @@
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16304)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16305)
+@@ -1,4 +1,4 @@
+-function exportVTK(filename,model,Solution)
++function exportVTK(filename,model)
+ % vtk export
+ % function exportVTK(filename,model,Solution)
+ % creates a directory with the vtk files for you simulation
+@@ -18,14 +18,12 @@
+ separator=filesep;
+ mkdir(filename);
+ 
++%get the element related variables
+ points=[model.mesh.x model.mesh.y model.mesh.z];
+ [num_of_points,dim]=size(points);
+ [num_of_elt]=size(model.mesh.elements,1);
+ [point_per_elt]=size(model.mesh.elements,2);
+-sol_enum=EnumToString(Solution);
+ 
+-sol_struct=model.results.(sol_enum);
+-
+ %Select the type of element function of the number of nodes per elements
+ if point_per_elt==3;
+ 	celltype=5; %triangles
+@@ -35,21 +33,33 @@
+ 	error('Your Element definition is not taken into account \n');
+ end
+ 
+-%looking for multiple time steps
+-num_of_timesteps=size(sol_struct,2);
++%sol_enum=EnumToString(Solution);
+ 
+-%getting the number of fields in the solution
+-fieldnames=fields(sol_struct(1));
+-num_of_fields=length(fieldnames);
++%this is the result structure
++res_struct=model.results;
+ 
+-if num_of_timesteps==1; %just one timestep only write one file
++%Getting all the solutions of the model
++solnames=fields(res_struct);
++num_of_sols=length(solnames);
+ 
+-	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk'),'w+');
++%building solution structure 
++for i=1:num_of_sols
++	sol_struct{i}=res_struct.(solnames{i});
++end
++
++%looking for multiple time steps
++num_of_timesteps=size(sol_struct{1},2);
++
++for i=1:num_of_timesteps;
++	%by default, we take the timestep from the first solution sturcture
++	timestep=sol_struct{1}(i).step;
++	
++	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+ 	fprintf(FID,'# vtk DataFile Version 2.0 \n');
+ 	fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+ 	fprintf(FID,'ASCII \n');
+ 	fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
++	
+ 	fprintf(FID,'POINTS %d float\n',num_of_points);
+ 	if(dim==3);
+ 		s='%f %f %f \n';
+@@ -58,72 +68,38 @@
+   end
+ 	P=[points zeros(num_of_points,3-dim)];
+ 	fprintf(FID,s,P');
+-
++ 
+ 	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+ 	s='%d';
+ 	for k=1:point_per_elt
+-    s=horzcat(s,{' %d'});
++		s=horzcat(s,{' %d'});
+   end
+ 	s=cell2mat(horzcat(s,{'\n'}));
+ 	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
++ 
+ 	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+ 	s='%d\n';
+ 	fprintf(FID,s,celltype*ones(num_of_elt,1));
++	
++	%loop over the different solution structures
++	for j=1:num_of_sols
+ 
+-	%check which field is a real result and print	
+-	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-	for j=1:num_of_fields
+-
+-		if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-			fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
+-			fprintf(FID,'LOOKUP_TABLE default\n');
+-			s='%e\n';
+-			fprintf(FID,s,sol_struct.(fieldnames{j}));
+-	  end
+-  end
+-		fclose(FID);
+-else
+-	for i=1:num_of_timesteps;
+-		timestep=sol_struct(i).step;
+-		FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+-		fprintf(FID,'# vtk DataFile Version 2.0 \n');
+-		fprintf(FID,'Data for run %s \n',model.miscellaneous.name);
+-		fprintf(FID,'ASCII \n');
+-		fprintf(FID,'DATASET UNSTRUCTURED_GRID \n');
+-
+-		fprintf(FID,'POINTS %d float\n',num_of_points);
+-		if(dim==3);
+-			s='%f %f %f \n';
+-		elseif(dim==2);
+-			s='%f %f \n';
+-   end
+-		P=[points zeros(num_of_points,3-dim)];
+-		fprintf(FID,s,P');
+-
+-		fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+-		s='%d';
+-		for k=1:point_per_elt
+-			s=horzcat(s,{' %d'});
+-  	end
+-		s=cell2mat(horzcat(s,{'\n'}));
+-		fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+-
+-		fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+-		s='%d\n';
+-		fprintf(FID,s,celltype*ones(num_of_elt,1));
+-
++		%getting the number of fields in the solution
++		fieldnames=fields(sol_struct{j}(i));
++		num_of_fields=length(fieldnames);
++		
+ 		%check which field is a real result and print
+ 		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-		for j=1:num_of_fields
+-
+-			if (length(sol_struct(1).(fieldnames{j}))==num_of_points);
+-				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{j});
++		for k=1:num_of_fields
++			
++			if ((length(sol_struct{j}(i).(fieldnames{k})))==num_of_points);
++				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{k});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
+-				fprintf(FID,s,sol_struct(i).(fieldnames{j}));
++				fprintf(FID,s,sol_struct{j}(i).(fieldnames{k}));
+ 	    end		
+-    end 
+-		fclose(FID);
++     end 
++	 end
++	 fclose(FID);
+   end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16305-16306.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16305-16306.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16305-16306.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/scripts/BinRead.py
+===================================================================
+--- ../trunk-jpl/scripts/BinRead.py	(revision 16305)
++++ ../trunk-jpl/scripts/BinRead.py	(revision 16306)
+@@ -122,6 +122,7 @@
+ 	is passed along the record, in order to identify the nature of the dataset being 
+ 	sent.
+ 	"""
++	from MatlabFuncs import *
+ 
+ 	if   strcmpi(format,'Boolean'):
+ 		code=1
Index: issm/oecreview/Archive/16133-16554/ISSM-16306-16307.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16306-16307.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16306-16307.diff	(revision 16556)
@@ -0,0 +1,830 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 16307)
+@@ -25,7 +25,7 @@
+ md.inversion.min_parameters=10.**6*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10.**8*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[103  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[102  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[103,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 16307)
+@@ -21,7 +21,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[104*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[104  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 16307)
+@@ -21,7 +21,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness
+ md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
+-md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=201
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 16307)
+@@ -19,7 +19,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[103,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[103,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 16307)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101.
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test415.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test415.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[103,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 16307)
+@@ -15,7 +15,7 @@
+ md.inversion.min_parameters=10.^6*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=2.*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10.^8*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test612.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test612.py	(revision 16307)
+@@ -23,7 +23,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness
+ md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
+-md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=201
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[103  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((102*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[102,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 16307)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101.
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test416.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test416.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((102*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[102,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 16307)
+@@ -30,7 +30,7 @@
+ md.inversion.gradient_scaling=numpy.hstack((10./md.constants.yts*numpy.ones((md.inversion.nsteps,1)),10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))))
+ md.inversion.min_parameters=numpy.hstack((-2000.*numpy.ones((md.mesh.numberofvertices,1)),-2000.*numpy.ones((md.mesh.numberofvertices,1))))
+ md.inversion.max_parameters=numpy.hstack((+2000.*numpy.ones((md.mesh.numberofvertices,1)),+2000.*numpy.ones((md.mesh.numberofvertices,1))))
+-md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=201
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 16307)
+@@ -11,7 +11,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.min_parameters=-50.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=50.*ones(md.mesh.numberofvertices,1);
+-md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=201;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10./md.constants.yts*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[103  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[103  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 16307)
+@@ -21,7 +21,7 @@
+ md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101.
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=0.9*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 16307)
+@@ -20,7 +20,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((104*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[104,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 16307)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101.
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 16307)
+@@ -9,7 +9,7 @@
+ md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test612.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test612.m	(revision 16307)
+@@ -12,7 +12,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.min_parameters=-50.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=50.*ones(md.mesh.numberofvertices,1);
+-md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=201;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10./md.constants.yts*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[102  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test319.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.py	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test319.py	(revision 16307)
+@@ -19,7 +19,7 @@
+ md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions=[103,501]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+ md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+ md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 16307)
+@@ -10,7 +10,7 @@
+ md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 16307)
+@@ -18,7 +18,7 @@
+ md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
+ md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
+ md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
+-md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=201;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 16307)
+@@ -11,7 +11,7 @@
+ md.inversion.min_parameters=zeros(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=(1-10^-13)*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101.*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101;
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=0.9*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/test/NightlyRun/test319.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.m	(revision 16306)
++++ ../trunk-jpl/test/NightlyRun/test319.m	(revision 16307)
+@@ -9,7 +9,7 @@
+ md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
++md.inversion.cost_functions=[103  501];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
+ md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16307)
+@@ -17,7 +17,7 @@
+ 	int     i;
+ 
+ 	/*parameters: */
+-	int        num_controls,num_responses;
++	int        num_controls;
+ 	int        nsteps;
+ 	IssmDouble tol_cm;
+ 	int        solution_type;
+@@ -25,8 +25,6 @@
+ 	bool       dakota_analysis = false;
+ 
+ 	int        *control_type   = NULL;
+-	IssmDouble *responses      = NULL;
+-	int        *step_responses = NULL;
+ 	IssmDouble *maxiter        = NULL;
+ 	IssmDouble *cm_jump        = NULL;
+ 
+@@ -44,9 +42,7 @@
+ 
+ 	/*Recover parameters used throughout the solution*/
+ 	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+-	femmodel->parameters->FindParam(&responses,NULL,NULL,InversionCostFunctionsEnum);
+ 	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
+ 	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
+ 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
+@@ -64,9 +60,8 @@
+ 	if(VerboseControl()) _printf0_("   preparing initial solution\n");
+ 	if(isFS) solutioncore(femmodel);
+ 
+-	/*Initialize responses: */
++	/*Initialize cost function: */
+ 	J=xNew<IssmDouble>(nsteps);
+-	step_responses=xNew<int>(num_responses);
+ 
+ 	/*Initialize some of the BrentSearch arguments: */
+ 	optargs.femmodel=femmodel;
+@@ -77,9 +72,8 @@
+ 
+ 		/*Display info*/
+ 		if(VerboseControl()) _printf0_("\n" << "   control method step " << n+1 << "/" << nsteps << "\n");
+-		for(i=0;i<num_responses;i++) step_responses[i]=reCast<int,IssmDouble>(responses[n*num_responses+i]);
+-		femmodel->parameters->SetParam(step_responses,1,num_responses,StepResponsesEnum);
+ 
++
+ 		/*In steady state inversion, compute new temperature field now*/
+ 		if(solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
+ 
+@@ -117,9 +111,7 @@
+ 
+ 	/*Free ressources: */
+ 	xDelete<int>(control_type);
+-	xDelete<int>(step_responses);
+ 	xDelete<IssmDouble>(maxiter);
+-	xDelete<IssmDouble>(responses);
+ 	xDelete<IssmDouble>(cm_jump);
+ 	xDelete<IssmDouble>(J);
+ }
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16307)
+@@ -108,11 +108,9 @@
+ int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, IssmDouble *fcn,Vec G,void *userCtx){
+ 
+ 	/*Retreive arguments*/
+-	int                  solution_type,num_cost_functions;
++	int                  solution_type;
+ 	AppCtx              *user            = (AppCtx *)userCtx;
+ 	FemModel            *femmodel        = user->femmodel;
+-	int                 *cost_functions  = NULL;
+-	IssmDouble          *cost_functionsd = NULL;
+ 	Vector<IssmDouble>  *gradient        = NULL;
+ 	Vector<IssmDouble>  *X               = NULL;
+ 
+@@ -126,14 +124,7 @@
+ 
+ 	/*Recover some parameters*/
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&num_cost_functions,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&cost_functionsd,NULL,NULL,InversionCostFunctionsEnum);
+ 
+-	/*Prepare objective function*/
+-	cost_functions=xNew<int>(num_cost_functions);
+-	for(int i=0;i<num_cost_functions;i++) cost_functions[i]=(int)cost_functionsd[i]; //FIXME
+-	femmodel->parameters->SetParam(cost_functions,1,num_cost_functions,StepResponsesEnum);
+-
+ 	/*Compute solution and adjoint*/
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 	void (*adjointcore)(FemModel*)=NULL;
+@@ -151,8 +142,6 @@
+ 	VecScale(G,-1.);
+ 
+ 	/*Clean-up and return*/
+-	xDelete<int>(cost_functions);
+-	xDelete<IssmDouble>(cost_functionsd);
+ 	return 0;
+ }
+ int IssmMonitor(TaoSolver tao, void *userCtx){
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16306)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16307)
+@@ -485,7 +485,6 @@
+ 	ThicknessAbsGradientEnum,
+ 	ThicknessAlongGradientEnum,
+ 	ThicknessAcrossGradientEnum,
+-	StepResponsesEnum,
+ 	IntMatParamEnum,
+ 	RheologyBbarAbsGradientEnum,
+ 	DragCoefficientAbsGradientEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16307)
+@@ -479,7 +479,6 @@
+ 		case ThicknessAbsGradientEnum : return "ThicknessAbsGradient";
+ 		case ThicknessAlongGradientEnum : return "ThicknessAlongGradient";
+ 		case ThicknessAcrossGradientEnum : return "ThicknessAcrossGradient";
+-		case StepResponsesEnum : return "StepResponses";
+ 		case IntMatParamEnum : return "IntMatParam";
+ 		case RheologyBbarAbsGradientEnum : return "RheologyBbarAbsGradient";
+ 		case DragCoefficientAbsGradientEnum : return "DragCoefficientAbsGradient";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16307)
+@@ -488,7 +488,6 @@
+ 	      else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
+ 	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
+ 	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
+-	      else if (strcmp(name,"StepResponses")==0) return StepResponsesEnum;
+ 	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
+ 	      else if (strcmp(name,"RheologyBbarAbsGradient")==0) return RheologyBbarAbsGradientEnum;
+ 	      else if (strcmp(name,"DragCoefficientAbsGradient")==0) return DragCoefficientAbsGradientEnum;
+@@ -505,11 +504,11 @@
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+-	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16307)
+@@ -15,7 +15,7 @@
+ 	int         num_control_type;
+ 	int         num_cm_responses;
+ 	int        *control_type     = NULL;
+-	IssmDouble *cm_responses     = NULL;
++	int        *cm_responses     = NULL;
+ 	IssmDouble *cm_jump          = NULL;
+ 	IssmDouble *optscal          = NULL;
+ 	IssmDouble *maxiter          = NULL;
+@@ -57,18 +57,18 @@
+ 
+ 		if(tao_analysis){
+ 			parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
+-			parameters->AddObject(new DoubleVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
++			parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
+ 		}
+ 		else{
+ 			parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
++			parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
+ 			parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
+-			parameters->AddObject(new DoubleMatParam(InversionCostFunctionsEnum,cm_responses,nsteps,num_cm_responses));
+ 			parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
+ 			parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
+ 		}
+ 
+ 		xDelete<int>(control_type);
+-		iomodel->DeleteData(cm_responses,InversionCostFunctionsEnum);
++		xDelete<int>(cm_responses);
+ 		iomodel->DeleteData(cm_jump,InversionStepThresholdEnum);
+ 		iomodel->DeleteData(optscal,InversionGradientScalingEnum);
+ 		iomodel->DeleteData(maxiter,InversionMaxiterPerStepEnum);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16307)
+@@ -1049,7 +1049,7 @@
+ 
+ 	/*Recover parameters*/
+ 	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 
+ 	/*Get response*/
+ 	J=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16307)
+@@ -3802,7 +3802,7 @@
+ 	int        *responses = NULL;
+ 	int         num_responses,resp;
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 
+ 	for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
+ 		//FIXME: the control type should be checked somewhere (with respect to what variable are we taking the gradient!)
+@@ -4244,7 +4244,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 	Input* thickness_input            = inputs->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+ 	Input* thicknessobs_input         = inputs->GetInput(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
+ 	Input* weights_input              = inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+@@ -4889,7 +4889,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 	Input* thickness_input    = inputs->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+ 	Input* thicknessobs_input = inputs->GetInput(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
+ 	Input* weights_input      = inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+@@ -4979,7 +4979,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
+ 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
+ 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16306)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16307)
+@@ -5573,7 +5573,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
+ 	Input* vx_input     =inputs->GetInput(VxEnum);        _assert_(vx_input);
+ 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
+@@ -5769,7 +5769,7 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 	Input* weights_input = inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+ 	Input* vx_input      = inputs->GetInput(VxEnum);                                 _assert_(vx_input);
+ 	Input* vy_input      = inputs->GetInput(VyEnum);                                 _assert_(vy_input);
+@@ -6007,7 +6007,7 @@
+ 	int *responses = NULL;
+ 	int num_responses,resp;
+ 	this->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	this->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	this->parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 
+ 	for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
+ 
+Index: ../trunk-jpl/src/m/classes/inversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.m	(revision 16306)
++++ ../trunk-jpl/src/m/classes/inversion.m	(revision 16307)
+@@ -85,7 +85,7 @@
+ 			obj.gradient_scaling=50*ones(obj.nsteps,1);
+ 
+ 			%several responses can be used:
+-			obj.cost_functions=101*ones(obj.nsteps,1);
++			obj.cost_functions=101;
+ 
+ 			%step_threshold is used to speed up control method. When
+ 			%misfit(1)/misfit(0) < obj.step_threshold, we go directly to
+@@ -114,7 +114,7 @@
+ 			md = checkfield(md,'inversion.nsteps','numel',1,'>=',0);
+ 			md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
+ 			md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]);
+-			md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps num_costfunc],'values',[101:105 201 501:506]);
++			md = checkfield(md,'inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
+ 			md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
+ 			md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps num_controls]);
+ 			md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 16306)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 16307)
+@@ -92,7 +92,7 @@
+ 		self.gradient_scaling=50*numpy.ones((self.nsteps,1))
+ 
+ 		#several responses can be used:
+-		self.cost_functions=101*numpy.ones((self.nsteps,1))
++		self.cost_functions=101
+ 
+ 		#step_threshold is used to speed up control method. When
+ 		#misfit(1)/misfit(0) < self.step_threshold, we go directly to
+@@ -113,7 +113,7 @@
+ 			return md
+ 
+ 		num_controls=numpy.size(md.inversion.control_parameters)
+-		num_costfunc=numpy.size(md.inversion.cost_functions,axis=1)
++		num_costfunc=numpy.size(md.inversion.cost_functions)
+ 
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+@@ -122,7 +122,7 @@
+ 		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',0)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
+-		md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps,num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
++		md = checkfield(md,'inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
+ 		md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
+ 		md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
+ 		md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
+@@ -170,19 +170,19 @@
+ 		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+ 
+ 		#process cost functions
+-		num_cost_functions=numpy.size(self.cost_functions,axis=1)
++		num_cost_functions=numpy.size(self.cost_functions)
+ 		data=copy.deepcopy(self.cost_functions)
+-		data[numpy.nonzero(data==101)]=SurfaceAbsVelMisfitEnum()
+-		data[numpy.nonzero(data==102)]=SurfaceRelVelMisfitEnum()
+-		data[numpy.nonzero(data==103)]=SurfaceLogVelMisfitEnum()
+-		data[numpy.nonzero(data==104)]=SurfaceLogVxVyMisfitEnum()
+-		data[numpy.nonzero(data==105)]=SurfaceAverageVelMisfitEnum()
+-		data[numpy.nonzero(data==201)]=ThicknessAbsMisfitEnum()
+-		data[numpy.nonzero(data==501)]=DragCoefficientAbsGradientEnum()
+-		data[numpy.nonzero(data==502)]=RheologyBbarAbsGradientEnum()
+-		data[numpy.nonzero(data==503)]=ThicknessAbsGradientEnum()
+-		data[numpy.nonzero(data==504)]=ThicknessAlongGradientEnum()
+-		data[numpy.nonzero(data==505)]=ThicknessAcrossGradientEnum()
+-		WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
++		data=[SurfaceAbsVelMisfitEnum()        if x==101 else x for x in data]
++		data=[SurfaceRelVelMisfitEnum()        if x==102 else x for x in data]
++		data=[SurfaceLogVelMisfitEnum()        if x==103 else x for x in data]
++		data=[SurfaceLogVxVyMisfitEnum()       if x==104 else x for x in data]
++		data=[SurfaceAverageVelMisfitEnum()    if x==105 else x for x in data]
++		data=[ThicknessAbsMisfitEnum()         if x==201 else x for x in data]
++		data=[DragCoefficientAbsGradientEnum() if x==501 else x for x in data]
++		data=[RheologyBbarAbsGradientEnum()    if x==502 else x for x in data]
++		data=[ThicknessAbsGradientEnum()       if x==503 else x for x in data]
++		data=[ThicknessAlongGradientEnum()     if x==504 else x for x in data]
++		data=[ThicknessAcrossGradientEnum()    if x==505 else x for x in data]
++		WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
+ 		WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
+ 	# }}}
+Index: ../trunk-jpl/src/m/enum/StepResponsesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/StepResponsesEnum.m	(revision 16306)
++++ ../trunk-jpl/src/m/enum/StepResponsesEnum.m	(revision 16307)
+@@ -1,11 +0,0 @@
+-function macro=StepResponsesEnum()
+-%STEPRESPONSESENUM - Enum of StepResponses
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=StepResponsesEnum()
+-
+-macro=StringToEnum('StepResponses');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16306)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16307)
+@@ -471,7 +471,6 @@
+ def ThicknessAbsGradientEnum(): return StringToEnum("ThicknessAbsGradient")[0]
+ def ThicknessAlongGradientEnum(): return StringToEnum("ThicknessAlongGradient")[0]
+ def ThicknessAcrossGradientEnum(): return StringToEnum("ThicknessAcrossGradient")[0]
+-def StepResponsesEnum(): return StringToEnum("StepResponses")[0]
+ def IntMatParamEnum(): return StringToEnum("IntMatParam")[0]
+ def RheologyBbarAbsGradientEnum(): return StringToEnum("RheologyBbarAbsGradient")[0]
+ def DragCoefficientAbsGradientEnum(): return StringToEnum("DragCoefficientAbsGradient")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16307-16308.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16307-16308.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16307-16308.diff	(revision 16556)
@@ -0,0 +1,117 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 16308)
+@@ -25,7 +25,7 @@
+ md.inversion.min_parameters=10.**6*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10.**8*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 16308)
+@@ -21,7 +21,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 16308)
+@@ -21,7 +21,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness
+ md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
+-md.inversion.cost_functions=201
++md.inversion.cost_functions=[201]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 16308)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test612.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test612.py	(revision 16308)
+@@ -23,7 +23,7 @@
+ md.inversion.thickness_obs=md.geometry.thickness
+ md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
+-md.inversion.cost_functions=201
++md.inversion.cost_functions=[201]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 16308)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 16308)
+@@ -30,7 +30,7 @@
+ md.inversion.gradient_scaling=numpy.hstack((10./md.constants.yts*numpy.ones((md.inversion.nsteps,1)),10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))))
+ md.inversion.min_parameters=numpy.hstack((-2000.*numpy.ones((md.mesh.numberofvertices,1)),-2000.*numpy.ones((md.mesh.numberofvertices,1))))
+ md.inversion.max_parameters=numpy.hstack((+2000.*numpy.ones((md.mesh.numberofvertices,1)),+2000.*numpy.ones((md.mesh.numberofvertices,1))))
+-md.inversion.cost_functions=201
++md.inversion.cost_functions=[201]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 16308)
+@@ -21,7 +21,7 @@
+ md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=0.9*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 16307)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 16308)
+@@ -22,7 +22,7 @@
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+ md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101.
++md.inversion.cost_functions=[101]
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+ md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
Index: issm/oecreview/Archive/16133-16554/ISSM-16308-16309.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16308-16309.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16308-16309.diff	(revision 16556)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16308)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16309)
+@@ -2564,9 +2564,9 @@
+ 	surface_input->GetInputAverage(&surface);
+ 	bed_input->GetInputAverage(&bed);
+ 	bathymetry_input->GetInputAverage(&bathymetry);
+-
++	
+ 	/*Return: */
+-	return base*(surface-bed+rho_water/rho_ice*bathymetry);
++	return base*(surface-bed+min(rho_water/rho_ice*bathymetry,0.));
+ }
+ /*}}}*/
+ /*FUNCTION Tria::MassFlux {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16308)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16309)
+@@ -3711,7 +3711,7 @@
+ 	bathymetry_input->GetInputAverage(&bathymetry);
+ 
+ 	/*Return: */
+-	return base*(surface - bed + rho_water/rho_ice * bathymetry);
++	return base*(surface - bed + min( rho_water/rho_ice * bathymetry, 0.) );
+ }
+ /*}}}*/
+ /*FUNCTION Penta::MinVel{{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16309-16310.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16309-16310.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16309-16310.diff	(revision 16556)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 16309)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 16310)
+@@ -13,28 +13,35 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
++md.transient.requested_outputs=[IceVolumeEnum;IceVolumeAboveFloatationEnum];
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-10,1e-11,1.25e-11,...
+-	1e-10,1e-10,1e-10,1.15e-11};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-11,1e-10,1e-11,1.25e-11,1e-13,1e-13,...
++	1e-10,1e-10,1e-10,1.15e-11,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+ 	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(1).IceVolume),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+ 	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).IceVolume),...
++	(md.results.TransientSolution(2).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+ 	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).IceVolume),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatation),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 16309)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 16310)
+@@ -12,28 +12,35 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
++md.transient.requested_outputs=[IceVolumeEnum;IceVolumeAboveFloatationEnum];
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+-	'Bed2','Surface2','Thickness2','Floatingice2',...
+-	'Bed3','Surface3','Thickness3','Floatingice3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13,1e-13};
++field_names     ={'Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',...
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',...
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Bed),...
+ 	(md.results.TransientSolution(1).Surface),...
+ 	(md.results.TransientSolution(1).Thickness),...
+ 	(md.results.TransientSolution(1).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(1).IceVolume),...
++	(md.results.TransientSolution(1).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(2).Bed),...
+ 	(md.results.TransientSolution(2).Surface),...
+ 	(md.results.TransientSolution(2).Thickness),...
+ 	(md.results.TransientSolution(2).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(2).IceVolume),...
++	(md.results.TransientSolution(2).IceVolumeAboveFloatation),...
+ 	(md.results.TransientSolution(3).Bed),...
+ 	(md.results.TransientSolution(3).Surface),...
+ 	(md.results.TransientSolution(3).Thickness),...
+ 	(md.results.TransientSolution(3).MaskGroundediceLevelset),...
++	(md.results.TransientSolution(3).IceVolume),...
++	(md.results.TransientSolution(3).IceVolumeAboveFloatation),...
+ 	};
Index: issm/oecreview/Archive/16133-16554/ISSM-16310-16311.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16310-16311.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16310-16311.diff	(revision 16556)
@@ -0,0 +1,82 @@
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 16310)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 16311)
+@@ -27,23 +27,29 @@
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
+-	'Bed2','Surface2','Thickness2','Floatingice2',\
+-	'Bed3','Surface3','Thickness3','Floatingice3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13,1e-13]
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',\
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',\
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+ 	md.results.TransientSolution[0].MaskGroundediceLevelset,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatation,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+ 	md.results.TransientSolution[1].MaskGroundediceLevelset,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[1].IceVolumeAboveFloatation,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+ 	md.results.TransientSolution[2].MaskGroundediceLevelset,\
++	md.results.TransientSolution[2].IceVolume,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatation,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 16310)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 16311)
+@@ -28,25 +28,31 @@
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
+-	'Bed2','Surface2','Thickness2','Floatingice2',\
+-	'Bed3','Surface3','Thickness3','Floatingice3']
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1','IceVolume1','IceVolumeAboveFloatation1',\
++	'Bed2','Surface2','Thickness2','Floatingice2','IceVolume2','IceVolumeAboveFloatation2',\
++	'Bed3','Surface3','Thickness3','Floatingice3','IceVolume3','IceVolumeAboveFloatation3',]
+ 
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-11,1e-10,1e-11,1.25e-11,\
+-	1e-10,1e-10,1e-10,1.15e-11]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-11,1e-10,1e-11,1.25e-11,1e-13,1e-13,\
++	1e-10,1e-10,1e-10,1.15e-11,1e-13,1e-13]
+ 
+ field_values=[\
+ 	md.results.TransientSolution[0].Bed,\
+ 	md.results.TransientSolution[0].Surface,\
+ 	md.results.TransientSolution[0].Thickness,\
+ 	md.results.TransientSolution[0].MaskGroundediceLevelset,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[0].IceVolumeAboveFloatation,\
+ 	md.results.TransientSolution[1].Bed,\
+ 	md.results.TransientSolution[1].Surface,\
+ 	md.results.TransientSolution[1].Thickness,\
+ 	md.results.TransientSolution[1].MaskGroundediceLevelset,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[1].IceVolumeAboveFloatation,\
+ 	md.results.TransientSolution[2].Bed,\
+ 	md.results.TransientSolution[2].Surface,\
+ 	md.results.TransientSolution[2].Thickness,\
+ 	md.results.TransientSolution[2].MaskGroundediceLevelset,\
++	md.results.TransientSolution[2].IceVolume,\
++	md.results.TransientSolution[2].IceVolumeAboveFloatation,\
+ 	]
Index: issm/oecreview/Archive/16133-16554/ISSM-16311-16312.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16311-16312.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16311-16312.diff	(revision 16556)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive426.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive424.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16312-16313.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16312-16313.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16312-16313.diff	(revision 16556)
@@ -0,0 +1,587 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16313)
+@@ -30,7 +30,7 @@
+ 	iomodel->FetchDataToInput(elements,InversionVyObsEnum,0.); 
+ 	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.);
+ 
+-	iomodel->FetchData(4,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
++	iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 	for(i=0;i<num_control_type;i++){
+ 		switch(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])){
+ 			case BalancethicknessThickeningRateEnum: iomodel->FetchData(1,BalancethicknessThickeningRateEnum); break;
+@@ -58,5 +58,5 @@
+ 	}
+ 
+ 	/*Free data: */
+-	iomodel->DeleteData(4+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,DamageDEnum);
++	iomodel->DeleteData(5+7,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionCostFunctionsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,ThicknessEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,DamageDEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16313)
+@@ -48,7 +48,7 @@
+ 
+ 		/*Now, recover fit, optscal and maxiter as vectors: */
+ 		iomodel->FetchData(&control_type,NULL,&num_control_type,InversionControlParametersEnum);
+-		iomodel->FetchData(&cm_responses,&nsteps,&num_cm_responses,InversionCostFunctionsEnum);
++		iomodel->FetchData(&cm_responses,NULL,&num_cm_responses,InversionCostFunctionsEnum);
+ 		if(!tao_analysis){
+ 			iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
+ 			iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16313)
+@@ -1518,15 +1518,14 @@
+ 	IssmDouble cmmininputs[3];
+ 	IssmDouble cmmaxinputs[3];
+ 	bool       control_analysis   = false;
+-	int        num_control_type;
++	int        num_control_type,num_responses;
+ 	IssmDouble yts;
+-	int        num_cm_responses;
+ 
+ 	/*Get parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum); 
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+-	if(control_analysis) iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
++	if(control_analysis) iomodel->Constant(&num_responses,InversionNumCostFunctionsEnum);
+ 
+ 	/*Recover vertices ids needed to initialize inputs*/
+ 	for(i=0;i<3;i++){ 
+@@ -1593,9 +1592,9 @@
+ 
+ 		/*Create inputs and add to DataSetInput*/
+ 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
+-		for(i=0;i<num_cm_responses;i++){
+-			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_cm_responses+i];
+-			datasetinput->inputs->AddObject(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum));
++		for(i=0;i<num_responses;i++){
++			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_responses+i];
++			datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
+ 		}
+ 
+ 		/*Add datasetinput to element inputs*/
+@@ -3649,7 +3648,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,BalancethicknessMisfitEnum);
+ 		thickness_input->GetInputValue(&H, gauss);
+ 		thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
+ 		surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
+@@ -3858,7 +3857,7 @@
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,RheologyBbarAbsGradientEnum);
+ 
+ 		/*Build alpha_complement_list: */
+ 		rheologyb_input->GetInputDerivativeValue(&dk[0],&xyz_list[0][0],gauss);
+@@ -4099,7 +4098,7 @@
+ 
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,DragCoefficientAbsGradientEnum);
+ 
+ 		/*Build alpha_complement_list: */
+ 		dragcoefficient_input->GetInputDerivativeValue(&dk[0],&xyz_list[0][0],gauss);
+@@ -4269,53 +4268,53 @@
+ 		thicknessobs_input->GetInputValue(&thicknessobs, gauss);
+ 
+ 		/*Loop over all requested responses*/
+-		for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
++		for(resp=0;resp<num_responses;resp++){
+ 
+-			case ThicknessAbsMisfitEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				for(i=0;i<NUMVERTICES;i++) grade_g[i]+= (thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
+-				break;
+-			case ThicknessAbsGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[0]*dbasis[0][i]*Jdet*gauss->weight;
+-				for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[1]*dbasis[1][i]*Jdet*gauss->weight;
+-				break;
+-			case ThicknessAlongGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				vel = sqrt(vx*vx+vy*vy);
+-				vx  = vx/(vel+1.e-9);
+-				vy  = vy/(vel+1.e-9);
+-				for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0][i]*vx+dbasis[1][i]*vy)*Jdet*gauss->weight;
+-				break;
+-			case ThicknessAcrossGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				vel = sqrt(vx*vx+vy*vy);
+-				vx  = vx/(vel+1.e-9);
+-				vy  = vy/(vel+1.e-9);
+-				for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0][i]*(-vy)+dbasis[1][i]*vx)*Jdet*gauss->weight;
+-				break;
+-			case BalancethicknessMisfitEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
+-				basal_melting_input->GetInputValue(&basal_melting,gauss);
+-				dhdt_input->GetInputValue(&dhdt,gauss);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
+-				for(i=0;i<NUMVERTICES;i++){
+-					grade_g[i]+= - weight*Jdet*gauss->weight*(
+-								(vx*dH[0]+vy*dH[1] + thickness*(dvx[0]+dvy[1]))*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
+-								-(surface_mass_balance-basal_melting-dhdt)*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
+-								);
+-				}
+-				break;
+-			default:
+-				_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			weights_input->GetInputValue(&weight,gauss,responses[resp]);
++
++			switch(responses[resp]){
++
++				case ThicknessAbsMisfitEnum:
++					for(i=0;i<NUMVERTICES;i++) grade_g[i]+= (thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
++					break;
++				case ThicknessAbsGradientEnum:
++					for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[0]*dbasis[0][i]*Jdet*gauss->weight;
++					for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*dH[1]*dbasis[1][i]*Jdet*gauss->weight;
++					break;
++				case ThicknessAlongGradientEnum:
++					vx_input->GetInputValue(&vx,gauss);
++					vy_input->GetInputValue(&vy,gauss);
++					vel = sqrt(vx*vx+vy*vy);
++					vx  = vx/(vel+1.e-9);
++					vy  = vy/(vel+1.e-9);
++					for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0][i]*vx+dbasis[1][i]*vy)*Jdet*gauss->weight;
++					break;
++				case ThicknessAcrossGradientEnum:
++					vx_input->GetInputValue(&vx,gauss);
++					vy_input->GetInputValue(&vy,gauss);
++					vel = sqrt(vx*vx+vy*vy);
++					vx  = vx/(vel+1.e-9);
++					vy  = vy/(vel+1.e-9);
++					for(i=0;i<NUMVERTICES;i++) grade_g[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0][i]*(-vy)+dbasis[1][i]*vx)*Jdet*gauss->weight;
++					break;
++				case BalancethicknessMisfitEnum:
++					surface_mass_balance_input->GetInputValue(&surface_mass_balance,gauss);
++					basal_melting_input->GetInputValue(&basal_melting,gauss);
++					dhdt_input->GetInputValue(&dhdt,gauss);
++					vx_input->GetInputValue(&vx,gauss);
++					vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss);
++					vy_input->GetInputValue(&vy,gauss);
++					vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss);
++					for(i=0;i<NUMVERTICES;i++){
++						grade_g[i]+= - weight*Jdet*gauss->weight*(
++									(vx*dH[0]+vy*dH[1] + thickness*(dvx[0]+dvy[1]))*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
++									-(surface_mass_balance-basal_melting-dhdt)*(vx*dbasis[0][i]+ vy*dbasis[1][i] + basis[i]*(dvx[0]+dvy[1]))
++									);
++					}
++					break;
++				default:
++					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			}
+ 		}
+ 	}
+ 
+@@ -4371,7 +4370,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,RheologyBbarAbsGradientEnum);
+ 		rheologyb_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 
+ 		/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
+@@ -4416,7 +4415,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,SurfaceAverageVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+@@ -4474,7 +4473,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,SurfaceLogVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+@@ -4533,7 +4532,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,SurfaceLogVxVyMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+@@ -4591,7 +4590,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,SurfaceAbsVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+@@ -4650,7 +4649,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,SurfaceRelVelMisfitEnum);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+ 		vxobs_input->GetInputValue(&vxobs,gauss);
+@@ -4707,7 +4706,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,ThicknessAbsGradientEnum);
+ 		thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 
+ 		/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
+@@ -4753,7 +4752,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,ThicknessAlongGradientEnum);
+ 		thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+@@ -4804,7 +4803,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,ThicknessAcrossGradientEnum);
+ 		thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 		vx_input->GetInputValue(&vx,gauss);
+ 		vy_input->GetInputValue(&vy,gauss);
+@@ -4854,7 +4853,7 @@
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
+ 		thicknessobs_input->GetInputValue(&thicknessobs,gauss);
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,ThicknessAbsGradientEnum);
+ 
+ 		/*compute ThicknessAbsMisfit*/
+ 		Jelem+=0.5*(thickness-thicknessobs)*(thickness-thicknessobs)*weight*Jdet*gauss->weight;
+@@ -4911,37 +4910,37 @@
+ 		thicknessobs_input->GetInputValue(&thicknessobs, gauss);
+ 
+ 		/*Loop over all requested responses*/
+-		for(resp=0;resp<num_responses;resp++) switch(responses[resp]){
++		for(resp=0;resp<num_responses;resp++){
+ 
+-			case ThicknessAbsMisfitEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				for(i=0;i<numnodes;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
+-				break;
+-			case ThicknessAbsGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->weight;
+-				for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->weight;
+-				break;
+-			case ThicknessAlongGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				vel = sqrt(vx*vx+vy*vy);
+-				vx  = vx/(vel+1.e-9);
+-				vy  = vy/(vel+1.e-9);
+-				for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->weight;
+-				break;
+-			case ThicknessAcrossGradientEnum:
+-				weights_input->GetInputValue(&weight, gauss,resp);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				vel = sqrt(vx*vx+vy*vy);
+-				vx  = vx/(vel+1.e-9);
+-				vy  = vy/(vel+1.e-9);
+-				for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->weight;
+-				break;
+-			default:
+-				_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			weights_input->GetInputValue(&weight,gauss,responses[resp]);
++
++			switch(responses[resp]){
++				case ThicknessAbsMisfitEnum:
++					for(i=0;i<numnodes;i++) pe->values[i]+=(thicknessobs-thickness)*weight*Jdet*gauss->weight*basis[i];
++					break;
++				case ThicknessAbsGradientEnum:
++					for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[0]*dbasis[0*numnodes+i]*Jdet*gauss->weight;
++					for(i=0;i<numnodes;i++) pe->values[i]+= - weight*dH[1]*dbasis[1*numnodes+i]*Jdet*gauss->weight;
++					break;
++				case ThicknessAlongGradientEnum:
++					vx_input->GetInputValue(&vx,gauss);
++					vy_input->GetInputValue(&vy,gauss);
++					vel = sqrt(vx*vx+vy*vy);
++					vx  = vx/(vel+1.e-9);
++					vy  = vy/(vel+1.e-9);
++					for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*vx+dH[1]*vy)*(dbasis[0*numnodes+i]*vx+dbasis[1*numnodes+i]*vy)*Jdet*gauss->weight;
++					break;
++				case ThicknessAcrossGradientEnum:
++					vx_input->GetInputValue(&vx,gauss);
++					vy_input->GetInputValue(&vy,gauss);
++					vel = sqrt(vx*vx+vy*vy);
++					vx  = vx/(vel+1.e-9);
++					vy  = vy/(vel+1.e-9);
++					for(i=0;i<numnodes;i++) pe->values[i]+= - weight*(dH[0]*(-vy)+dH[1]*vx)*(dbasis[0*numnodes+i]*(-vy)+dbasis[1*numnodes+i]*vx)*Jdet*gauss->weight;
++					break;
++				default:
++					_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
++			}
+ 		}
+ 	}
+ 
+@@ -5012,7 +5011,7 @@
+ 		/*Loop over all requested responses*/
+ 		for(resp=0;resp<num_responses;resp++){
+ 
+-			weights_input->GetInputValue(&weight,gauss,resp);
++			weights_input->GetInputValue(&weight,gauss,responses[resp]);
+ 
+ 			switch(responses[resp]){
+ 				case SurfaceAbsVelMisfitEnum:
+@@ -5169,7 +5168,7 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Get all parameters at gaussian point*/
+-		weights_input->GetInputValue(&weight,gauss,weight_index);
++		weights_input->GetInputValue(&weight,gauss,DragCoefficientAbsGradientEnum);
+ 		drag_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+ 
+ 		/*Tikhonov regularization: J = 1/2 ((dp/dx)^2 + (dp/dy)^2) */ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16313)
+@@ -2176,14 +2176,13 @@
+ 
+ 	IssmDouble  yts;
+ 	bool    control_analysis;
+-	int     num_control_type;
+-	int     num_cm_responses;
++	int     num_control_type,num_responses;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
+-	if(control_analysis) iomodel->Constant(&num_cm_responses,InversionNumCostFunctionsEnum);
++	if(control_analysis) iomodel->Constant(&num_responses,InversionNumCostFunctionsEnum);
+ 
+ 	/*Checks if debuging*/
+ 	/*{{{*/
+@@ -2281,9 +2280,9 @@
+ 
+ 		/*Create inputs and add to DataSetInput*/
+ 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
+-		for(i=0;i<num_cm_responses;i++){
+-			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_cm_responses+i];
+-			datasetinput->inputs->AddObject(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum));
++		for(i=0;i<num_responses;i++){
++			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_responses+i];
++			datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
+ 		}
+ 
+ 		/*Add datasetinput to element inputs*/
+@@ -5608,7 +5607,7 @@
+ 		/*Loop over all requested responses*/
+ 		for(resp=0;resp<num_responses;resp++){
+ 
+-			weights_input->GetInputValue(&weight,gauss,resp);
++			weights_input->GetInputValue(&weight,gauss,responses[resp]);
+ 
+ 			switch(responses[resp]){
+ 				case SurfaceAbsVelMisfitEnum:
+@@ -5804,7 +5803,7 @@
+ 		/*Loop over all requested responses*/
+ 		for(resp=0;resp<num_responses;resp++){
+ 
+-			weights_input->GetInputValue(&weight,gauss,resp);
++			weights_input->GetInputValue(&weight,gauss,responses[resp]);
+ 
+ 			switch(responses[resp]){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16313)
+@@ -15,15 +15,19 @@
+ /*DatasetInput constructors and destructor*/
+ /*FUNCTION DatasetInput::DatasetInput(){{{*/
+ DatasetInput::DatasetInput(){
+-	enum_type=UNDEF;
+-	inputs=NULL;
++	enum_type = UNDEF;
++	inputs    = NULL;
++	numids    = 0;
++	ids       = NULL;
+ }
+ /*}}}*/
+-/*FUNCTION DatasetInput::DatasetInput(int in_enum_type) {{{*/
++/*FUNCTION DatasetInput::DatasetInput(int in_enum_type,int* idlist,int numids) {{{*/
+ DatasetInput::DatasetInput(int in_enum_type){
+ 
+-	enum_type  = in_enum_type;
+-	inputs     = new Inputs();
++	enum_type = in_enum_type;
++	numids    = 0;
++	inputs    = new Inputs();
++	ids       = NULL;
+ }
+ /*}}}*/
+ /*FUNCTION DatasetInput::~DatasetInput(){{{*/
+@@ -43,7 +47,11 @@
+ 
+ 	_printf_("DatasetInput:\n");
+ 	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("---inputs: \n"); inputs->Echo();
++	_printf_("   numids:"<< this->numids<< "\n");
++	_printf_("      ids: ");
++	for(int i=0;i<this->numids;i++) _printf_(this->ids[i]<<" ");
++	_printf_("\n");
++	_printf_("   inputs: \n"); inputs->Echo();
+ }
+ /*}}}*/
+ /*FUNCTION DatasetInput::Id{{{*/
+@@ -78,6 +86,9 @@
+ 	outinput=new DatasetInput();
+ 	outinput->enum_type=this->enum_type;
+ 	outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(location));
++	outinput->numids=this->numids;
++	outinput->ids=xNew<int>(this->numids);
++	xMemCpy(outinput->ids,this->ids,this->numids);
+ 
+ 	/*Assign output*/
+ 	return outinput;
+@@ -85,6 +96,34 @@
+ /*}}}*/
+ 
+ /*DatasetInput management*/
++/*FUNCTION DatasetInput::AddInput{{{*/
++void DatasetInput::AddInput(Input* input,int id){
++
++	_assert_(this->numids == this->inputs->Size());
++
++	int *old_ids = NULL;
++
++	if(this->numids>0){
++		old_ids=xNew<int>(this->numids);
++		xMemCpy(old_ids,this->ids,this->numids);
++		xDelete<int>(this->ids);
++	}
++
++	this->numids=this->numids+1;
++	this->ids=xNew<int>(this->numids);
++
++	if(this->numids>1){
++		xMemCpy(this->ids,old_ids,this->numids-1);
++		xDelete<int>(old_ids);
++	}
++
++	/*go ahead and plug: */
++	this->ids[this->numids-1]=id;
++	inputs->AddObject(input);
++
++	_assert_(this->numids == this->inputs->Size());
++}
++/*}}}*/
+ /*FUNCTION DatasetInput::InstanceEnum{{{*/
+ int DatasetInput::InstanceEnum(void){
+ 
+@@ -99,19 +138,28 @@
+ 	/*do nothing: */
+ }
+ /*}}}*/
+-/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int index){{{*/
+-void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int index){
++/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){{{*/
++void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss,int id){
+ 
++	int  offset = -1;
++	_assert_(this->numids == this->inputs->Size());
++
+ 	/*Get requested input within dataset*/
+-	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
+-	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
++	for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
++	if(offset<0){
++		this->Echo();
++		_error_("Could not find input of id "<<id);
++	}
+ 
++	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(offset));
+ 	input->GetInputValue(pvalue,gauss);
+ }
+ /*}}}*/
+ /*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){{{*/
+ void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){
+ 
++	_assert_(this->numids == this->inputs->Size());
++
+ 	/*Get requested input within dataset*/
+ 	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
+ 	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16312)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16313)
+@@ -16,7 +16,9 @@
+ 
+ 	public:
+ 		int     enum_type;
++		int     numids;
+ 		Inputs *inputs;
++		int    *ids;
+ 
+ 		/*DatasetInput constructors, destructors: {{{*/
+ 		DatasetInput();
+@@ -31,6 +33,7 @@
+ 		Object* copy();
+ 		/*}}}*/
+ 		/*DatasetInput management: {{{*/
++		void   AddInput(Input* input,int id);
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16312)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16313)
+@@ -713,7 +713,7 @@
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 
+-	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
++	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
+ 
+ 	/*Now fetch: */
+ 
+@@ -779,7 +779,7 @@
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+-	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
++	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
+ 
+ 	/*Now fetch: */
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16313-16314.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16313-16314.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16313-16314.diff	(revision 16556)
@@ -0,0 +1,1032 @@
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 16314)
+@@ -8,7 +8,7 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../SurfaceAreax/SurfaceAreax.h"
+ 
+-void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index){
++void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel){
+ 
+ 	/*Intermediary*/
+ 	Element* element=NULL;
+@@ -23,7 +23,7 @@
+ 	/*Compute Misfit: */
+ 	for(int i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		J+=element->SurfaceAverageVelMisfit(weight_index);
++		J+=element->SurfaceAverageVelMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index);
++void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->ThicknessAlongGradient(weight_index);
++		J+=element->ThicknessAlongGradient();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters, int weight_index){
++void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->ThicknessAbsMisfit(weight_index);
++		J+=element->ThicknessAbsMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->SurfaceLogVxVyMisfit(weight_index);
++		J+=element->SurfaceLogVxVyMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->SurfaceLogVelMisfit(weight_index);
++		J+=element->SurfaceLogVelMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->SurfaceRelVelMisfit(weight_index);
++		J+=element->SurfaceRelVelMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->SurfaceAbsVelMisfit(weight_index);
++		J+=element->SurfaceAbsVelMisfit();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->DragCoefficientAbsGradient(weight_index);
++		J+=element->DragCoefficientAbsGradient();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters, int weight_index){
++void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->RheologyBbarAbsGradient(weight_index);
++		J+=element->RheologyBbarAbsGradient();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h	(revision 16314)
+@@ -8,6 +8,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
++void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 16314)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "../../toolkits/toolkits.h"
+ 
+-void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
++void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -20,7 +20,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->ThicknessAcrossGradient(weight_index);
++		J+=element->ThicknessAcrossGradient();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16314)
+@@ -417,14 +417,14 @@
+ 
+ }
+ /*}}}*/
+-void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor,int weight_index){/*{{{*/
++void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor){/*{{{*/
+ 
+ 	int response_descriptor_enum=StringToEnumx(response_descriptor);
+-	this->Responsex(responses, response_descriptor_enum,weight_index);
++	this->Responsex(responses, response_descriptor_enum);
+ 
+ }
+ /*}}}*/
+-void FemModel::Responsex(IssmDouble* responses,int response_descriptor_enum,int weight_index){/*{{{*/
++void FemModel::Responsex(IssmDouble* responses,int response_descriptor_enum){/*{{{*/
+ 
+ 	switch (response_descriptor_enum){
+ 
+@@ -444,18 +444,18 @@
+ 		case MaxAbsVzEnum:                 this->MaxAbsVzx(                responses); break;
+ 		case MassFluxEnum:                 this->MassFluxx(         responses); break;
+ 		#ifdef _HAVE_CONTROL_
+-		case SurfaceAbsVelMisfitEnum:      SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceRelVelMisfitEnum:      SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceLogVelMisfitEnum:      SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceLogVxVyMisfitEnum:     SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case SurfaceAverageVelMisfitEnum:  SurfaceAverageVelMisfitx(responses,this,weight_index); break;
+-		case ThicknessAbsMisfitEnum:       ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case ThicknessAbsGradientEnum:     this->ThicknessAbsGradientx(responses,weight_index); break;
+-		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case ThicknessAcrossGradientEnum:  ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case RheologyBbarAbsGradientEnum:  RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+-		case BalancethicknessMisfitEnum:   BalancethicknessMisfitx(responses,weight_index); break;
++		case SurfaceAbsVelMisfitEnum:      SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceRelVelMisfitEnum:      SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceLogVelMisfitEnum:      SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceLogVxVyMisfitEnum:     SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials,parameters); break;
++		case SurfaceAverageVelMisfitEnum:  SurfaceAverageVelMisfitx(responses,this); break;
++		case ThicknessAbsMisfitEnum:       ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case ThicknessAbsGradientEnum:     this->ThicknessAbsGradientx(responses); break;
++		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case ThicknessAcrossGradientEnum:  ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case RheologyBbarAbsGradientEnum:  RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break;
++		case BalancethicknessMisfitEnum:   BalancethicknessMisfitx(responses); break;
+ 		#endif
+ 		case TotalSmbEnum:					  this->TotalSmbx(responses); break;
+ 		case MaterialsRheologyBbarEnum:    this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break;
+@@ -489,19 +489,19 @@
+ 			switch(output_enum){
+ 
+ 				case IceVolumeEnum:
+-					Responsex(&output_value,"IceVolume",0);
++					Responsex(&output_value,"IceVolume");
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
+ 				case IceVolumeAboveFloatationEnum:
+-					Responsex(&output_value,"IceVolumeAboveFloatation",0);
++					Responsex(&output_value,"IceVolumeAboveFloatation");
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeAboveFloatationEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
+ 				case TotalSmbEnum:
+-					Responsex(&output_value,"TotalSmb",0);
++					Responsex(&output_value,"TotalSmb");
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
+ 				case MaxVelEnum:
+-					Responsex(&output_value,"MaxVel",0);
++					Responsex(&output_value,"MaxVel");
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
+ 				default:
+@@ -996,14 +996,14 @@
+ }/*}}}*/
+ #endif
+ #ifdef _HAVE_CONTROL_
+-void FemModel::BalancethicknessMisfitx(IssmDouble* presponse,int weight_index){/*{{{*/
++void FemModel::BalancethicknessMisfitx(IssmDouble* presponse){/*{{{*/
+ 
+ 	IssmDouble J = 0;
+ 	IssmDouble J_sum;
+ 
+ 	for(int i=0;i<this->elements->Size();i++){
+ 		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+-		J+=element->BalancethicknessMisfit(weight_index);
++		J+=element->BalancethicknessMisfit();
+ 	}
+ 	ISSM_MPI_Reduce (&J,&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+ 	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+@@ -1013,7 +1013,7 @@
+ 	*presponse=J;
+ 
+ }/*}}}*/
+-void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, int weight_index){/*{{{*/
++void FemModel::ThicknessAbsGradientx( IssmDouble* pJ){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -1026,7 +1026,7 @@
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		J+=element->ThicknessAbsGradient(weight_index);
++		J+=element->ThicknessAbsGradient();
+ 	}
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+@@ -1055,7 +1055,7 @@
+ 	J=0;
+ 	//_printf_(true,"list of misfits: ");
+ 	for(int i=0;i<num_responses;i++){
+-		this->Responsex(&Jplus,EnumToStringx(responses[i]),i);
++		this->Responsex(&Jplus,EnumToStringx(responses[i]));
+ 		//_printf_(true," %12.7g ",Jplus);
+ 		J+=Jplus;
+ 	}
+@@ -1124,7 +1124,7 @@
+ 			/*indexed response: plug index into parameters and call response module: */
+ 			parameters->SetParam(index,IndexEnum);
+ 
+-			this->Responsex(&femmodel_response,root,0);//0 is the index for weights
++			this->Responsex(&femmodel_response,root);
+ 
+ 			if(my_rank==0){
+ 				/*plug response: */
+@@ -1143,7 +1143,7 @@
+ 		else if (flag==RegularEnum){
+ 
+ 			/*perfectly normal response function: */
+-			this->Responsex(&femmodel_response,root,0);//0 is the weight index
++			this->Responsex(&femmodel_response,root);
+ 
+ 			if(my_rank==0){
+ 				/*plug response: */
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16314)
+@@ -105,18 +105,18 @@
+ 
+ 		#ifdef _HAVE_CONTROL_
+ 		virtual void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index)=0;
+-		virtual IssmDouble ThicknessAbsMisfit(int weight_index)=0;
+-		virtual IssmDouble SurfaceAbsVelMisfit(int weight_index)=0;
+-		virtual IssmDouble SurfaceRelVelMisfit(int weight_index)=0;
+-		virtual IssmDouble SurfaceLogVelMisfit(int weight_index)=0;
+-		virtual IssmDouble SurfaceLogVxVyMisfit(int weight_index)=0;
+-		virtual IssmDouble SurfaceAverageVelMisfit(int weight_index)=0;
+-		virtual IssmDouble ThicknessAbsGradient(int weight_index)=0;
+-		virtual IssmDouble ThicknessAlongGradient(int weight_index)=0;
+-		virtual IssmDouble ThicknessAcrossGradient(int weight_index)=0;
+-		virtual IssmDouble BalancethicknessMisfit(int weight_index)=0;
+-		virtual IssmDouble RheologyBbarAbsGradient(int weight_index)=0;
+-		virtual IssmDouble DragCoefficientAbsGradient(int weight_index)=0;
++		virtual IssmDouble ThicknessAbsMisfit(void)=0;
++		virtual IssmDouble SurfaceAbsVelMisfit(void)=0;
++		virtual IssmDouble SurfaceRelVelMisfit(void)=0;
++		virtual IssmDouble SurfaceLogVelMisfit(void)=0;
++		virtual IssmDouble SurfaceLogVxVyMisfit(void)=0;
++		virtual IssmDouble SurfaceAverageVelMisfit(void)=0;
++		virtual IssmDouble ThicknessAbsGradient(void)=0;
++		virtual IssmDouble ThicknessAlongGradient(void)=0;
++		virtual IssmDouble ThicknessAcrossGradient(void)=0;
++		virtual IssmDouble BalancethicknessMisfit(void)=0;
++		virtual IssmDouble RheologyBbarAbsGradient(void)=0;
++		virtual IssmDouble DragCoefficientAbsGradient(void)=0;
+ 		virtual void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16314)
+@@ -3612,7 +3612,7 @@
+ 
+ #ifdef _HAVE_CONTROL_
+ /*FUNCTION Tria::BalancethicknessMisfit{{{*/
+-IssmDouble Tria::BalancethicknessMisfit(int weight_index){
++IssmDouble Tria::BalancethicknessMisfit(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble Jelem = 0;
+@@ -3819,10 +3819,10 @@
+ 			/*Nothing, J does not depends on the parameter being inverted for*/
+ 			break;
+ 		case DragCoefficientAbsGradientEnum:
+-			GradjDragGradient(gradient,resp,control_index);
++			GradjDragGradient(gradient,control_index);
+ 			break;
+ 		case RheologyBbarAbsGradientEnum:
+-			GradjBGradient(gradient,resp,control_index);
++			GradjBGradient(gradient,control_index);
+ 			break;
+ 		default:
+ 			_error_("response " << EnumToStringx(responses[resp]) << " not supported yet");
+@@ -3832,7 +3832,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GradjBGradient{{{*/
+-void  Tria::GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
++void  Tria::GradjBGradient(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+@@ -4072,7 +4072,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GradjDragGradient{{{*/
+-void  Tria::GradjDragGradient(Vector<IssmDouble>* gradient, int weight_index,int control_index){
++void  Tria::GradjDragGradient(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+@@ -4340,7 +4340,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::RheologyBbarAbsGradient{{{*/
+-IssmDouble Tria::RheologyBbarAbsGradient(int weight_index){
++IssmDouble Tria::RheologyBbarAbsGradient(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble Jelem = 0;
+@@ -4383,7 +4383,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceAverageVelMisfit {{{*/
+-IssmDouble Tria::SurfaceAverageVelMisfit(int weight_index){
++IssmDouble Tria::SurfaceAverageVelMisfit(void){
+ 
+ 	IssmDouble Jelem=0,S,Jdet;
+ 	IssmDouble misfit;
+@@ -4439,7 +4439,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceLogVelMisfit {{{*/
+-IssmDouble Tria::SurfaceLogVelMisfit(int weight_index){
++IssmDouble Tria::SurfaceLogVelMisfit(void){
+ 
+ 	IssmDouble Jelem=0.;
+ 	IssmDouble misfit,Jdet;
+@@ -4499,7 +4499,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceLogVxVyMisfit {{{*/
+-IssmDouble Tria::SurfaceLogVxVyMisfit(int weight_index){
++IssmDouble Tria::SurfaceLogVxVyMisfit(void){
+ 
+ 	IssmDouble Jelem=0, S=0;
+ 	IssmDouble epsvel=2.220446049250313e-16;
+@@ -4559,7 +4559,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceAbsVelMisfit {{{*/
+-IssmDouble Tria::SurfaceAbsVelMisfit(int weight_index){
++IssmDouble Tria::SurfaceAbsVelMisfit(void){
+ 
+ 	IssmDouble Jelem=0;
+ 	IssmDouble misfit,Jdet;
+@@ -4615,7 +4615,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceRelVelMisfit {{{*/
+-IssmDouble Tria::SurfaceRelVelMisfit(int weight_index){
++IssmDouble Tria::SurfaceRelVelMisfit(void){
+ 
+ 	IssmDouble  Jelem=0;
+ 	IssmDouble  scalex=1,scaley=1;
+@@ -4676,7 +4676,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ThicknessAbsGradient{{{*/
+-IssmDouble Tria::ThicknessAbsGradient(int weight_index){
++IssmDouble Tria::ThicknessAbsGradient(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble Jelem = 0;
+@@ -4719,7 +4719,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ThicknessAlongGradient{{{*/
+-IssmDouble Tria::ThicknessAlongGradient(int weight_index){
++IssmDouble Tria::ThicknessAlongGradient(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble  Jelem = 0;
+@@ -4770,7 +4770,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ThicknessAcrossGradient{{{*/
+-IssmDouble Tria::ThicknessAcrossGradient(int weight_index){
++IssmDouble Tria::ThicknessAcrossGradient(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble  Jelem = 0;
+@@ -4821,7 +4821,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ThicknessAbsMisfit {{{*/
+-IssmDouble Tria::ThicknessAbsMisfit(int weight_index){
++IssmDouble Tria::ThicknessAbsMisfit(void){
+ 
+ 	/*Intermediaries*/
+ 	IssmDouble thickness,thicknessobs,weight;
+@@ -5138,7 +5138,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::DragCoefficientAbsGradient{{{*/
+-IssmDouble Tria::DragCoefficientAbsGradient(int weight_index){
++IssmDouble Tria::DragCoefficientAbsGradient(void){
+ 
+ 	/* Intermediaries */
+ 	IssmDouble Jelem = 0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16314)
+@@ -133,16 +133,16 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+-		IssmDouble DragCoefficientAbsGradient(int weight_index);
++		IssmDouble DragCoefficientAbsGradient(void);
+ 		void       GradientIndexing(int* indexing,int control_index);
+ 		void       Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+-		void       GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
+-		void       GradjDGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjBGradient(Vector<IssmDouble>* gradient,int control_index);
++		void       GradjDGradient(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjBSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
+-		void       GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
++		void       GradjDragGradient(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+ 		void       GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
+@@ -152,17 +152,17 @@
+ 		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void       ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+-		IssmDouble RheologyBbarAbsGradient(int weight_index);
+-		IssmDouble ThicknessAbsMisfit(     int weight_index);
+-		IssmDouble SurfaceAbsVelMisfit(    int weight_index);
+-		IssmDouble ThicknessAbsGradient(   int weight_index);
+-		IssmDouble ThicknessAlongGradient( int weight_index);
+-		IssmDouble ThicknessAcrossGradient(int weight_index);
+-		IssmDouble BalancethicknessMisfit(     int weight_index);
+-		IssmDouble SurfaceRelVelMisfit(    int weight_index);
+-		IssmDouble SurfaceLogVelMisfit(    int weight_index);
+-		IssmDouble SurfaceLogVxVyMisfit(   int weight_index);
+-		IssmDouble SurfaceAverageVelMisfit(int weight_index);
++		IssmDouble RheologyBbarAbsGradient(void);
++		IssmDouble ThicknessAbsMisfit(void);
++		IssmDouble SurfaceAbsVelMisfit(void);
++		IssmDouble ThicknessAbsGradient(void);
++		IssmDouble ThicknessAlongGradient(void);
++		IssmDouble ThicknessAcrossGradient(void);
++		IssmDouble BalancethicknessMisfit(void);
++		IssmDouble SurfaceRelVelMisfit(void);
++		IssmDouble SurfaceLogVelMisfit(void);
++		IssmDouble SurfaceLogVxVyMisfit(void);
++		IssmDouble SurfaceAverageVelMisfit(void);
+ 		void       InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16314)
+@@ -6021,14 +6021,14 @@
+ 		case DragCoefficientAbsGradientEnum:
+ 			if(IsOnBed()){
+ 				tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-				tria->GradjDragGradient(gradient,resp,control_index);
++				tria->GradjDragGradient(gradient,control_index);
+ 				delete tria->material; delete tria;
+ 			}
+ 			break;
+ 		case RheologyBbarAbsGradientEnum:
+ 			if(IsOnBed()){
+ 				tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-				tria->GradjBGradient(gradient,resp,control_index);
++				tria->GradjBGradient(gradient,control_index);
+ 				delete tria->material; delete tria;
+ 			}
+ 			break;
+@@ -6416,7 +6416,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceAverageVelMisfit {{{*/
+-IssmDouble Penta::SurfaceAverageVelMisfit(int weight_index){
++IssmDouble Penta::SurfaceAverageVelMisfit(void){
+ 
+ 	int    approximation;
+ 	IssmDouble J;
+@@ -6439,21 +6439,21 @@
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAverageVelMisfit*/
+ 		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceAverageVelMisfit(weight_index);
++		J=tria->SurfaceAverageVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+ 		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceAverageVelMisfit(weight_index);
++		J=tria->SurfaceAverageVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceAbsVelMisfit {{{*/
+-IssmDouble Penta::SurfaceAbsVelMisfit(int weight_index){
++IssmDouble Penta::SurfaceAbsVelMisfit(void){
+ 
+ 	int    approximation;
+ 	IssmDouble J;
+@@ -6476,21 +6476,21 @@
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceAbsVelMisfit*/
+ 		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceAbsVelMisfit(weight_index);
++		J=tria->SurfaceAbsVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+ 		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceAbsVelMisfit(weight_index);
++		J=tria->SurfaceAbsVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceLogVelMisfit {{{*/
+-IssmDouble Penta::SurfaceLogVelMisfit(int weight_index){
++IssmDouble Penta::SurfaceLogVelMisfit(void){
+ 
+ 	int    approximation;
+ 	IssmDouble J;
+@@ -6513,21 +6513,21 @@
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVelMisfit*/
+ 		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceLogVelMisfit(weight_index);
++		J=tria->SurfaceLogVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+ 		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceLogVelMisfit(weight_index);
++		J=tria->SurfaceLogVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceLogVxVyMisfit {{{*/
+-IssmDouble Penta::SurfaceLogVxVyMisfit(int weight_index){
++IssmDouble Penta::SurfaceLogVxVyMisfit(void){
+ 
+ 	IssmDouble J;
+ 	Tria* tria=NULL;
+@@ -6552,21 +6552,21 @@
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceLogVxVyMisfit*/
+ 		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceLogVxVyMisfit(weight_index);
++		J=tria->SurfaceLogVxVyMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+ 		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceLogVxVyMisfit(weight_index);
++		J=tria->SurfaceLogVxVyMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SurfaceRelVelMisfit {{{*/
+-IssmDouble Penta::SurfaceRelVelMisfit(int weight_index){
++IssmDouble Penta::SurfaceRelVelMisfit(void){
+ 
+ 	int    approximation;
+ 	IssmDouble J;
+@@ -6589,27 +6589,27 @@
+ 		/*This element should be collapsed into a tria element at its base. Create this tria element, 
+ 		 * and compute SurfaceRelVelMisfit*/
+ 		tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceRelVelMisfit(weight_index);
++		J=tria->SurfaceRelVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ 	else{
+ 
+ 		tria=(Tria*)SpawnTria(1); //lower face is 0, upper face is 1.
+-		J=tria->SurfaceRelVelMisfit(weight_index);
++		J=tria->SurfaceRelVelMisfit();
+ 		delete tria->material; delete tria;
+ 		return J;
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Penta::ThicknessAbsGradient{{{*/
+-IssmDouble Penta::ThicknessAbsGradient(int weight_index){
++IssmDouble Penta::ThicknessAbsGradient(void){
+ 
+ 	_error_("Not implemented yet");
+ }
+ /*}}}*/
+ /*FUNCTION Penta::ThicknessAbsMisfit {{{*/
+-IssmDouble Penta::ThicknessAbsMisfit(int weight_index){
++IssmDouble Penta::ThicknessAbsMisfit(void){
+ 
+ 	int    approximation;
+ 	IssmDouble J;
+@@ -6623,13 +6623,13 @@
+ 	_error_("Not implemented yet");
+ 
+ 	tria=(Tria*)SpawnTria(0);
+-	J=tria->ThicknessAbsMisfit(weight_index);
++	J=tria->ThicknessAbsMisfit();
+ 	delete tria->material; delete tria;
+ 	return J;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::DragCoefficientAbsGradient{{{*/
+-IssmDouble Penta::DragCoefficientAbsGradient(int weight_index){
++IssmDouble Penta::DragCoefficientAbsGradient(void){
+ 
+ 	IssmDouble J;
+ 	Tria*  tria=NULL;
+@@ -6638,13 +6638,13 @@
+ 	if(NoIceInElement()|| IsFloating() || !IsOnBed()) return 0;
+ 
+ 	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+-	J=tria->DragCoefficientAbsGradient(weight_index);
++	J=tria->DragCoefficientAbsGradient();
+ 	delete tria->material; delete tria;
+ 	return J;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::RheologyBbarAbsGradient{{{*/
+-IssmDouble Penta::RheologyBbarAbsGradient(int weight_index){
++IssmDouble Penta::RheologyBbarAbsGradient(void){
+ 
+ 	IssmDouble J;
+ 	Tria*  tria=NULL;
+@@ -6653,7 +6653,7 @@
+ 	if(NoIceInElement() || !IsOnBed()) return 0;
+ 
+ 	tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1
+-	J=tria->RheologyBbarAbsGradient(weight_index);
++	J=tria->RheologyBbarAbsGradient();
+ 	delete tria->material; delete tria;
+ 	return J;
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16314)
+@@ -136,7 +136,7 @@
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+-		IssmDouble DragCoefficientAbsGradient(int weight_index);
++		IssmDouble DragCoefficientAbsGradient(void);
+ 		void   GradientIndexing(int* indexing,int control_index);
+ 		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
+ 		void   GradjDragSSA(Vector<IssmDouble>* gradient,int control_index);
+@@ -150,17 +150,17 @@
+ 		void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void   ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+-		IssmDouble RheologyBbarAbsGradient(int weight_index);
+-		IssmDouble ThicknessAbsMisfit(     int weight_index);
+-		IssmDouble SurfaceAbsVelMisfit(    int weight_index);
+-		IssmDouble SurfaceRelVelMisfit(    int weight_index);
+-		IssmDouble SurfaceLogVelMisfit(    int weight_index);
+-		IssmDouble SurfaceLogVxVyMisfit(   int weight_index);
+-		IssmDouble SurfaceAverageVelMisfit(int weight_index);
+-		IssmDouble ThicknessAbsGradient(int weight_index);
+-		IssmDouble ThicknessAlongGradient( int weight_index){_error_("not supported");};
+-		IssmDouble ThicknessAcrossGradient(int weight_index){_error_("not supported");};
+-		IssmDouble BalancethicknessMisfit(int weight_index){_error_("not supported");};
++		IssmDouble RheologyBbarAbsGradient(void);
++		IssmDouble ThicknessAbsMisfit(void);
++		IssmDouble SurfaceAbsVelMisfit(void);
++		IssmDouble SurfaceRelVelMisfit(void);
++		IssmDouble SurfaceLogVelMisfit(void);
++		IssmDouble SurfaceLogVxVyMisfit(void);
++		IssmDouble SurfaceAverageVelMisfit(void);
++		IssmDouble ThicknessAbsGradient(void);
++		IssmDouble ThicknessAlongGradient(void){_error_("not supported");};
++		IssmDouble ThicknessAcrossGradient(void){_error_("not supported");};
++		IssmDouble BalancethicknessMisfit(void){_error_("not supported");};
+ 		void   InputControlUpdate(IssmDouble scalar,bool save_parameter);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16314)
+@@ -93,7 +93,7 @@
+ 		femmodel->parameters->SetParam(this->index,IndexEnum);
+ 	}
+ 
+-	femmodel->Responsex(poutput_value,this->name,0);
++	femmodel->Responsex(poutput_value,this->name);
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16313)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16314)
+@@ -146,24 +146,23 @@
+ 
+ 	/*Get requested input within dataset*/
+ 	for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
+-	if(offset<0){
+-		this->Echo();
+-		_error_("Could not find input of id "<<id);
+-	}
++	if(offset<0) _error_("Could not find input of id "<<id);
+ 
+ 	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(offset));
+ 	input->GetInputValue(pvalue,gauss);
+ }
+ /*}}}*/
+-/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){{{*/
+-void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){
++/*FUNCTION DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int id){{{*/
++void DatasetInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int id){
+ 
++	int  offset = -1;
+ 	_assert_(this->numids == this->inputs->Size());
+ 
+ 	/*Get requested input within dataset*/
+-	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
+-	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
++	for(int i=0;i<this->numids;i++) if(this->ids[i]==id) offset=i;
++	if(offset<0) _error_("Could not find input of id "<<id);
+ 
++	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(offset));
+ 	input->GetInputValue(pvalue,gauss);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16313)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16314)
+@@ -76,18 +76,18 @@
+ 		void IceVolumex(IssmDouble* pV);
+ 		void IceVolumeAboveFloatationx(IssmDouble* pV);
+ 		void ElementResponsex(IssmDouble* presponse,int response_enum);
+-		void BalancethicknessMisfitx(IssmDouble* pV,int weight_index);
++		void BalancethicknessMisfitx(IssmDouble* pV);
+ 		#endif
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+ 		void RequestedOutputsx(int* requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+-		void Responsex(IssmDouble* presponse,int response_descriptor_enum,int weight_index);
+-		void Responsex(IssmDouble* presponse,const char* response_descriptor,int weight_index);
++		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
++		void Responsex(IssmDouble* presponse,const char* response_descriptor);
+ 		#ifdef _HAVE_CONTROL_
+ 		void CostFunctionx( IssmDouble* pJ);
+-		void ThicknessAbsGradientx( IssmDouble* pJ,int weight_index);
++		void ThicknessAbsGradientx( IssmDouble* pJ);
+ 		#endif
+ 		#ifdef _HAVE_GIA_
+ 		void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y);
Index: issm/oecreview/Archive/16133-16554/ISSM-16314-16315.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16314-16315.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16314-16315.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16314)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16315)
+@@ -32,6 +32,7 @@
+ /*}}}*/
+ /*FUNCTION DatasetInput::~DatasetInput(){{{*/
+ DatasetInput::~DatasetInput(){
++	xDelete<int>(this->ids);
+ 	delete inputs;
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16315-16316.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16315-16316.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16315-16316.diff	(revision 16556)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/m/mech/robintemperature.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/robintemperature.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/robintemperature.m	(revision 16316)
+@@ -0,0 +1,42 @@
++function tprofile=robintemperature(heatflux,accumrate,thickness,surftemp,z)
++%ROBINTEMPERATURE - compute vertical temperature profile of an ice sheet (Robin, 1955)
++%
++%	This routine computes the vertical temperature profile of an 
++%	ice sheet according to the solution of Robin (1955), neglecting 
++%	friction and horizontal advection.  The solution is thus most
++%  appropriate at an ice divide.
++%
++%	The coordinate system for the solution runs from z=0 at the base 
++%	to z=H at the surface of the ice.
++%
++%	Parameters (SI units):
++%		-heatflux	Geothermal heat flux (W m^-2)
++%		-accumrate	Surface accumulation rate (m s^-1 ice equivalent)
++%		-thickness	Ice thickness (m)
++%		-surftemp	Surface temperature (K)
++%		-z				Vertical position at which to calculate temperature
++%						(z can be a scalar or a vector)
++%
++%	Returns a vector the same length as z containing the temperature in K
++%
++%	Usage:
++%		tprofile=robintemperature(heatflux,accumrate,thickness,surftemp)
++
++%checks
++if nargin~=5
++	help robintemperature
++	error('bad usage - wrong number of arguments.')
++end
++
++%some constants (from Holland and Jenkins, 1999)
++alphaT=1.14e-6; % thermal diffusivity (m^2 s^-1)
++c=2009; % specific heat capacity (J kg^-1 K^-1)
++rho=917; % ice density (kg m^-3)
++
++%create vertical coordinate variable
++zstar=sqrt(2*alphaT*thickness/accumrate);
++
++tprofile=surftemp+sqrt(2*thickness*pi/accumrate/alphaT)*heatflux/2/rho/c*(erf(z/zstar)-erf(thickness/zstar));
++
++% difference between surface and base temperautre for check (Cuffey2010 p412):
++% tprofile-surftemp
Index: issm/oecreview/Archive/16133-16554/ISSM-16316-16317.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16316-16317.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16316-16317.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 16316)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.m	(revision 16317)
+@@ -70,7 +70,7 @@
+ end
+ 
+ %Check that no L1L2 or HO or FS for 2d mesh
+-if (md.mesh.dimension==2),
++if strcmp(meshtype(md.mesh),'2Dhorizontal')
+ 	if any(L1L2flag | FSflag | HOflag)
+ 		error('FS and HO elements not allowed in 2d mesh, extrude it first')
+ 	end
Index: issm/oecreview/Archive/16133-16554/ISSM-16317-16318.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16317-16318.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16317-16318.diff	(revision 16556)
@@ -0,0 +1,139 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 16318)
+@@ -53,9 +53,9 @@
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-#		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+-		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
+-		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if hasattr(md.mesh,'vertexonsurface'):
++			pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++			md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=50.*10**-3*numpy.ones((md.mesh.numberofvertices,1))    #50 mW/m^2
+ 	else:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 16318)
+@@ -101,7 +101,10 @@
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+-	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	if isprop(md.mesh,'vertexonsurface'),
++		pos=find(md.mesh.vertexonsurface);
++		md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	end
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+ 		md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1);
+ 		md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.))=50.*10.^-3; %50mW/m2
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 16318)
+@@ -52,7 +52,10 @@
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+-	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	if isprop(md.mesh,'vertexonsurface')
++		pos=find(md.mesh.vertexonsurface);
++		md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	end
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+ 		md.basalforcings.geothermalflux=50.*10^-3*ones(md.mesh.numberofvertices,1); %50 mW/m^2
+ 	end
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 16318)
+@@ -1,6 +1,7 @@
+ import os
+ import numpy
+ from ContourToMesh import *
++from MatlabFuncs import *
+ 
+ def SetIceShelfBC(md,icefrontfile=''):
+ 	"""
+@@ -42,10 +43,12 @@
+ 	md.mask.ice_levelset[pos]=0
+ 
+ 	#First find segments that are not completely on the front
+-	if md.mesh.dimension==2:
+-		numbernodesfront=2
++	if strcmp(md.mesh.meshtype(),'3D'):
++		numbernodesfront=4;
++	elif strcmp(md.mesh.meshtype(),'2Dhorizontal'):
++		numbernodesfront=2;
+ 	else:
+-		numbernodesfront=4
++		raise	error('mesh type not supported yet')
+ 	if any(md.mask.ice_levelset<=0):
+ 		values=md.mask.ice_levelset[md.mesh.segments[:,0:-1]-1]
+ 		segmentsfront=1-values
+@@ -92,9 +95,9 @@
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-#		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+-		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
+-		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if hasattr(md.mesh,'vertexonsurface'):
++			pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++			md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+ 	else:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 16318)
+@@ -100,9 +100,9 @@
+ 
+ 	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
+ 		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-#		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+-		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
+-		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if hasattr(md.mesh,'vertexonsurface'):
++			pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++			md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+ 			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)]=50.*10.**-3    #50mW/m2
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 16317)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m	(revision 16318)
+@@ -37,10 +37,12 @@
+ md.mask.ice_levelset(find(nodeonicefront))=0;
+ 
+ %First find segments that are not completely on the front
+-if(md.mesh.dimension==2),
++if strcmp(meshtype(md.mesh),'3D'),
++	numbernodesfront=4;
++elseif strcmp(meshtype(md.mesh),'2Dhorizontal'),
+ 	numbernodesfront=2;
+-else 
+-	numbernodesfront=4;
++else
++	error('mesh type not supported yet');
+ end
+ segmentsfront=md.mask.ice_levelset(md.mesh.segments(:,1:numbernodesfront))==0;
+ segments=find(sum(segmentsfront,2)~=numbernodesfront);
+@@ -83,7 +85,10 @@
+ 
+ if (length(md.initialization.temperature)==md.mesh.numberofvertices),
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+-	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	if isprop(md.mesh,'vertexonsurface'),
++		pos=find(md.mesh.vertexonsurface);
++		md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++	end
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+ 		md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1);
+ 	end
Index: issm/oecreview/Archive/16133-16554/ISSM-16318-16319.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16318-16319.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16318-16319.diff	(revision 16556)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/m/plot/plot_contour.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_contour.m	(revision 16318)
++++ ../trunk-jpl/src/m/plot/plot_contour.m	(revision 16319)
+@@ -10,6 +10,7 @@
+ [x y z index is2d isplanet]=processmesh(md,[],options);
+ options=removefield(options,'log',0);
+ [data datatype]=processdata(md,datain,options);
++if isempty(data), error('data provided is empty'); end
+ 
+ %check is2d
+ if ~is2d,
+@@ -224,13 +225,17 @@
+ 			h=[h;patch('Xdata',[xc;NaN],'Ydata',[yc;NaN],'Zdata',zc,'Cdata',zc,'facecolor','none','edgecolor','flat','linewidth',linewidth)];
+ 			hold on      
+ 		else
+-			h=[h;patch('Xdata',[xc;NaN],'Ydata',[yc;NaN],'facecolor','none','edgecolor',color,'linewidth',linewidth)];
++			dist = 5000;
++			if (max(xc)-min(xc)+max(yc)-min(yc))<dist, continue; end
++			h=patch('Xdata',[xc;NaN],'Ydata',[yc;NaN],'facecolor','none','edgecolor',map(i,:),'linewidth',linewidth);
++			c = horzcat([level, xc'; length(xc), yc']);
++			clabel(c,h,'FontSize',10,'labelspacing',20000,'color',map(i,:));
+ 			hold on
+ 		end
+ 
+ 		% Update the CS data structure as per "contours.m"
+ 		% so that clabel works
+-		c = horzcat(c,[level, xc'; length(xc), yc']);
++		%c = horzcat(c,[level, xc'; length(xc), yc']);
+ 
+ 	end
+ end
+@@ -240,6 +245,7 @@
+ 	if exist(options,'contouronly')
+ 		clabel(c,h);
+ 	else
+-		clabel(c,h,'color',color,'FontSize',14);
++		%clabel(c,h,'color',color,'FontSize',10,'labelspacing',20000);
++		clabel(c,h,'FontSize',10,'labelspacing',20000);
+ 	end
+ end
+Index: ../trunk-jpl/src/m/plot/plot_overlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 16318)
++++ ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 16319)
+@@ -2,7 +2,7 @@
+ %PLOT_OVERLAY - superimpose radar image to a given field
+ %
+ %   Usage:
+-%      plot_overlay(md,options,plotlines,plotcols,i)
++%      plot_overlay(md,data,options,plotlines,plotcols,i)
+ %
+ %   See also: PLOTMODEL
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16319-16320.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16319-16320.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16319-16320.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16319)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16320)
+@@ -4853,7 +4853,7 @@
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 		thickness_input->GetInputDerivativeValue(&dH[0],&xyz_list[0][0],gauss);
+ 		thicknessobs_input->GetInputValue(&thicknessobs,gauss);
+-		weights_input->GetInputValue(&weight,gauss,ThicknessAbsGradientEnum);
++		weights_input->GetInputValue(&weight,gauss,ThicknessAbsMisfitEnum);
+ 
+ 		/*compute ThicknessAbsMisfit*/
+ 		Jelem+=0.5*(thickness-thicknessobs)*(thickness-thicknessobs)*weight*Jdet*gauss->weight;
Index: issm/oecreview/Archive/16133-16554/ISSM-16320-16321.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16320-16321.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16320-16321.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16320)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16321)
+@@ -74,7 +74,6 @@
+ 			InputDuplicatex(femmodel,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
+ 		}
+ 		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
+-		if(meshtype==Mesh2DhorizontalEnum)InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+ 		if(isthermal && meshtype==Mesh3DEnum){
+ 			//Update Vertex Position after updating Thickness and Bed
+ 			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
Index: issm/oecreview/Archive/16133-16554/ISSM-16321-16322.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16321-16322.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16321-16322.diff	(revision 16556)
@@ -0,0 +1,612 @@
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 16322)
+@@ -20,6 +20,7 @@
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md.thermal.isenthalpy=1
++md.thermal.isdynamicbasalspc=1
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 16322)
+@@ -15,6 +15,7 @@
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md.thermal.isenthalpy=1
++md.thermal.isdynamicbasalspc=1
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test431.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.py	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test431.py	(revision 16322)
+@@ -16,6 +16,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+ md.thermal.isenthalpy=1
++md.thermal.isdynamicbasalspc=1
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+ md=solve(md,SteadystateSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 16322)
+@@ -21,6 +21,7 @@
+ md.transient.isthermal=True
+ md.transient.isgroundingline=False
+ md.thermal.isenthalpy=1
++md.thermal.isdynamicbasalspc=1
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 16322)
+@@ -6,6 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
++md.thermal.isdynamicbasalspc=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 16322)
+@@ -11,6 +11,7 @@
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
++md.thermal.isdynamicbasalspc=1;
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 16322)
+@@ -6,6 +6,7 @@
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+ md.thermal.isenthalpy=1;
++md.thermal.isdynamicbasalspc=1;
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 16322)
+@@ -19,6 +19,7 @@
+ md.initialization.temperature[:]=272.
+ md.thermal.spctemperature[numpy.nonzero(md.mesh.vertexonsurface)[0]]=272.
+ md.thermal.isenthalpy=1
++md.thermal.isdynamicbasalspc=1
+ md.basalforcings.geothermalflux[:]=5.
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 16322)
+@@ -11,6 +11,7 @@
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
++md.thermal.isdynamicbasalspc=1;
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 16321)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 16322)
+@@ -9,6 +9,7 @@
+ md.initialization.temperature(:)=272.;
+ md.thermal.spctemperature(find(md.mesh.vertexonsurface))=272.;
+ md.thermal.isenthalpy=1;
++md.thermal.isdynamicbasalspc=1;
+ md.basalforcings.geothermalflux(:)=5.;
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive121.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive326.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16321)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16322)
+@@ -118,7 +118,7 @@
+ 			}
+ 			else{
+ 				enthalpy_core(femmodel);
+-                		PostprocessingEnthalpyx(femmodel);
++				PostprocessingEnthalpyx(femmodel);
+ 			}
+ 			#else
+ 			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+Index: ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 16321)
++++ ../trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp	(revision 16322)
+@@ -7,8 +7,8 @@
+ #include "../Exceptions/exceptions.h"
+ 
+ /* get ice stiffness B from enthalpy, pressure and flow law exponent*/
+-IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n){
+-  /*Use parameterization for the rheology: Aschwanden 2012
++IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure, IssmDouble n, IssmDouble betaCC, IssmDouble referencetemperature, IssmDouble heatcapacity, IssmDouble latentheat){
++  /*Use parameterization for the rheology: Grewe/Blatter 2009, Aschwanden 2012
+    *
+    *  A(H,p) = A0 exp(-Q/RT(H,p)), if H < H_s(p)
+    *         = A0 exp(-Q/RTpmp) (1+181.25w(H,p)), if H_s(p) \le H < H_l(p)
+@@ -21,7 +21,7 @@
+    *
+    *  H_s(p) = c_i (Tpmp - Tref)
+    *
+-   *  Tpmp   = T - beta p;
++   *  Tpmp   = T - betaCC p;
+    *
+    *  A0 constant of proportionality
+    *     = 3.61 * 10^-13   if T*<263.15K
+@@ -34,23 +34,24 @@
+    *  
+    *  Convert A to B :  B = A^(-1/n) */
+ 
+-  /*Some physical constants (Aschwanden 2012)*/
+-  /*TODO: get those constants from model*/
+-  IssmDouble beta=7.9*pow(10.,-8.);
+-  IssmDouble R=8.314;
+-  IssmDouble heatcapacity=2009; // J/kg/K
+-  IssmDouble Tref=253.15;
+-  IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
++	/*check feasibility*/
++  _assert_(pressure>0);
++  _assert_(n>0);
++  _assert_(betaCC>0);
++  _assert_(referencetemperature>0);
++  _assert_(heatcapacity>0);
++  _assert_(latentheat>0);
+ 
++  /*Some physical constants*/
++  IssmDouble R=8.314; 
++
+   /*Intermediaries*/
+   IssmDouble A,B,Tstar,Tpmp,H_sp,waterfraction;
+ 
+-  _assert_(pressure>0);
+-  _assert_(enthalpy>0);
+-  Tpmp=273.15-beta*pressure; 
+-  H_sp=heatcapacity*(Tpmp - Tref);
++  Tpmp=273.15-betaCC*pressure; 
++  H_sp=heatcapacity*(Tpmp - referencetemperature);
+   if (enthalpy < H_sp){
+-    Tstar = Tref + enthalpy/heatcapacity - beta*pressure;	
++    Tstar = referencetemperature + enthalpy/heatcapacity - betaCC*pressure;	
+     waterfraction = 0;
+   }
+   else{
+@@ -74,35 +75,37 @@
+   return B;
+ }
+ 
+-/*Get stiffness from temperature, waterfraction and depth*/
+-IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n){
+-	/*Use parameterization for the rheology: Greve and Blatter 2009
+-	 * get enthalpy from temperature and water fraction,
+-	 * and use LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n) */
+-
+-  IssmDouble rho_ice=910; // kg/m^3
+-  IssmDouble g=9.81; //kg*m/s^2
+-  IssmDouble heatcapacity=2009; // J/kg/K
+-  IssmDouble Tref=253.15;
+-  IssmDouble beta=7.9*pow(10.,-8.);
+-  IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
+-  IssmDouble Tstar, enthalpy, pressure, B;
+-  _assert_(temperature>0);
+-  _assert_(waterfraction>0);
+-  _assert_(depth>0);
+-
+-  /*get pressure*/
+-  pressure= rho_ice*g*depth;
+-  Tstar=temperature-beta*pressure; // TODO: check whether plus or minus
+-  /*get enthalpy*/
+-  if (Tstar < 273.15){
+-    enthalpy=heatcapacity*(Tstar - Tref);
+-  }
+-  else{
+-    enthalpy=heatcapacity*(273.15 - Tref) + waterfraction*latentheat;
+-  }
+-
+-  B=LliboutryDuval(enthalpy, pressure, n);
+-
+-  return B;
+-}
++// /*Get stiffness from temperature, waterfraction and depth*/
++// IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n){
++// 	/*Use parameterization for the rheology: Greve and Blatter 2009
++// 	 * get enthalpy from temperature and water fraction,
++// 	 * and use LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n) */
++// 
++// 	/*TODO: update params from model*/
++//   IssmDouble rho_ice=910; // kg/m^3
++//   IssmDouble g=9.81; //kg*m/s^2
++//   IssmDouble heatcapacity=2009; // J/kg/K
++//   IssmDouble referencetemperature=253.15;
++//   IssmDouble betaCC=7.9*pow(10.,-8.);
++//   IssmDouble latentheat=3.34*pow(10,5.); // from Aschwanden 2012
++// 
++//   IssmDouble Tstar, enthalpy, pressure, B;
++//   _assert_(temperature>0);
++//   _assert_(waterfraction>0);
++//   _assert_(depth>0);
++// 
++//   /*get pressure*/
++//   pressure= rho_ice*g*depth;
++//   Tstar=temperature-betaCC*pressure; // TODO: check whether plus or minus
++//   /*get enthalpy*/
++//   if (Tstar < 273.15){
++//     enthalpy=heatcapacity*(Tstar - referencetemperature);
++//   }
++//   else{
++//     enthalpy=heatcapacity*(273.15 - referencetemperature) + waterfraction*latentheat;
++//   }
++// 
++//   B=LliboutryDuval(enthalpy, pressure, n, betaCC, referencetemperature, heatcapacity, latentheat);
++// 
++//   return B;
++// }
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 16321)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 16322)
+@@ -9,8 +9,8 @@
+ 
+ IssmDouble Paterson(IssmDouble temperature);
+ IssmDouble Arrhenius(IssmDouble temperature,IssmDouble depth,IssmDouble n);
+-IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure,IssmDouble n);
+-IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n);
++IssmDouble LliboutryDuval(IssmDouble enthalpy, IssmDouble pressure, IssmDouble n, IssmDouble betaCC, IssmDouble referencetemperature, IssmDouble heatcapacity, IssmDouble latentheat);
++// IssmDouble LliboutryDuval(IssmDouble temperature, IssmDouble waterfraction, IssmDouble depth,IssmDouble n);
+ IssmDouble PddSurfaceMassBlance(IssmDouble* monthlytemperatures,  IssmDouble* monthlyprec, IssmDouble* pdds, IssmDouble* pds, 
+ 				IssmDouble signorm, IssmDouble yts, IssmDouble h, IssmDouble s,
+ 				IssmDouble rho_ice, IssmDouble rho_water, IssmDouble desfac, IssmDouble s0p);
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16321)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16322)
+@@ -10,7 +10,6 @@
+     /*Intermediary*/
+ 	int i;
+ 	Element* element=NULL;
+-
+ 	
+ 	/*Compute basal melting rates: */
+ 	for (i=0;i<femmodel->elements->Size();i++){
+@@ -18,12 +17,11 @@
+ 		element->ComputeBasalMeltingrate();
+ 	}
+ 
+-    /*drain excess water fraction: */
+-    /*	for (i=0;i<femmodel->elements->Size();i++){
++	/*drain excess water fraction: */
++	for (i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->DrainWaterfraction();
+ 	}
+-*/
+ 
+ 	/*Update basal dirichlet BCs for enthalpy: */
+ 	for (i=0;i<femmodel->elements->Size();i++){
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16321)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16322)
+@@ -377,10 +377,10 @@
+ /*FUNCTION Matpar::GetEnthalpyDiffusionParameter{{{*/
+ IssmDouble Matpar::GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){
+ 	if(enthalpy<PureIceEnthalpy(pressure)){
+-		return thermalconductivity/(rho_ice*heatcapacity);
++		return thermalconductivity/heatcapacity;
+ 	}
+ 	else{
+-		return 1.045*1.e-4/rho_ice; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
++		return 1.045*1.e-4; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
+ 	}
+ }
+ /*}}}*/
+@@ -392,7 +392,7 @@
+ 
+ 	if(enthalpy<PureIceEnthalpy(pressure)){
+ 		temperature=referencetemperature+enthalpy/heatcapacity;
+-		waterfraction=0;
++		waterfraction=0.;
+ 	}
+ 	else{
+ 		temperature=TMeltingPoint(pressure);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16321)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16322)
+@@ -3999,8 +3999,8 @@
+ 
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+-		kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
+-		D_scalar_conduct=gauss->weight*Jdet*kappa;
++		kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure); _assert_(kappa>0.);
++		D_scalar_conduct=gauss->weight*Jdet*kappa/rho_ice;
+ 		if(reCast<bool,IssmDouble>(dt)) D_scalar_conduct=D_scalar_conduct*dt;
+ 
+ 		D[0][0]=D_scalar_conduct; D[0][1]=0; D[0][2]=0;
+@@ -4450,7 +4450,8 @@
+ 
+ 		scalar_def=phi/rho_ice*Jdet*gauss->weight;
+ 		if(reCast<bool,IssmDouble>(dt)) scalar_def=scalar_def*dt;
+-
++		
++		/*TODO: add -beta*laplace T_m(p)*/
+ 		for(i=0;i<NUMVERTICES;i++)  pe->values[i]+=scalar_def*L[i];
+ 
+ 		/* Build transient now */
+@@ -4469,7 +4470,8 @@
+ 			pressure_input->GetInputValue(&pressure, gauss);
+ 			enthalpypicard_input->GetInputValue(&enthalpypicard, gauss);
+ 			kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy,pressure);
+-			tau_parameter=GetStabilizationParameter(u,v,w,diameter,kappa);
++			kappa/=rho_ice;
++			tau_parameter=GetStabilizationParameter(u,v,w,diameter,kappa); 
+ 
+ 			for(i=0;i<NUMVERTICES;i++)  pe->values[i]+=tau_parameter*scalar_def*(u*dbasis[0][i]+v*dbasis[1][i]+w*dbasis[2][i]);
+ 			if(reCast<bool,IssmDouble>(dt)){
+@@ -4553,7 +4555,7 @@
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
+ 	IssmDouble Jdet2d,dt;
+ 	IssmDouble rho_ice,heatcapacity,geothermalflux_value;
+-	IssmDouble basalfriction,alpha2,vx,vy;
++	IssmDouble basalfriction,alpha2,vx,vy,vz;
+ 	IssmDouble scalar,enthalpy,enthalpyup;
+ 	IssmDouble pressure,pressureup;
+ 	IssmDouble watercolumn;
+@@ -4599,32 +4601,36 @@
+ 
+ 		enthalpy_input->GetInputValue(&enthalpy,gauss);
+ 		pressure_input->GetInputValue(&pressure,gauss);
+-		if(enthalpy>=matpar->PureIceEnthalpy(pressure)){
++		watercolumn_input->GetInputValue(&watercolumn,gauss);
++
++		if((watercolumn==0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
++			/* the above check is equivalent to 
++			 NOT ((watercolumn>0.) AND (enthalpy<PIE)) AND (enthalpy<PIE)*/
++			geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
++
++			friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++			vx_input->GetInputValue(&vx,gauss);
++			vy_input->GetInputValue(&vy,gauss);
++			vz_input->GetInputValue(&vz,gauss);
++			basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
++
++			scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
++			if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
++			for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
++		}
++		else if(enthalpy>=matpar->PureIceEnthalpy(pressure)){
++			/* check positive thickness of temperate basal ice layer */
+ 			enthalpy_input->GetInputValue(&enthalpyup,gaussup);
+ 			pressure_input->GetInputValue(&pressureup,gaussup);
+ 			if(enthalpyup>=matpar->PureIceEnthalpy(pressureup)){
+-				// temperate ice has positive thickness: grad enthalpy*n=0.
++				// TODO: temperate ice has positive thickness: grad enthalpy*n=0.
+ 			}
+ 			else{
+ 				// only base temperate, set Dirichlet BCs in Penta::UpdateBasalConstraintsEnthalpy()
+ 			}
+ 		}
+-		else{
+-			watercolumn_input->GetInputValue(&watercolumn,gauss);
+-			if(watercolumn==0.){
+-				/*add geothermal heat flux and basal friction*/
+-				geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+-				friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+-				vx_input->GetInputValue(&vx,gauss);
+-				vy_input->GetInputValue(&vy,gauss);
+-				basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0));
+-
+-				scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
+-				if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
+-
+-				for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+-			}
+-			else{  /*do nothing (water layer acts as insulation)*/  }
++		else {
++			// base cold, but watercolumn positive. Set base to h_pmp.
+ 		}
+ 	}
+ 
+@@ -5010,8 +5016,9 @@
+ 				break;
+ 			case LliboutryDuvalEnum:
+ 				B_average=LliboutryDuval((values[0]+values[1]+values[2]+values[3]+values[4]+values[5])/6.0,
+-							(pressure[0]+pressure[1]+pressure[2]+pressure[3]+pressure[4]+pressure[5])/6.0,
+-							material->GetN());
++																 (pressure[0]+pressure[1]+pressure[2]+pressure[3]+pressure[4]+pressure[5])/6.0,
++																 material->GetN(), 
++																 matpar->GetBeta(), matpar->GetReferenceTemperature(), matpar->GetHeatCapacity(), matpar->GetLatentHeat());
+ 				for(i=0;i<numdof;i++) B[i]=B_average;
+ 				this->material->inputs->AddInput(new PentaInput(MaterialsRheologyBEnum,B,P1Enum));
+ 				break;
+@@ -5031,10 +5038,10 @@
+ void  Penta::UpdateBasalConstraintsEnthalpy(void){
+ 
+ 	/*Intermediary*/
+-	bool        isenthalpy,isdynamicbasalspc,istemperatelayer;
++	bool        isenthalpy,isdynamicbasalspc,setspc;
+ 	int         numindices, numindicesup;
+ 	IssmDouble  h_pmp,pressure, pressureup;
+-    IssmDouble  enthalpy, enthalpyup;
++	IssmDouble  enthalpy, enthalpyup;
+ 	int        *indices = NULL, *indicesup = NULL;
+ 
+ 	/* Only update Constraints at the base of grounded ice*/
+@@ -5044,63 +5051,61 @@
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;
+ 	parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum);
+-	isdynamicbasalspc = true; // TODO: remove before release
+ 	if(!isdynamicbasalspc) return;
+ 
+ 	/*Fetch indices of basal & surface nodes for this finite element*/
+ 	BasalNodeIndices(&numindices,&indices,this->element_type);
+-    SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
+-    _assert_(numindices==numindicesup);
++	SurfaceNodeIndices(&numindicesup,&indicesup,this->element_type);
++	_assert_(numindices==numindicesup);
+ 
+ 	/*Get parameters and inputs: */
+ 	Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
+-    Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
++	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
+ 
+-	/*if there is a temperate layer of positive thickness, set enthalpy=h_pmp at that node*/
++	/*if there is a temperate layer of zero thickness, set spc enthalpy=h_pmp at that node*/
+ 	GaussPenta* gauss=new GaussPenta();
+-    GaussPenta* gaussup=new GaussPenta();
++	GaussPenta* gaussup=new GaussPenta();
+ 	for(int i=0;i<numindices;i++){
+ 		gauss->GaussNode(this->element_type,indices[i]);
+-        gaussup->GaussNode(this->element_type,indicesup[i]); 
++		gaussup->GaussNode(this->element_type,indicesup[i]); 
+ 
+ 		/*Check wether there is a temperate layer at the base or not */
+-        /*check if node is temperate, if not, continue*/
+-        enthalpy_input->GetInputValue(&enthalpy, gauss);
++		/*check if node is temperate, if not, continue*/
++		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
+-        if (enthalpy<matpar->PureIceEnthalpy(pressure)){
+-          continue;
+-        }
+-        /*check if upper node is temperate. 
+-          if yes, then we have a temperate layer of positive thickness and 
+-          reset the spc. 
+-          if not, apply dirichlet BC.*/
+-        enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+-		pressure_input->GetInputValue(&pressureup, gaussup);    
+-        istemperatelayer = false;
+-        if (enthalpyup>=matpar->PureIceEnthalpy(pressureup))
+-          istemperatelayer=true;
++		setspc = false;
++		if (enthalpy>=matpar->PureIceEnthalpy(pressure)){		
++			/*check if upper node is temperate, too. 
++				if yes, then we have a temperate layer of positive thickness and reset the spc. 
++				if not, apply dirichlet BC.*/
++			enthalpy_input->GetInputValue(&enthalpyup, gaussup);
++			pressure_input->GetInputValue(&pressureup, gaussup);    
++			setspc=(enthalpyup<matpar->PureIceEnthalpy(pressureup))?true:false;
++		}
+ 
+-		/*Add Dirichlet constraint to this node if there is no layer of temperate ice with positive thickness*/
+-		if(!istemperatelayer){
++		if (setspc) {
+ 			/*Calculate enthalpy at pressure melting point */
+ 			h_pmp=matpar->PureIceEnthalpy(pressure);
+ 			/*Apply Dirichlet condition (dof = 0 here, since there is only one degree of freedom per node)*/
+ 			nodes[indices[i]]->ApplyConstraint(1,h_pmp);
+ 		}
+-        else {
+-          /*remove spc*/
+-          nodes[indices[i]]->DofInFSet(0);
+-        }
++		else {
++			/*remove spc*/
++			nodes[indices[i]]->DofInFSet(0);
++		}
+ 	}
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(indices);
+-    xDelete<int>(indicesup);
++	xDelete<int>(indicesup);
++	delete gauss;
++	delete gaussup;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::ComputeBasalMeltingrate{{{*/
+ void Penta::ComputeBasalMeltingrate(void){
+ 	/*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/
++	/* melting rate is positive when melting, negative when refreezing*/
+ 
+ 	/* Intermediaries */
+ 	bool        isenthalpy, checkpositivethickness, istemperatelayer;
+@@ -5159,14 +5164,12 @@
+ 		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure[iv]))){
+ 			/*ensure that no ice is at T<Tm(p), if water layer present*/
+ 			enthalpy[iv]=matpar->PureIceEnthalpy(pressure[iv]); 
+-			//meltingrate_enthalpy=0.;
+ 		}
+ 		else if(enthalpy[iv]<matpar->PureIceEnthalpy(pressure[iv])){
+ 			/*cold base: set q*n=q_geo*n+frictionheating as Neumann BC in Penta::CreatePVectorEnthalpySheet*/
+-			meltingrate_enthalpy=0.;
+-			checkpositivethickness=false;
++			checkpositivethickness=false; // cold base, skip next test
+ 		}
+-		else {/*do nothing, go to next check*/}
++		else {/*we have a temperate base, go to next test*/}
+ 
+ 		if(checkpositivethickness){
+ 			/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
+@@ -5175,7 +5178,7 @@
+ 			if(istemperatelayer) for(i=0;i<3;i++) vec_heatflux[i]=0.;
+ 			else{
+ 				enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure[iv]);
++				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure[iv]); _assert_(kappa>0.);
+ 				for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
+ 			}
+ 
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16321)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16322)
+@@ -55,9 +55,12 @@
+ 				replicate=repmat(md.geometry.surface-md.mesh.z,1,size(md.thermal.spctemperature,2));
+ 				md = checkfield(md,'thermal.spctemperature(find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos),'message','spctemperature should be below the adjusted melting point');
+ 				md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0 1]);
+-				md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0 1]);
+-			end
+-		end % }}}
++				md = checkfield(md,'thermal.isdynamicbasalspc','numel', [1],'values',[0 1]);
++				if(md.thermal.isenthalpy)
++					md = checkfield(md,'thermal.isdynamicbasalspc','numel', [1],'values',[1], 'message',['for enthalpy run thermal.isdynamicbasalspc should be 1']);
++				end
++	    end
++    end % }}} 
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Thermal solution parameters:'));
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16322-16323.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16322-16323.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16322-16323.diff	(revision 16556)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 16322)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 16323)
+@@ -13,7 +13,7 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+-md.transient.requested_outputs=[IceVolumeEnum;IceVolumeAboveFloatationEnum];
++md.transient.requested_outputs=[IceVolumeEnum();IceVolumeAboveFloatationEnum()];
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 16322)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 16323)
+@@ -22,6 +22,7 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
++md.transient.requested_outputs=[IceVolumeEnum(),IceVolumeAboveFloatationEnum()]
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 16322)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 16323)
+@@ -12,7 +12,7 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+-md.transient.requested_outputs=[IceVolumeEnum;IceVolumeAboveFloatationEnum];
++md.transient.requested_outputs=[IceVolumeEnum();IceVolumeAboveFloatationEnum()];
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 16322)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 16323)
+@@ -23,6 +23,7 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
++md.transient.requested_outputs=[IceVolumeEnum(),IceVolumeAboveFloatationEnum()]
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md=solve(md,TransientSolutionEnum())
Index: issm/oecreview/Archive/16133-16554/ISSM-16323-16324.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16323-16324.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16323-16324.diff	(revision 16556)
@@ -0,0 +1,142 @@
+Index: ../trunk-jpl/src/m/mesh/triangle2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle2dvertical.m	(revision 0)
++++ ../trunk-jpl/src/m/mesh/triangle2dvertical.m	(revision 16324)
+@@ -0,0 +1,62 @@
++function md=triangle(md,domainname,resolution)
++%TRIANGLE - create model mesh using the triangle package
++%
++%   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++%   where md is a @model object, domainname is the name of an Argus domain outline file, 
++%   and resolution is a characteristic length for the mesh (same unit as the domain outline
++%   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
++%
++%   Usage:
++%      md=triangle(md,domainname,resolution)
++%
++%   Examples:
++%      md=triangle(md,'DomainOutline.exp',1000);
++
++%Check that mesh was not already run, and warn user: 
++if md.mesh.numberofelements~=0,
++	choice=input('This model already has a mesh. Are you sure you want to go ahead? (y/n)','s');
++	if ~strcmp(choice,'y')
++		disp('no meshing done ... exiting');
++		return
++	end
++end
++
++area=resolution^2;
++
++%Mesh using TriMesh
++[elements,x,z,segments,segmentmarkers]=TriMesh(domainname,'',area);
++
++%check that all the created nodes belong to at least one element
++orphan=find(~ismember([1:length(x)],sort(unique(elements(:)))));
++for i=1:length(orphan),
++	disp('WARNING: removing orphans');
++	%get rid of the orphan node i
++	%update x and y
++	x=[x(1:orphan(i)-(i-1)-1); x(orphan(i)-(i-1)+1:end)];
++	z=[z(1:orphan(i)-(i-1)-1); z(orphan(i)-(i-1)+1:end)];
++	%update elements
++	pos=find(elements>orphan(i)-(i-1));
++	elements(pos)=elements(pos)-1;
++	%update segments
++	pos1=find(segments(:,1)>orphan(i)-(i-1));
++	pos2=find(segments(:,2)>orphan(i)-(i-1));
++	segments(pos1,1)=segments(pos1,1)-1;
++	segments(pos2,2)=segments(pos2,2)-1;
++end
++
++%plug into md
++md.mesh=mesh2dvertical;
++md.mesh.x=x;
++md.mesh.z=z;
++md.mesh.elements=elements;
++md.mesh.segments=segments;
++md.mesh.segmentmarkers=segmentmarkers;
++
++%Fill in rest of fields:
++md.mesh.numberofelements=length(md.mesh.elements);
++md.mesh.numberofvertices=length(md.mesh.x);
++md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
++
++%Now, build the connectivity tables for this mesh.
++md.mesh.vertexconnectivity=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices);
++md.mesh.elementconnectivity=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity);
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16323)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16324)
+@@ -315,31 +315,51 @@
+ %call Bamg
+ [bamgmesh_out bamggeom_out]=BamgMesher(bamg_mesh,bamg_geometry,bamg_options);
+ 
+-% plug results onto model
++if getfieldvalue(options,'vertical',0),
++	md.mesh=mesh2dvertical;
++	md.mesh.x=bamgmesh_out.Vertices(:,1);
++	md.mesh.z=bamgmesh_out.Vertices(:,2);
++	md.mesh.elements=bamgmesh_out.Triangles(:,1:3);
++	md.mesh.edges=bamgmesh_out.IssmEdges;
++	md.mesh.segments=bamgmesh_out.IssmSegments(:,1:3);
++	md.mesh.segmentmarkers=bamgmesh_out.IssmSegments(:,4);
++
++	%Fill in rest of fields:
++	md.mesh.numberofelements=size(md.mesh.elements,1);
++	md.mesh.numberofvertices=length(md.mesh.x);
++	md.mesh.numberofedges=size(md.mesh.edges,1);
++	md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
++
++	%Now, build the connectivity tables for this mesh.
++	md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
++else
++	% plug results onto model
++	md.mesh.x=bamgmesh_out.Vertices(:,1);
++	md.mesh.y=bamgmesh_out.Vertices(:,2);
++	md.mesh.elements=bamgmesh_out.Triangles(:,1:3);
++	md.mesh.edges=bamgmesh_out.IssmEdges;
++	md.mesh.segments=bamgmesh_out.IssmSegments(:,1:3);
++	md.mesh.segmentmarkers=bamgmesh_out.IssmSegments(:,4);
++
++	%Fill in rest of fields:
++	md.mesh.dimension=2;
++	md.mesh.numberofelements=size(md.mesh.elements,1);
++	md.mesh.numberofvertices=length(md.mesh.x);
++	md.mesh.numberofedges=size(md.mesh.edges,1);
++	md.mesh.z=zeros(md.mesh.numberofvertices,1);
++	md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
++	md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
++	md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
++	md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
++	md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
++end
+ md.private.bamg=struct();
+ md.private.bamg.mesh=bamgmesh(bamgmesh_out);
+ md.private.bamg.geometry=bamggeom(bamggeom_out);
+-md.mesh.x=bamgmesh_out.Vertices(:,1);
+-md.mesh.y=bamgmesh_out.Vertices(:,2);
+-md.mesh.elements=bamgmesh_out.Triangles(:,1:3);
+-md.mesh.edges=bamgmesh_out.IssmEdges;
+-md.mesh.segments=bamgmesh_out.IssmSegments(:,1:3);
+-md.mesh.segmentmarkers=bamgmesh_out.IssmSegments(:,4);
+-
+-%Fill in rest of fields:
+-md.mesh.dimension=2;
+-md.mesh.numberofelements=size(md.mesh.elements,1);
+-md.mesh.numberofvertices=length(md.mesh.x);
+-md.mesh.numberofedges=size(md.mesh.edges,1);
+-md.mesh.z=zeros(md.mesh.numberofvertices,1);
+-md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
+-md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+-md.mesh.elementonbed=ones(md.mesh.numberofelements,1);
+-md.mesh.elementonsurface=ones(md.mesh.numberofelements,1);
+-md.mesh.vertexonboundary=zeros(md.mesh.numberofvertices,1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
+ md.mesh.elementconnectivity=md.private.bamg.mesh.ElementConnectivity;
+ md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
+ 
++
+ %Check for orphan
+ if any(~ismember(1:md.mesh.numberofvertices,sort(unique(reshape(md.mesh.elements,3*md.mesh.numberofelements,1)))))
+ 	error('Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)');
Index: issm/oecreview/Archive/16133-16554/ISSM-16324-16325.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16324-16325.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16324-16325.diff	(revision 16556)
@@ -0,0 +1,299 @@
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 16324)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 16325)
+@@ -14,6 +14,12 @@
+ 	error(['plot error message: the number of elements is the same as the number of nodes...']);
+ end
+ 
++%special case for mesg 2dvertical
++if strcmp(meshtype(md.mesh),'2Dvertical'),
++	[x y z elements is2d isplanet] = processmesh(md.mesh,options);
++	return;
++end
++
+ if (isempty(data) | ~isstruct(data)),
+ 	%first load x,y, etc ... to speed up plot
+ 
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16324)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16325)
+@@ -48,7 +48,7 @@
+ if exist(options,'ztick'), set(gca,'ZTick',getfieldvalue(options,'ztick')); end
+ 
+ %view 
+-if md.mesh.dimension==3 & ~exist(options,'layer'),
++if strcmp(meshtype(md.mesh),'3D') & ~exist(options,'layer'),
+ 	view(getfieldvalue(options,'view',3));
+ else
+ 	view(getfieldvalue(options,'view',2));
+@@ -59,7 +59,7 @@
+ if exist(options,'axis')
+ 	eval(['axis ' getfieldvalue(options,'axis')]);
+ else
+-	if ((md.mesh.dimension==2) | exist(options,'layer')),
++	if strcmpi(meshtype(md.mesh),'2Dhorizontal') | exist(options,'layer'),
+ 		axis tight equal;
+ 	else
+ 		axis auto tight
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 16324)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 16325)
+@@ -16,6 +16,17 @@
+ 	error('plotmodel error message: data provided is empty');
+ end
+ 
++%Process NaN if any (do not know before mask is applied)
++if exist(options,'nan')
++	data(find(isnan(data)))=getfieldvalue(options,'nan',0);
++end
++
++%special case for mesg 2dvertical
++if strcmp(meshtype(md.mesh),'2Dvertical'),
++	[data datatype] = processdata(md.mesh,md,data,options);
++	return;
++end
++
+ %needed later on
+ if isprop(md.mesh,'numberofvertices2d'), 
+ 	numberofvertices2d=md.mesh.numberofvertices2d; 
+@@ -50,10 +61,6 @@
+ %get datasize
+ datasize=size(data);
+ 
+-%Process NaN if any (do not know before mask is applied)
+-if exist(options,'nan')
+-	data(find(isnan(data)))=getfieldvalue(options,'nan',0);
+-end
+ %non patch processing
+ if datatype~=4 & datatype~=5,
+ 
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16325)
+@@ -0,0 +1,222 @@
++%MESH2DVERTICAL class definition
++%
++%   Usage:
++%      mesh2dvertical=mesh2dvertical();
++
++classdef mesh2dvertical
++	properties (SetAccess=public) 
++		x                           = NaN;
++		z                           = NaN;
++		elements                    = NaN
++		numberofelements            = 0;
++		numberofvertices            = 0;
++		numberofedges               = 0;
++
++		lat                         = NaN
++		long                        = NaN
++		hemisphere                  = NaN
++
++		vertexonboundary            = NaN
++
++		edges                       = NaN
++		segments                    = NaN
++		segmentmarkers              = NaN
++		vertexconnectivity          = NaN
++		elementconnectivity         = NaN
++		average_vertex_connectivity = 0;
++
++		extractedvertices           = NaN
++		extractedelements           = NaN
++	end
++	methods
++		function obj = mesh2dvertical(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			%the connectivity is the averaged number of nodes linked to a
++			%given node through an edge. This connectivity is used to initially
++			%allocate memory to the stiffness matrix. A value of 16 seems to
++			%give a good memory/time ration. This value can be checked in
++			%trunk/test/Miscellaneous/runme.m
++			obj.average_vertex_connectivity=25;
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			md = checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mesh.z','NaN',1,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',1:md.mesh.numberofvertices);
++			md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements 3]);
++			if any(~ismember(1:md.mesh.numberofvertices,sort(unique(md.mesh.elements(:)))));
++				md = checkmessage(md,'orphan nodes have been found. Check the mesh outline');
++			end
++			md = checkfield(md,'mesh.numberofelements','>',0);
++			md = checkfield(md,'mesh.numberofvertices','>',0);
++			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
++
++			switch(solution),
++				case ThermalSolutionEnum(),
++					md = checkmessage(md,'thermal not supported for 2d mesh');
++			end
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   2d Mesh:')); 
++
++			disp(sprintf('\n      Elements and vertices:'));
++			fielddisplay(obj,'numberofelements','number of elements');
++			fielddisplay(obj,'numberofvertices','number of vertices');
++			fielddisplay(obj,'elements','vertex indices of the mesh elements');
++			fielddisplay(obj,'x','vertices x coordinate [m]');
++			fielddisplay(obj,'z','vertices z coordinate [m]');
++			fielddisplay(obj,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)');
++			fielddisplay(obj,'numberofedges','number of edges of the 2d mesh');
++
++			disp(sprintf('\n      Properties:'));
++			fielddisplay(obj,'vertexonboundary','vertices on the boundary of the domain flag list');
++			fielddisplay(obj,'segments','edges on domain boundary (vertex1 vertex2 element)');
++			fielddisplay(obj,'segmentmarkers','number associated to each segment');
++			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
++			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
++			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
++
++			disp(sprintf('\n      Extracted model:'));
++			fielddisplay(obj,'extractedvertices','vertices extracted from the model');
++			fielddisplay(obj,'extractedelements','elements extracted from the model');
++
++			disp(sprintf('\n      Projection:'));
++			fielddisplay(obj,'lat','vertices latitude [degrees]');
++			fielddisplay(obj,'long','vertices longitude [degrees]');
++			fielddisplay(obj,'hemisphere','Indicate hemisphere ''n'' or ''s'' ');
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
++			WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
++		end % }}}
++		function t = meshtype(obj) % {{{
++			t = '2Dvertical';
++		end % }}}
++		function [data datatype] = processdata(self,md,data,options) % {{{
++
++			%transpose data if necessary
++			if (size(data,2) > size(data,1)),
++				data=data';
++			end
++			datasize=size(data);
++
++			%convert to double if necessary
++			if ~isnumeric(data);
++				disp('processdata info message: data is not numeric (logical?). Converted to double');
++				data=double(data);
++			end
++
++			%check length
++			if datasize(1)~=md.mesh.numberofvertices & datasize(1)~=md.mesh.numberofelements
++				error('plotmodel error message: data not supported yet');
++			end
++
++			%quiver?
++			if datasize(2)>1,
++				datatype=3;
++
++				%check number of columns, add zeros if necessary,
++				if (md.mesh.dimension==3)
++					if datasize(2)==2,
++						data=[data, zeros(datasize(1),1)];
++					elseif datasize(2)~=3,
++						error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
++					end
++					%elseif ((md.mesh.dimension==2) & datasize(2)~=2),
++					%	error('plotmodel error message: data provided should have 2 columns for quiver plot, and 1 for regular plot');
++				end
++			end
++
++			%smoothing?
++			if exist(options,'smooth')
++				data=averaging(md,data,getfieldvalue(options,'smooth'));
++				datasize(1)=md.mesh.numberofvertices;
++				%---> go to node data
++			end
++
++			%element data
++			if (datasize(1)==md.mesh.numberofelements & datasize(2)==1),
++
++				%Initialize datatype if non patch
++				if datatype~=4 & datatype~=5,
++					datatype=1;
++				end
++
++				%Mask?
++				if exist(options,'mask'),
++					flags=getfieldvalue(options,'mask');
++					pos=find(~flags);
++					if length(flags)==md.mesh.numberofvertices,
++						[pos2 dummy]=find(ismember(md.mesh.elements,pos));
++						data(pos2,:)=NaN;
++					elseif length(flags)==md.mesh.numberofelements
++						data(pos,:)=NaN;
++					else
++						disp('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements');
++					end
++				end
++
++				%log?
++				if exist(options,'log'),
++					bounds=getfieldvalue(options,'caxis',[min(data(:)) max(data(:))]);
++					data(find(data<bounds(1)))=bounds(1);
++					if any(data<=0),
++						error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
++					end
++					pos=find(~isnan(data));
++					data(pos)=log(data(pos))/log(getfieldvalue(options,'log'));
++				end
++			end
++
++			%node data
++			if (datasize(1)==md.mesh.numberofvertices & datasize(2)==1),
++				datatype=2;
++
++				%Mask?
++				if exist(options,'mask'),
++					flags=getfieldvalue(options,'mask');
++					pos=find(~flags);
++					if length(flags)==md.mesh.numberofvertices,
++						data(pos,:)=NaN;
++					elseif length(flags)==md.mesh.numberofelements
++						data(md.mesh.elements(pos,:),:)=NaN;
++					else
++						disp('plotmodel warning: mask length not supported yet (supported length are md.mesh.numberofvertices and md.mesh.numberofelements');
++					end
++				end
++
++				%log?
++				if exist(options,'log'),
++					%if any(data<=0),
++					%	error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
++					%end
++					data=log(data)/log(getfieldvalue(options,'log'));
++				end
++			end
++		end % }}}
++		function [x y z elements is2d isplanet] = processmesh(self,options) % {{{
++
++			isplanet = 0;
++			is2d     = 1;
++
++			elements = self.elements;
++			x        = self.x;
++			y        = self.z;
++			z        = zeros(self.numberofvertices,1);
++		end % }}}
++	end
++end
Index: issm/oecreview/Archive/16133-16554/ISSM-16325-16326.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16325-16326.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16325-16326.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16326-16327.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16326-16327.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16326-16327.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16326)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16327)
+@@ -146,14 +146,13 @@
+ }
+ int IssmMonitor(TaoSolver tao, void *userCtx){
+ 
+-	int       i,its,num_responses;
+-	IssmDouble    f,gnorm,cnorm,xdiff;
+-	AppCtx   *user      = (AppCtx *)userCtx;
+-	FemModel *femmodel  = user->femmodel;
+-	int      *responses = NULL;
++	int         its,num_responses;
++	IssmDouble  f,gnorm,cnorm,xdiff;
++	AppCtx     *user      = (AppCtx *)userCtx;
++	FemModel   *femmodel  = user->femmodel;
++	int        *responses = NULL;
+ 
+-	femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	femmodel->parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++	femmodel->parameters->FindParam(&responses,&num_responses,InversionCostFunctionsEnum);
+ 
+ 	TaoGetSolutionStatus(tao, &its, &f, &gnorm, &cnorm, &xdiff, NULL);
+ 	if(its==0) _printf0_("Iter       Function      Residual  |  List of contributions\n");
+@@ -162,8 +161,8 @@
+ 	user->J[its]=f;
+ 
+ 	/*Retrieve objective functions independently*/
+-	for(i=0;i<num_responses;i++){
+-		femmodel->Responsex(&f,EnumToStringx(responses[i]),i);
++	for(int i=0;i<num_responses;i++){
++		femmodel->Responsex(&f,EnumToStringx(responses[i]));
+ 		_printf0_(" "<<setw(12)<<setprecision(7)<<f);
+ 	}
+ 	_printf0_("\n");
Index: issm/oecreview/Archive/16133-16554/ISSM-16327-16328.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16327-16328.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16327-16328.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16327)
++++ ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 16328)
+@@ -56,6 +56,31 @@
+ 			}
+ 			else _error_("At least one processor is required");
+ 			break;
++		case Mesh2DverticalEnum:
++			epart=xNew<int>(numberofelements);
++			npart=xNew<int>(numberofnodes);
++			index=xNew<int>(elements_width*numberofelements);
++			for (i=0;i<numberofelements;i++){
++				for (j=0;j<elements_width;j++){
++					*(index+elements_width*i+j)=(*(elements+elements_width*i+j))-1; //-1 for C indexing in Metis
++				}
++			}
++
++			/*Partition using Metis:*/
++			if (num_procs>1){
++#ifdef _HAVE_METIS_
++				METIS_PartMeshNodalPatch(&numberofelements,&numberofnodes, index, &etype, &numflag, &num_procs, &edgecut, epart, npart);
++#else
++				_error_("metis has not beed installed. Cannot run with more than 1 cpu");
++#endif
++			}
++			else if (num_procs==1){
++				/*METIS does not know how to deal with one cpu only!*/
++				for (i=0;i<numberofelements;i++) epart[i]=0;
++				for (i=0;i<numberofnodes;i++)    npart[i]=0;
++			}
++			else _error_("At least one processor is required");
++			break;
+ 		case Mesh3DEnum:
+ 			/*We have a 3d mesh, made of a regularly extruded 2d mesh. We first partition the 2d mesh, then we extrude the partition: */
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16328-16329.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16328-16329.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16328-16329.diff	(revision 16556)
@@ -0,0 +1,87 @@
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 16328)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 16329)
+@@ -18,11 +18,11 @@
+ 	int i,j;
+ 
+ 	/* required input: */
+-	int     dim;
+-	int     numberofelements;
+-	int     numberofvertices;
+-	int    *elements         = NULL;
+-	int     elements_width;
++	int  meshtype;
++	int  numberofelements;
++	int  numberofvertices;
++	int *elements         = NULL;
++	int  elements_width;
+ 
+ 	int numberofelements2d;
+ 	int numberofvertices2d;
+@@ -44,22 +44,33 @@
+ 	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshPartitionUsage);
+ 
+ 	/*Fetch data: */
+-	FetchData(&dim,mxGetAssignedField(MODEL,0,"dimension"));
+-	FetchData(&numberofelements,mxGetAssignedField(MODEL,0,"numberofelements"));
+-	FetchData(&numberofvertices,mxGetAssignedField(MODEL,0,"numberofvertices"));
+-	FetchData(&elements,NULL,&elements_width,mxGetAssignedField(MODEL,0,"elements"));
++	FetchData(&numberofelements,mxGetAssignedField(MESH,0,"numberofelements"));
++	FetchData(&numberofvertices,mxGetAssignedField(MESH,0,"numberofvertices"));
++	FetchData(&elements,NULL,&elements_width,mxGetAssignedField(MESH,0,"elements"));
+ 
+-	if (dim==3){
+-		FetchData(&numberofelements2d,mxGetAssignedField(MODEL,0,"numberofelements2d"));
+-		FetchData(&numberofvertices2d,mxGetAssignedField(MODEL,0,"numberofvertices2d"));
+-		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MODEL,0,"elements2d"));
++	if(strcmp(mxGetClassName(MESH),"mesh3d")==0){
++		meshtype = Mesh3DEnum;
++		FetchData(&numberofelements2d,mxGetAssignedField(MESH,0,"numberofelements2d"));
++		FetchData(&numberofvertices2d,mxGetAssignedField(MESH,0,"numberofvertices2d"));
++		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MESH,0,"elements2d"));
++		FetchData(&numberoflayers,mxGetAssignedField(MESH,0,"numberoflayers"));
+ 	}
+-	FetchData(&numberoflayers,mxGetAssignedField(MODEL,0,"numberoflayers"));
++	else if(strcmp(mxGetClassName(MESH),"mesh2dhorizontal")==0){
++		meshtype = Mesh2DhorizontalEnum;
++		numberoflayers=1;
++	}
++	else if(strcmp(mxGetClassName(MESH),"mesh2dvertical")==0){
++		meshtype = Mesh2DverticalEnum;
++		numberoflayers=1;
++	}
++	else{
++		_error_("Mesh type "<<mxGetClassName(MESH)<<" not supported yet");
++	}
+ 	FetchData(&numareas,NUMAREAS);
+ 
+ 	/*Run partitioning algorithm based on a "clever" use of the Metis partitioner: */
+ 	MeshPartitionx(&int_element_partitioning,&int_node_partitioning,numberofelements,numberofvertices,elements,
+-		numberofelements2d,numberofvertices2d,elements2d,numberoflayers,elements_width,dim,numareas);
++		numberofelements2d,numberofvertices2d,elements2d,numberoflayers,elements_width,meshtype,numareas);
+ 
+ 	/*Post process node_partitioning and element_partitioning to be in double format. Metis needed them in int* format: */
+ 	element_partitioning=xNew<double>(numberofelements);
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 16328)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 16329)
+@@ -26,7 +26,7 @@
+ 
+ #ifdef _HAVE_MATLAB_MODULES_
+ /* serial input macros: */
+-#define MODEL    prhs[0]
++#define MESH    prhs[0]
+ #define NUMAREAS prhs[1]
+ /* serial output macros: */
+ #define ELEMENTPARTITIONING (mxArray**)&plhs[0]
+@@ -35,7 +35,7 @@
+ 
+ #ifdef _HAVE_PYTHON_MODULES_
+ /* serial input macros: */
+-#define MODEL    PyTuple_GetItem(args,0)
++#define MESH     PyTuple_GetItem(args,0)
+ #define NUMAREAS PyTuple_GetItem(args,1)
+ /* serial output macros: */
+ #define ELEMENTPARTITIONING output,0
Index: issm/oecreview/Archive/16133-16554/ISSM-16329-16330.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16329-16330.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16329-16330.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16329)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16330)
+@@ -1594,7 +1594,7 @@
+ 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
+ 		for(i=0;i<num_responses;i++){
+ 			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_responses+i];
+-			datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
++			datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data(InversionCostFunctionsEnum)[i]));
+ 		}
+ 
+ 		/*Add datasetinput to element inputs*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16329)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16330)
+@@ -2282,7 +2282,7 @@
+ 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
+ 		for(i=0;i<num_responses;i++){
+ 			for(j=0;j<6;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_responses+i];
+-			datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),int(iomodel->Data(InversionCostFunctionsEnum)[i]));
++			datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data(InversionCostFunctionsEnum)[i]));
+ 		}
+ 
+ 		/*Add datasetinput to element inputs*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16330-16331.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16330-16331.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16330-16331.diff	(revision 16556)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/tmp332.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/tmp332.m	(revision 16330)
++++ ../trunk-jpl/test/NightlyRun/tmp332.m	(revision 16331)
+@@ -1,18 +0,0 @@
+-md=triangle(model(),'../Exp/Square.exp',50000.);
+-md=setmask(md,'','');
+-md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',2);
+-md.hydrology=(hydrologydc);
+-md.initialization.sediment_head=0.0*ones(md.mesh.numberofvertices,1);
+-md.hydrology.spcsediment_head=NaN*ones(md.mesh.numberofvertices,1);
+-pos=find(md.mesh.x==0);
+-md.hydrology.spcsediment_head(pos)=0.0;
+-md.basalforcings.melting_rate = 2.0*ones(md.mesh.numberofvertices,1);
+-md.timestepping.time_step=0;
+-md.timestepping.final_time=1.0;
+-md=solve(md,HydrologySolutionEnum());
+-
+-analitic=(md.mesh.x.^2-2*md.mesh.x*10^6)*(-2.0/(365*3600*24*2.0*md.hydrology.sediment_transmitivity));
+-plotmodel(md,'data',md.results.HydrologySolution.SedimentHead-analitic)
+-%plotmodel(md,'data',analitic)
+\ No newline at end of file
Index: issm/oecreview/Archive/16133-16554/ISSM-16331-16332.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16331-16332.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16331-16332.diff	(revision 16556)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16331)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16332)
+@@ -36,6 +36,7 @@
+ %   - geometricalmetric : take the geometry into account to generate the metric (default is 0)
+ %   - verbose :           level of verbosity (default is 1)
+ %
++%   - vertical :          is this a 2d vertical mesh (flowband, default is 0)
+ %   - rifts :             followed by an ARGUS file that prescribes the rifts
+ %   - toltip :            tolerance to move tip on an existing point of the domain outline
+ %   - tracks :            followed by an ARGUS file that prescribes the tracks that the mesh will stick to
+@@ -100,6 +101,9 @@
+ 		%update counter
+ 		count=count+nods;
+ 	end
++	if numel(getfieldvalue(options,'Markers',[]))==size(bamg_geometry.Edges,1),
++		bamg_geometry.Edges(:,3)=getfieldvalue(options,'Markers');
++	end
+ 
+ 	%take care of rifts
+ 	if exist(options,'rifts'),
+Index: ../trunk-jpl/src/m/classes/geometry.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/geometry.m	(revision 16331)
++++ ../trunk-jpl/src/m/classes/geometry.m	(revision 16332)
+@@ -25,6 +25,10 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
++			if strcmp(meshtype(md.mesh),'2Dvertical'),
++				return;
++			end
++
+ 			if (solution==TransientSolutionEnum() & md.transient.isgia) | (solution==GiaSolutionEnum()),
+ 				md = checkfield(md,'geometry.thickness','forcing',1,'NaN',1,'>=',0);
+ 			else
+@@ -50,6 +54,9 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
++			if strcmp(meshtype(md.mesh),'2Dvertical'),
++				return;
++			end
+ 			WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());
+ 			WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'forcinglength',md.mesh.numberofvertices+1);
+ 			WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16331)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16332)
+@@ -150,12 +150,8 @@
+ 
+ 			%element data
+ 			if (datasize(1)==md.mesh.numberofelements & datasize(2)==1),
++				datatype=1;
+ 
+-				%Initialize datatype if non patch
+-				if datatype~=4 & datatype~=5,
+-					datatype=1;
+-				end
+-
+ 				%Mask?
+ 				if exist(options,'mask'),
+ 					flags=getfieldvalue(options,'mask');
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16331)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16332)
+@@ -80,7 +80,7 @@
+ 
+ 			md = checkfield(md,'stressbalance.spcvx','forcing',1);
+ 			md = checkfield(md,'stressbalance.spcvy','forcing',1);
+-			if strcmp(meshtype(md.mesh),'3D'), md = checkfield(md,'stressbalance.spcvz','forcing',1); end
++			md = checkfield(md,'stressbalance.spcvz','forcing',1);
+ 			md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1);
+ 			md = checkfield(md,'stressbalance.reltol','size',[1 1]);
+ 			md = checkfield(md,'stressbalance.abstol','size',[1 1]);
+@@ -95,7 +95,7 @@
+ 			end
+ 
+ 			%singular solution
+-			if ~(any(~isnan(md.stressbalance.spcvx)) & any(~isnan(md.stressbalance.spcvy))),
++			if ~(any(~isnan(md.stressbalance.spcvx)) | any(~isnan(md.stressbalance.spcvy))),
+ 				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+ 			end
+ 			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
+Index: ../trunk-jpl/src/m/classes/flowequation.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.m	(revision 16331)
++++ ../trunk-jpl/src/m/classes/flowequation.m	(revision 16332)
+@@ -93,6 +93,9 @@
+ 				if strcmp(meshtype(md.mesh),'2Dhorizontal')
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[1:2]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[1:2]);
++				elseif strcmp(meshtype(md.mesh),'2Dvertical')
++					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[4]);
++					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[4]);
+ 				elseif strcmp(meshtype(md.mesh),'3D'),
+ 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]);
+ 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
Index: issm/oecreview/Archive/16133-16554/ISSM-16332-16333.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16332-16333.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16332-16333.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16332)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16333)
+@@ -97,7 +97,7 @@
+ 			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
+-			WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
++			WriteData(fid,'enum',MeshYEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
Index: issm/oecreview/Archive/16133-16554/ISSM-16333-16334.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16333-16334.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16333-16334.diff	(revision 16556)
@@ -0,0 +1,127 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16333)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16334)
+@@ -33,21 +33,30 @@
+ 	vertices  = new Vertices();
+ 	materials = new Materials();
+ 
+-	#ifdef _HAVE_3D_
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+-	#endif
++	/*Create elements*/
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+-
+-	/*Create elements*/
+-	for(i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-
+-			/*Create and add tria element to elements dataset: */
+-			if(iomodel->meshtype==Mesh2DhorizontalEnum) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
+-	        #ifdef _HAVE_3D_
+-			else       elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
+-	        #endif
+-		}
++	switch(iomodel->meshtype){
++		case Mesh2DhorizontalEnum:
++			materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum);
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
++			}
++			break;
++		case Mesh2DverticalEnum:
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,i,iomodel,nummodels));
++			}
++			break;
++		#ifdef _HAVE_3D_
++		case Mesh3DEnum:
++			iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
++			for(i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]) elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
++			}
++			break;
++		#endif
++		default:
++			_error_("Mesh not supported yet");
+ 	}
+ 
+ 	/*Create materials*/
+@@ -56,10 +65,18 @@
+ 			iomodel->FetchData(3,MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum);
+ 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
+ 			if(dakota_analysis){
+-				if(iomodel->meshtype==Mesh2DhorizontalEnum) materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum); 
+-           #ifdef _HAVE_3D_
+-				else       materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
+-           #endif
++				switch(iomodel->meshtype){
++					case Mesh2DhorizontalEnum:
++						materials->InputDuplicate(MaterialsRheologyBbarEnum,QmuMaterialsRheologyBEnum);
++						break;
++				   #ifdef _HAVE_3D_
++					case Mesh3DEnum:
++						materials->InputDuplicate(MaterialsRheologyBEnum,QmuMaterialsRheologyBEnum); 
++						break;
++				   #endif
++					default:
++						_error_("Mesh not supported yet");
++				}
+ 			}
+ 			break;
+ 		default:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16333)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16334)
+@@ -59,6 +59,12 @@
+ 			numberofvertices2d = 0;
+ 			numlayers          = 0;
+ 			break;
++		case Mesh2DverticalEnum:
++			elements_width=3;
++			numberofelements2d = 0;
++			numberofvertices2d = 0;
++			numlayers          = 0;
++			break;
+ 		case Mesh3DEnum:
+ 			elements_width=6; //penta elements
+ 			iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16333)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16334)
+@@ -843,8 +843,32 @@
+ 		}
+ 		#endif
+ 	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
+ 
+-	/*if 3d*/
++		/*Intermediaries*/
++		const int num_vertices = 3; //Tria has 3 vertices
++		IssmDouble    nodeinputs[num_vertices];
++		IssmDouble    cmmininputs[num_vertices];
++		IssmDouble    cmmaxinputs[num_vertices];
++
++		/*Get B*/
++		if (iomodel->Data(MaterialsRheologyBEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyBEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(MaterialsRheologyBEnum,nodeinputs,P1Enum));
++		}
++
++		/*Get n*/
++		if (iomodel->Data(MaterialsRheologyNEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(MaterialsRheologyNEnum)[index];
++			this->inputs->AddInput(new TriaInput(MaterialsRheologyNEnum,nodeinputs,P1Enum));
++		}
++
++		/*Get D:*/
++		if (iomodel->Data(DamageDEnum)) {
++			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
++			this->inputs->AddInput(new TriaInput(DamageDbarEnum,nodeinputs,P1Enum));
++		}
++	}
+ 	#ifdef _HAVE_3D_
+ 	else if(iomodel->meshtype==Mesh3DEnum){
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16334-16335.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16334-16335.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16334-16335.diff	(revision 16556)
@@ -0,0 +1,124 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16334)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16335)
+@@ -101,6 +101,11 @@
+ 		%update counter
+ 		count=count+nods;
+ 	end
++	if getfieldvalue(options,'vertical',0),
++		if numel(getfieldvalue(options,'Markers',[]))~=size(bamg_geometry.Edges,1),
++			error(['for 2d vertical mesh, ''Markers'' option is required, and should be of size ' num2str(size(bamg_geometry.Edges,1))]);
++		end
++	end
+ 	if numel(getfieldvalue(options,'Markers',[]))==size(bamg_geometry.Edges,1),
+ 		bamg_geometry.Edges(:,3)=getfieldvalue(options,'Markers');
+ 	end
+Index: ../trunk-jpl/src/m/classes/geometry.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/geometry.m	(revision 16334)
++++ ../trunk-jpl/src/m/classes/geometry.m	(revision 16335)
+@@ -25,10 +25,6 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-			if strcmp(meshtype(md.mesh),'2Dvertical'),
+-				return;
+-			end
+-
+ 			if (solution==TransientSolutionEnum() & md.transient.isgia) | (solution==GiaSolutionEnum()),
+ 				md = checkfield(md,'geometry.thickness','forcing',1,'NaN',1,'>=',0);
+ 			else
+@@ -54,9 +50,6 @@
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+-			if strcmp(meshtype(md.mesh),'2Dvertical'),
+-				return;
+-			end
+ 			WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());
+ 			WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'forcinglength',md.mesh.numberofvertices+1);
+ 			WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16334)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16335)
+@@ -17,6 +17,7 @@
+ 		hemisphere                  = NaN
+ 
+ 		vertexonboundary            = NaN
++		vertexonbed                 = NaN
+ 
+ 		edges                       = NaN
+ 		segments                    = NaN
+@@ -24,9 +25,6 @@
+ 		vertexconnectivity          = NaN
+ 		elementconnectivity         = NaN
+ 		average_vertex_connectivity = 0;
+-
+-		extractedvertices           = NaN
+-		extractedelements           = NaN
+ 	end
+ 	methods
+ 		function obj = mesh2dvertical(varargin) % {{{
+@@ -57,6 +55,7 @@
+ 			end
+ 			md = checkfield(md,'mesh.numberofelements','>',0);
+ 			md = checkfield(md,'mesh.numberofvertices','>',0);
++			md = checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
+ 
+ 			switch(solution),
+@@ -65,7 +64,7 @@
+ 			end
+ 		end % }}}
+ 		function disp(obj) % {{{
+-			disp(sprintf('   2d Mesh:')); 
++			disp(sprintf('   2d vertical Mesh:')); 
+ 
+ 			disp(sprintf('\n      Elements and vertices:'));
+ 			fielddisplay(obj,'numberofelements','number of elements');
+@@ -78,6 +77,7 @@
+ 
+ 			disp(sprintf('\n      Properties:'));
+ 			fielddisplay(obj,'vertexonboundary','vertices on the boundary of the domain flag list');
++			fielddisplay(obj,'vertexonbed','vertices on the bed of the domain flag list');
+ 			fielddisplay(obj,'segments','edges on domain boundary (vertex1 vertex2 element)');
+ 			fielddisplay(obj,'segmentmarkers','number associated to each segment');
+ 			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
+@@ -101,11 +101,17 @@
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
++			WriteData(fid,'object',obj,'class','mesh','fieldname','vertexonbed','format','BooleanMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 		end % }}}
+ 		function t = meshtype(obj) % {{{
+ 			t = '2Dvertical';
+ 		end % }}}
++		function flags = vertexflags(self,value) % {{{
++			flags = zeros(self.numberofvertices,1);
++			pos   = self.segments(find(self.segmentmarkers==value),1:2);
++			flags(pos) = 1;
++		end % }}}
+ 		function [data datatype] = processdata(self,md,data,options) % {{{
+ 
+ 			%transpose data if necessary
+@@ -128,17 +134,6 @@
+ 			%quiver?
+ 			if datasize(2)>1,
+ 				datatype=3;
+-
+-				%check number of columns, add zeros if necessary,
+-				if (md.mesh.dimension==3)
+-					if datasize(2)==2,
+-						data=[data, zeros(datasize(1),1)];
+-					elseif datasize(2)~=3,
+-						error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
+-					end
+-					%elseif ((md.mesh.dimension==2) & datasize(2)~=2),
+-					%	error('plotmodel error message: data provided should have 2 columns for quiver plot, and 1 for regular plot');
+-				end
+ 			end
+ 
+ 			%smoothing?
Index: issm/oecreview/Archive/16133-16554/ISSM-16335-16336.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16335-16336.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16335-16336.diff	(revision 16556)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16335)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16336)
+@@ -98,13 +98,7 @@
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+ 
+ 	for(i=0;i<iomodel->numberofvertices;i++){
+-
+-		/*vertices and nodes (same number, as we are running continuous galerkin formulation): */
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Add vertex to vertices dataset: */
+-			vertices->AddObject(new Vertex(i+1,i,i,iomodel));
+-		}
++		if(iomodel->my_vertices[i]) vertices->AddObject(new Vertex(i+1,i,i,iomodel));
+ 	}
+ 
+ 	/*Free data: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16335)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp	(revision 16336)
+@@ -34,13 +34,13 @@
+ 	/*Allocate ouput*/
+ 	connectivity=xNewZeroInit<int>(iomodel->numberofvertices);
+ 
+-	/*Get element width (3 or 6)*/
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+-		elementswidth=3;
++	/*Get element width*/
++	switch(iomodel->meshtype){
++		case Mesh2DhorizontalEnum: elementswidth=3; break;
++		case Mesh2DverticalEnum:   elementswidth=3; break;
++		case Mesh3DEnum:           elementswidth=6; break;
++		default:                   _error_("mesh not supported yet");
+ 	}
+-	else{
+-		elementswidth=6;
+-	}
+ 
+ 	/*Create connectivity table*/
+ 	for (i=0;i<iomodel->numberofelements;i++){
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16335)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 16336)
+@@ -49,8 +49,9 @@
+ 		case P1bubbleEnum:
+ 			switch(iomodel->meshtype){
+ 				case Mesh2DhorizontalEnum: elementnbv = 3; break;
++				case Mesh2DverticalEnum:   elementnbv = 3; break;
+ 				case Mesh3DEnum:           elementnbv = 6; break;
+-				default: _error_("3d is the only supported dimension");
++				default: _error_("mesh type not supported yet");
+ 			}
+ 			break;
+ 		case P1bubblecondensedEnum: 
+Index: ../trunk-jpl/src/c/classes/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16335)
++++ ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16336)
+@@ -44,14 +44,14 @@
+ void Vertex::Init(int vertex_id, int vertex_sid,IssmDouble vertex_x, IssmDouble vertex_y, IssmDouble vertex_z, IssmDouble vertex_sigma,int vertex_connectivity){
+ 
+ 	/*all the initialization has been done by the initializer, just fill in the id: */
+-	this->id=vertex_id;
+-	this->sid=vertex_sid;
+-	this->pid=UNDEF;
+-	this->x=vertex_x;
+-	this->y=vertex_y;
+-	this->z=vertex_z;
+-	this->sigma=vertex_sigma;
+-	this->connectivity=vertex_connectivity;
++	this->id           = vertex_id;
++	this->sid          = vertex_sid;
++	this->pid          = UNDEF;
++	this->x            = vertex_x;
++	this->y            = vertex_y;
++	this->z            = vertex_z;
++	this->sigma        = vertex_sigma;
++	this->connectivity = vertex_connectivity;
+ 
+ 	return;
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16336-16337.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16336-16337.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16336-16337.diff	(revision 16556)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16336)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16337)
+@@ -683,7 +683,6 @@
+ syn keyword cConstant MaterialsMantleShearModulusEnum
+ syn keyword cConstant MaterialsMantleDensityEnum
+ syn keyword cConstant MeshAverageVertexConnectivityEnum
+-syn keyword cConstant MeshDimensionEnum
+ syn keyword cConstant MeshElementonbedEnum
+ syn keyword cConstant MeshElementonsurfaceEnum
+ syn keyword cConstant MeshElements2dEnum
+@@ -700,6 +699,10 @@
+ syn keyword cConstant MeshXEnum
+ syn keyword cConstant MeshYEnum
+ syn keyword cConstant MeshZEnum
++syn keyword cConstant MeshTypeEnum
++syn keyword cConstant Mesh2DhorizontalEnum
++syn keyword cConstant Mesh2DverticalEnum
++syn keyword cConstant Mesh3DEnum
+ syn keyword cConstant MiscellaneousNameEnum
+ syn keyword cConstant MasstransportHydrostaticAdjustmentEnum
+ syn keyword cConstant MasstransportIsfreesurfaceEnum
+@@ -969,7 +972,6 @@
+ syn keyword cConstant ThicknessAbsGradientEnum
+ syn keyword cConstant ThicknessAlongGradientEnum
+ syn keyword cConstant ThicknessAcrossGradientEnum
+-syn keyword cConstant StepResponsesEnum
+ syn keyword cConstant IntMatParamEnum
+ syn keyword cConstant RheologyBbarAbsGradientEnum
+ syn keyword cConstant DragCoefficientAbsGradientEnum
+@@ -1077,6 +1079,7 @@
+ syn keyword cConstant BilinearInterpEnum
+ syn keyword cConstant NearestInterpEnum
+ syn keyword cConstant XYEnum
++syn keyword cConstant XZEnum
+ syn keyword cConstant XYZEnum
+ syn keyword cConstant DenseEnum
+ syn keyword cConstant MpiDenseEnum
Index: issm/oecreview/Archive/16133-16554/ISSM-16337-16338.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16337-16338.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16337-16338.diff	(revision 16556)
@@ -0,0 +1,124 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16337)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16338)
+@@ -610,6 +610,7 @@
+ 	/*}}}*/
+ 	/*Coordinate Systems{{{*/
+ 	XYEnum,
++	XZEnum,
+ 	XYZEnum,
+ 	/*}}}*/
+ 	/*Toolkits{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16337)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16338)
+@@ -586,6 +586,7 @@
+ 		case BilinearInterpEnum : return "BilinearInterp";
+ 		case NearestInterpEnum : return "NearestInterp";
+ 		case XYEnum : return "XY";
++		case XZEnum : return "XZ";
+ 		case XYZEnum : return "XYZ";
+ 		case DenseEnum : return "Dense";
+ 		case MpiDenseEnum : return "MpiDense";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16337)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16338)
+@@ -598,6 +598,7 @@
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
++	      else if (strcmp(name,"XZ")==0) return XZEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16337)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16338)
+@@ -919,6 +919,7 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
++			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -969,6 +970,7 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
++			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1018,6 +1020,7 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
++			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1066,6 +1069,7 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
++			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1105,6 +1109,7 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
++			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1141,6 +1146,15 @@
+ 				transform[(numdofs)*(counter+1) + counter+1] =   coord_system[0][0]/norm;
+ 				counter+=2;
+ 				break;
++			case XZEnum:
++				/*We remove the y component, we need to renormalize x and z: x=[x1 0 x2] y=[-x2 0 x1]*/
++				norm = sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[2][0]*coord_system[2][0]); _assert_(norm>1.e-4);
++				transform[(numdofs)*(counter+0) + counter+0] =   coord_system[0][0]/norm;
++				transform[(numdofs)*(counter+0) + counter+2] = - coord_system[2][0]/norm;
++				transform[(numdofs)*(counter+1) + counter+0] =   coord_system[2][0]/norm;
++				transform[(numdofs)*(counter+1) + counter+2] =   coord_system[0][0]/norm;
++				counter+=2;
++				break;
+ 			case XYZEnum:
+ 				/*The 3 coordinates are changed (x,y,z)*/
+ 				transform[(numdofs)*(counter+0) + counter+0] = coord_system[0][0];
+Index: ../trunk-jpl/src/m/enum/XZEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/XZEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/XZEnum.m	(revision 16338)
+@@ -0,0 +1,11 @@
++function macro=XZEnum()
++%XZENUM - Enum of XZ
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=XZEnum()
++
++macro=StringToEnum('XZ');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16337)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16338)
+@@ -578,6 +578,7 @@
+ def BilinearInterpEnum(): return StringToEnum("BilinearInterp")[0]
+ def NearestInterpEnum(): return StringToEnum("NearestInterp")[0]
+ def XYEnum(): return StringToEnum("XY")[0]
++def XZEnum(): return StringToEnum("XZ")[0]
+ def XYZEnum(): return StringToEnum("XYZ")[0]
+ def DenseEnum(): return StringToEnum("Dense")[0]
+ def MpiDenseEnum(): return StringToEnum("MpiDense")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16338-16339.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16338-16339.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16338-16339.diff	(revision 16556)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/m/shp/shpwrite.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpwrite.m	(revision 0)
++++ ../trunk-jpl/src/m/shp/shpwrite.m	(revision 16339)
+@@ -0,0 +1,26 @@
++function shpwrite(shp,filename)
++%SHPWRITE - write a shape file from a contour structure
++%
++%   Usage:
++%      shpwrite(shp,filename)
++%
++%   Example:
++%      shpwrite(shp,'domainoutline.shp')
++%
++%   See also SHPREAD
++
++
++%initialize number of profile
++count=0;
++
++
++contours=struct([]);
++for i=1:length(shp),
++	contours(i).Geometry='Polygon';
++	contours(i).id=i;
++	contours(i).X=shp(i).x;
++	contours(i).Y=shp(i).y;
++end
++	
++shapewrite(contours,filename);
++end
+Index: ../trunk-jpl/src/m/shp/shpread.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpread.m	(revision 16338)
++++ ../trunk-jpl/src/m/shp/shpread.m	(revision 16339)
+@@ -39,7 +39,11 @@
+ 		Struct(end).nods=length(x);
+ 		Struct(end).density=1;
+ 		Struct(end).closed=1;
+-		Struct(end).name=num2str(shp(i).id);
++		if isfield(shp,'id'),
++			Struct(end).name=num2str(shp(i).id);
++		else
++			Struct(end).name='';
++		end
+ 	end
+ end
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16339-16340.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16339-16340.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16339-16340.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/shp/shpread.m
+===================================================================
+--- ../trunk-jpl/src/m/shp/shpread.m	(revision 16339)
++++ ../trunk-jpl/src/m/shp/shpread.m	(revision 16340)
+@@ -28,6 +28,7 @@
+ shp=shaperead(filename);
+ 
+ Struct=struct([]);
++fields=fieldnames(shp);
+ for i=1:length(shp),
+ 	if strcmpi(shp(i).Geometry,'Polygon'),
+ 		x=shp(i).X'; y=shp(i).Y';
+@@ -44,6 +45,12 @@
+ 		else
+ 			Struct(end).name='';
+ 		end
++		for j=1:length(fields),
++			field=fields{j};
++			if ~(strcmpi(field,'X') | strcmpi(field,'Y') | strcmpi(field,'id')),
++				Struct(end).(field)=shp(i).(field);
++			end
++		end
+ 	end
+ end
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16340-16341.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16340-16341.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16340-16341.diff	(revision 16556)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/m/mech/robintemperature.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/robintemperature.m	(revision 16340)
++++ ../trunk-jpl/src/m/mech/robintemperature.m	(revision 16341)
+@@ -20,7 +20,7 @@
+ %	Returns a vector the same length as z containing the temperature in K
+ %
+ %	Usage:
+-%		tprofile=robintemperature(heatflux,accumrate,thickness,surftemp)
++%		tprofile=robintemperature(heatflux,accumrate,thickness,surftemp,z)
+ 
+ %checks
+ if nargin~=5
+@@ -36,7 +36,7 @@
+ %create vertical coordinate variable
+ zstar=sqrt(2*alphaT*thickness/accumrate);
+ 
+-tprofile=surftemp+sqrt(2*thickness*pi/accumrate/alphaT)*heatflux/2/rho/c*(erf(z/zstar)-erf(thickness/zstar));
++tprofile=surftemp+sqrt(2*thickness*pi/accumrate/alphaT)*(-heatflux)/2/rho/c*(erf(z/zstar)-erf(thickness/zstar));
+ 
+-% difference between surface and base temperautre for check (Cuffey2010 p412):
++% difference between surface and base temperature for check (Cuffey2010 p412):
+ % tprofile-surftemp
Index: issm/oecreview/Archive/16133-16554/ISSM-16341-16342.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16341-16342.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16341-16342.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/mech/robintemperature.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/robintemperature.m	(revision 16341)
++++ ../trunk-jpl/src/m/mech/robintemperature.m	(revision 16342)
+@@ -36,7 +36,7 @@
+ %create vertical coordinate variable
+ zstar=sqrt(2*alphaT*thickness/accumrate);
+ 
+-tprofile=surftemp+sqrt(2*thickness*pi/accumrate/alphaT)*(-heatflux)/2/rho/c*(erf(z/zstar)-erf(thickness/zstar));
++tprofile=surftemp+sqrt(2*thickness*pi/accumrate/alphaT)*(-heatflux)/2/rho/c.*(erf(z./zstar)-erf(thickness./zstar));
+ 
+ % difference between surface and base temperature for check (Cuffey2010 p412):
+ % tprofile-surftemp
Index: issm/oecreview/Archive/16133-16554/ISSM-16342-16343.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16342-16343.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16342-16343.diff	(revision 16556)
@@ -0,0 +1,1305 @@
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16343)
+@@ -46,7 +46,7 @@
+ 
+ 	/*Compute slopes: */
+ 	if(isSIA) surfaceslope_core(femmodel);
+-	if(isFS){
++	if(isFS && meshtype==Mesh3DEnum){
+ 		bedslope_core(femmodel);
+ 		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+ 		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16342)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16343)
+@@ -402,6 +402,8 @@
+ 	SpcTransientEnum,
+ 	StringArrayParamEnum,
+ 	StringParamEnum,
++	SegEnum,
++	SegInputEnum,
+ 	TriaEnum,
+ 	TriaInputEnum,
+ 	VertexEnum,
+@@ -610,7 +612,6 @@
+ 	/*}}}*/
+ 	/*Coordinate Systems{{{*/
+ 	XYEnum,
+-	XZEnum,
+ 	XYZEnum,
+ 	/*}}}*/
+ 	/*Toolkits{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16343)
+@@ -402,6 +402,8 @@
+ 		case SpcTransientEnum : return "SpcTransient";
+ 		case StringArrayParamEnum : return "StringArrayParam";
+ 		case StringParamEnum : return "StringParam";
++		case SegEnum : return "Seg";
++		case SegInputEnum : return "SegInput";
+ 		case TriaEnum : return "Tria";
+ 		case TriaInputEnum : return "TriaInput";
+ 		case VertexEnum : return "Vertex";
+@@ -586,7 +588,6 @@
+ 		case BilinearInterpEnum : return "BilinearInterp";
+ 		case NearestInterpEnum : return "NearestInterp";
+ 		case XYEnum : return "XY";
+-		case XZEnum : return "XZ";
+ 		case XYZEnum : return "XYZ";
+ 		case DenseEnum : return "Dense";
+ 		case MpiDenseEnum : return "MpiDense";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16343)
+@@ -411,6 +411,8 @@
+ 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
+ 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+ 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
++	      else if (strcmp(name,"Seg")==0) return SegEnum;
++	      else if (strcmp(name,"SegInput")==0) return SegInputEnum;
+ 	      else if (strcmp(name,"Tria")==0) return TriaEnum;
+ 	      else if (strcmp(name,"TriaInput")==0) return TriaInputEnum;
+ 	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+-	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+-	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
++	      if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
++	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+ 	      else if (strcmp(name,"GiadWdt")==0) return GiadWdtEnum;
+ 	      else if (strcmp(name,"GiaW")==0) return GiaWEnum;
+@@ -598,7 +600,6 @@
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+-	      else if (strcmp(name,"XZ")==0) return XZEnum;
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16343)
+@@ -157,6 +157,6 @@
+ void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
+ 
+ /*Distribution of dofs: */
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type);
++void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16343)
+@@ -19,8 +19,8 @@
+ 	/*Recover pointer: */
+ 	Constraints* constraints=*pconstraints;
+ 
+-	/*return if 2d mesh*/
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
+ 
+ 	/*Fetch data: */
+ 	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16343)
+@@ -10,8 +10,8 @@
+ 
+ void	CreateNodesStressbalanceVertical(Nodes** pnodes, IoModel* iomodel){
+ 
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
+ 
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ 	CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16343)
+@@ -10,8 +10,8 @@
+ 
+ void	UpdateElementsStressbalanceVertical(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
+ 
+ 	/*Update elements: */
+ 	int counter=0;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16343)
+@@ -87,17 +87,22 @@
+ 			_error_("model not supported yet");
+ 		}
+ 
+-		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+-		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+-
+ 		if(isFS){
+ 
+ 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+ 			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+ 			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+ 			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+ 			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
++			if(iomodel->meshtype==Mesh3DEnum){
++				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
++			}
++			else if (iomodel->meshtype==Mesh2DverticalEnum){
++				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvyEnum);
++			}
++			else{
++				_error_("not supported yet");
++			}
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+ 				if(iomodel->my_vertices[i]){
+ 					if(nodeonbed[i]>0. && groundedice_ls[i]>0. && nodeonFS[i]>0.){
+@@ -110,8 +115,20 @@
+ 					}
+ 				}
+ 			}
+-			IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,3);
+-			iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++			if(iomodel->meshtype==Mesh3DEnum){
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
++				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,3);
++				iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++			}
++			else if (iomodel->meshtype==Mesh2DverticalEnum){
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
++				iomodel->DeleteData(spcvz,StressbalanceSpcvyEnum);
++			}
++			else{
++				_error_("not supported yet");
++			}
+ 			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+ 			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+ 			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+@@ -150,6 +167,10 @@
+ 			iomodel->DeleteData(surface,SurfaceEnum);
+ 			iomodel->DeleteData(z,MeshZEnum);
+ 		}
++		else{
++			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
++		}
+ 
+ 		*pconstraints=constraints;
+ 		return;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16343)
+@@ -111,11 +111,11 @@
+ 		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
+ 		iomodel->FetchDataToInput(elements,VzEnum,0.);
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+-		if(isFS){
+-			iomodel->FetchDataToInput(elements,PressureEnum,0.);
+-			if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+-		}
+ 	}
++	if(isFS){
++		iomodel->FetchDataToInput(elements,PressureEnum,0.);
++		if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
++	}
+ 
+ 	#ifdef _HAVE_ANDROID_
+ 	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16343)
+@@ -5,7 +5,7 @@
+ #include "../../shared/shared.h"
+ #include "../../classes/classes.h"
+ 
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type){
++void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type){
+ 
+ 	/*For now, we distribute by analysis_type, later, we will distribute using the analysis_type,
+ 	 * but also the node_type: */
+@@ -30,13 +30,29 @@
+ 					numdofs=2;
+ 					break;
+ 				case FSvelocityEnum:
+-					numdofs=3;
++					if(mesh_type==Mesh3DEnum){
++						numdofs=3;
++					}
++					else if(mesh_type==Mesh2DverticalEnum){
++						numdofs=2;
++					}
++					else{
++						_error_("mesh type not supported yet");
++					}
+ 					break;
+ 				case FSpressureEnum:
+ 					numdofs=1;
+ 					break;
+ 				case NoneApproximationEnum:
+-					numdofs=4;
++					if(mesh_type==Mesh3DEnum){
++						numdofs=4;
++					}
++					else if(mesh_type==Mesh2DverticalEnum){
++						numdofs=3;
++					}
++					else{
++						_error_("mesh type not supported yet");
++					}
+ 					break;
+ 				case SSAHOApproximationEnum:
+ 					numdofs=4;
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16342)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16343)
+@@ -77,6 +77,10 @@
+ 					./classes/Elements/Elements.cpp\
+ 					./classes/Elements/ElementHook.h\
+ 					./classes/Elements/ElementHook.cpp\
++					./classes/Elements/Seg.h\
++					./classes/Elements/Seg.cpp\
++					./classes/Elements/SegRef.h\
++					./classes/Elements/SegRef.cpp\
+ 					./classes/Elements/Tria.h\
+ 					./classes/Elements/Tria.cpp\
+ 					./classes/Elements/TriaRef.h\
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16342)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16343)
+@@ -38,6 +38,8 @@
+ #include "./Elements/Element.h"
+ #include "./Elements/Penta.h"
+ #include "./Elements/PentaRef.h"
++#include "./Elements/Seg.h"
++#include "./Elements/SegRef.h"
+ #include "./Elements/Tria.h"
+ #include "./Elements/TriaRef.h"
+ #include "./Elements/ElementHook.h"
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16343)
+@@ -832,6 +832,55 @@
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetDofListVelocity{{{*/
++void  Tria::GetDofListVelocity(int** pdoflist,int setenum){
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodesVelocity();
++
++	/*First, figure out size of doflist and create it: */
++	int numberofdofs=0;
++	for(int i=0;i<numnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSvelocityEnum,setenum);
++
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
++
++	/*Populate: */
++	int count=0;
++	for(int i=0;i<numnodes;i++){
++		nodes[i]->GetDofList(doflist+count,FSvelocityEnum,setenum);
++		count+=nodes[i]->GetNumberOfDofs(FSvelocityEnum,setenum);
++	}
++
++	/*Assign output pointers:*/
++	*pdoflist=doflist;
++}
++/*}}}*/
++/*FUNCTION Tria::GetDofListPressure{{{*/
++void  Tria::GetDofListPressure(int** pdoflist,int setenum){
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++
++	/*First, figure out size of doflist and create it: */
++	int numberofdofs=0;
++	for(int i=vnumnodes;i<vnumnodes+pnumnodes;i++) numberofdofs+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++
++	/*Allocate output*/
++	int* doflist=xNew<int>(numberofdofs);
++
++	/*Populate: */
++	int count=0;
++	for(int i=vnumnodes;i<vnumnodes+pnumnodes;i++){
++		nodes[i]->GetDofList(doflist+count,FSApproximationEnum,setenum);
++		count+=nodes[i]->GetNumberOfDofs(FSApproximationEnum,setenum);
++	}
++
++	/*Assign output pointers:*/
++	*pdoflist=doflist;
++}
++/*}}}*/
+ /*FUNCTION Tria::GetElementType {{{*/
+ int Tria::GetElementType(){
+ 
+@@ -1303,7 +1352,17 @@
+ 	switch(analysis_type){
+ 	#ifdef _HAVE_STRESSBALANCE_
+ 	case StressbalanceAnalysisEnum:
+-		GetSolutionFromInputsStressbalanceHoriz(solution);
++		int approximation;
++		inputs->GetInputValue(&approximation,ApproximationEnum);
++		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
++			GetSolutionFromInputsStressbalanceFS(solution);
++		}
++		else if (approximation==SSAApproximationEnum){
++			GetSolutionFromInputsStressbalanceHoriz(solution);
++		}
++		else{
++			_error_("approximation not supported yet");
++		}
+ 		break;
+ 	case StressbalanceSIAAnalysisEnum:
+ 		GetSolutionFromInputsStressbalanceSIA(solution);
+@@ -1532,6 +1591,12 @@
+ 		tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+ 	}
+ 
++	/*Need to know the type of approximation for this element*/
++	if(iomodel->Data(FlowequationElementEquationEnum)){
++		this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->Data(FlowequationElementEquationEnum)[index]));
++	}
++
++
+ 	/*Control Inputs*/
+ 	#ifdef _HAVE_CONTROL_
+ 	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+@@ -1949,6 +2014,7 @@
+ 				name==SurfaceAreaEnum||
+ 				name==VxEnum ||
+ 				name==VyEnum ||
++				name==PressureEnum ||
+ 				name==InversionVxObsEnum ||
+ 				name==InversionVyObsEnum ||
+ 				name==FrictionCoefficientEnum ||
+@@ -2458,6 +2524,43 @@
+ 			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
+ 			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
+ 			break;
++		case P1P1Enum: case P1P1GLSEnum:
++			numnodes        = 6;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+0];
++			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+1];
++			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elements[3*index+2];
++			break;
++		case MINIEnum: case MINIcondensedEnum:
++			numnodes       = 7;
++			tria_node_ids  = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
++
++			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+0];
++			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+1];
++			tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[3*index+2];
++			break;
++		case TaylorHoodEnum:
++			numnodes        = 9;
++			tria_node_ids   = xNew<int>(numnodes);
++			tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0];
++			tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1];
++			tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2];
++			tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1;
++			tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1;
++			tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1;
++
++			tria_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+0];
++			tria_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+1];
++			tria_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+2];
++			break;
+ 		default:
+ 			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
+ 	}
+@@ -3387,6 +3490,61 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetSolutionFromInputsStressbalanceFS{{{*/
++void  Tria::GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution){
++
++	int*         vdoflist=NULL;
++	int*         pdoflist=NULL;
++	IssmDouble   vx,vy,p;
++	IssmDouble   FSreconditioning;
++	GaussTria   *gauss;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF2;
++	int pnumdof   = pnumnodes*NDOF1;
++
++	/*Initialize values*/
++	IssmDouble* vvalues = xNew<IssmDouble>(vnumdof);
++	IssmDouble* pvalues = xNew<IssmDouble>(pnumdof);
++
++	/*Get dof list: */
++	GetDofListVelocity(&vdoflist,GsetEnum);
++	GetDofListPressure(&pdoflist,GsetEnum);
++	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
++	Input* p_input =inputs->GetInput(PressureEnum); _assert_(p_input);
++
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
++
++	/*Ok, we have vx vy vz in values, fill in vx vy vz arrays: */
++	gauss = new GaussTria();
++	for(int i=0;i<vnumnodes;i++){
++		gauss->GaussNode(this->VelocityInterpolation(),i);
++		vx_input->GetInputValue(&vx,gauss);
++		vy_input->GetInputValue(&vy,gauss);
++		vvalues[i*NDOF2+0]=vx;
++		vvalues[i*NDOF2+1]=vy;
++	}
++	for(int i=0;i<pnumnodes;i++){
++		gauss->GaussNode(this->PressureInterpolation(),i);
++		p_input->GetInputValue(&p ,gauss);
++		pvalues[i]=p/FSreconditioning;
++	}
++
++	/*Add value to global vector*/
++	solution->SetValues(vnumdof,vdoflist,vvalues,INS_VAL);
++	solution->SetValues(pnumdof,pdoflist,pvalues,INS_VAL);
++
++	/*Free ressources:*/
++	delete gauss;
++	xDelete<int>(pdoflist);
++	xDelete<int>(vdoflist);
++	xDelete<IssmDouble>(pvalues);
++	xDelete<IssmDouble>(vvalues);
++}
++/*}}}*/
+ /*FUNCTION Tria::GetSolutionFromInputsStressbalanceHoriz{{{*/
+ void  Tria::GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16343)
+@@ -44,5 +44,9 @@
+ 		void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
+ 
+ 		int  NumberofNodes(void);
++		int  NumberofNodesVelocity(void);
++		int  NumberofNodesPressure(void);
++		int  VelocityInterpolation(void);
++		int  PressureInterpolation(void);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16343)
+@@ -204,6 +204,8 @@
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+ 		int            GetElementType(void);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
++		void	         GetDofListVelocity(int** pdoflist,int setenum);
++		void	         GetDofListPressure(int** pdoflist,int setenum);
+ 		void	         GetVertexPidList(int* doflist);
+ 		void           GetVertexSidList(int* sidlist);
+ 		void           GetConnectivityList(int* connectivity);
+@@ -235,6 +237,7 @@
+ 		ElementVector* CreatePVectorStressbalanceSSAFront(void);
+ 		ElementVector* CreatePVectorStressbalanceSIA(void);
+ 		ElementMatrix* CreateJacobianStressbalanceSSA(void);
++		void	  GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution);
+ 		void	  GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution);
+ 		void	  GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution);
+ 		void	  InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solution);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16343)
+@@ -2241,38 +2241,9 @@
+ 	}
+ 	#endif
+ 
+-	//Need to know the type of approximation for this element
++	/*Need to know the type of approximation for this element*/
+ 	if(iomodel->Data(FlowequationElementEquationEnum)){
+-		if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,HOApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAHOApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAHOApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SIAApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,SIAApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==L1L2ApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,L1L2ApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==FSApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,FSApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SSAFSApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,SSAFSApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOFSApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,HOFSApproximationEnum));
+-		}
+-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==NoneApproximationEnum){
+-			this->inputs->AddInput(new IntInput(ApproximationEnum,NoneApproximationEnum));
+-		}
+-		else{
+-			_error_("Approximation type " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(FlowequationElementEquationEnum)[index])) << " not supported yet");
+-		}
++		this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->Data(FlowequationElementEquationEnum)[index]));
+ 	}
+ 
+ 	/*DatasetInputs*/
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16343)
+@@ -0,0 +1,50 @@
++/*!\file SegRef.c
++ * \brief: implementation of the SegRef object
++ */
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../classes.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++/*Element macros*/
++#define NUMNODESP1  2
++
++/*Object constructors and destructor*/
++/*FUNCTION SegRef::SegRef(){{{*/
++SegRef::SegRef(){
++	this->element_type_list=NULL;
++}
++/*}}}*/
++/*FUNCTION SegRef::SegRef(int* types,int nummodels){{{*/
++SegRef::SegRef(const int nummodels){
++
++	/*Only allocate pointer*/
++	element_type_list=xNew<int>(nummodels);
++
++}
++/*}}}*/
++/*FUNCTION SegRef::~SegRef(){{{*/
++SegRef::~SegRef(){
++	xDelete<int>(element_type_list);
++}
++/*}}}*/
++
++/*Management*/
++/*FUNCTION SegRef::SetElementType{{{*/
++void SegRef::SetElementType(int type,int type_counter){
++
++	/*initialize element type*/
++	this->element_type_list[type_counter]=type;
++}
++/*}}}*/
++
++/*Reference Element numerics*/
++
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16343)
+@@ -0,0 +1,140 @@
++/*!\file Seg.cpp
++ * \brief: implementation of the Segment object
++ */
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "../classes.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++/*Element macros*/
++#define NUMVERTICES 2
++/*Constructors/destructor/copy*/
++/*FUNCTION Seg::Seg(){{{*/
++Seg::Seg(){
++	this->nodes      = NULL;
++	this->vertices   = NULL;
++	this->material   = NULL;
++	this->matpar     = NULL;
++	this->inputs     = NULL;
++	this->parameters = NULL;
++	this->results    = NULL;
++}
++/*}}}*/
++/*FUNCTION Seg::Seg(int id, int sid,int index, IoModel* iomodel,int nummodels){{{*/
++Seg::Seg(int seg_id, int seg_sid, int index, IoModel* iomodel,int nummodels)
++		:SegRef(nummodels),ElementHook(nummodels,index+1,2,iomodel){
++
++			/*id: */
++			this->id  = seg_id;
++			this->sid = seg_sid;
++
++			//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
++			this->parameters = NULL;
++
++			/*intialize inputs and results: */
++			this->inputs  = new Inputs();
++			this->results = new Results();
++
++			/*initialize pointers:*/
++			this->nodes    = NULL;
++			this->vertices = NULL;
++			this->material = NULL;
++			this->matpar   = NULL;
++
++		}
++/*}}}*/
++/*FUNCTION Seg::~Seg(){{{*/
++Seg::~Seg(){
++	delete inputs;
++	delete results;
++	this->parameters=NULL;
++}
++/*}}}*/
++/*FUNCTION Seg::copy {{{*/
++Object* Seg::copy() {
++	_error_("not implemented yet");
++}
++/*}}}*/
++
++/*FUNCTION Seg::Echo{{{*/
++void Seg::Echo(void){
++	_printf_("Seg:\n");
++	_printf_("   id: " << id << "\n");
++	if(nodes){
++		nodes[0]->Echo();
++		nodes[1]->Echo();
++	}
++	else _printf_("nodes = NULL\n");
++
++	if (material) material->Echo();
++	else _printf_("material = NULL\n");
++
++	if (matpar) matpar->Echo();
++	else _printf_("matpar = NULL\n");
++
++	_printf_("   parameters\n");
++	if (parameters) parameters->Echo();
++	else _printf_("parameters = NULL\n");
++
++	_printf_("   inputs\n");
++	if (inputs) inputs->Echo();
++	else _printf_("inputs=NULL\n");
++
++	if (results) results->Echo();
++	else _printf_("results=NULL\n");
++}
++/*}}}*/
++/*FUNCTION Seg::DeepEcho{{{*/
++void Seg::DeepEcho(void){
++
++	_printf_("Seg:\n");
++	_printf_("   id: " << id << "\n");
++	if(nodes){
++		nodes[0]->DeepEcho();
++		nodes[1]->DeepEcho();
++	}
++	else _printf_("nodes = NULL\n");
++
++	if (material) material->DeepEcho();
++	else _printf_("material = NULL\n");
++
++	if (matpar) matpar->DeepEcho();
++	else _printf_("matpar = NULL\n");
++
++	_printf_("   parameters\n");
++	if (parameters) parameters->DeepEcho();
++	else _printf_("parameters = NULL\n");
++
++	_printf_("   inputs\n");
++	if (inputs) inputs->DeepEcho();
++	else _printf_("inputs=NULL\n");
++
++	if (results) results->DeepEcho();
++	else _printf_("results=NULL\n");
++
++	return;
++}
++/*}}}*/
++/*FUNCTION Seg::ObjectEnum{{{*/
++int Seg::ObjectEnum(void){
++
++	return SegEnum;
++
++}
++/*}}}*/
++/*FUNCTION Seg::Id {{{*/
++int    Seg::Id(){
++
++	return id;
++
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16343)
+@@ -0,0 +1,25 @@
++
++/*!\file:  SegRef.h
++ * \brief abstract class for handling Seg oriented routines, like nodal functions, 
++ * strain rate generation, etc ...
++ */ 
++
++#ifndef _SEGREF_H_
++#define _SEGREF_H_
++
++class GaussSeg;
++
++class SegRef{
++
++	public: 
++		int* element_type_list;
++		int  element_type;
++
++		SegRef();
++		SegRef(const int nummodels);
++		~SegRef();
++
++		/*Management*/
++		void SetElementType(int type,int type_counter);
++};
++#endif
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16343)
+@@ -0,0 +1,176 @@
++/*! \file Seg.h 
++ *  \brief: header file for seg object
++ */
++
++#ifndef _SEG_H_
++#define _SEG_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Element.h"
++#include "./ElementHook.h"
++#include "./SegRef.h"
++class Parameters;
++class Inputs;
++class IoModel;
++class Results;
++class Node;
++class Material;
++class Matpar;
++class ElementMatrix;
++class ElementVector;
++class Vertex;
++
++#include "../../shared/Exceptions/exceptions.h"
++#include "../../shared/Enum/Enum.h"
++/*}}}*/
++
++class Seg: public Element,public ElementHook,public SegRef{
++
++	public:
++
++		int          id;
++		int          sid;
++
++		Node       **nodes;                       // nodes
++		Vertex     **vertices;                    // 3 vertices
++		Material    *material;                    // 1 material ice
++		Matpar      *matpar;                      // 1 material parameter
++
++		Parameters  *parameters;                  //pointer to solution parameters
++		Inputs      *inputs;
++		Results     *results;
++
++		/*Seg constructors, destructors {{{*/
++		Seg();
++		Seg(int seg_id,int seg_sid,int i, IoModel* iomodel,int nummodels);
++		~Seg();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
++		/*}}}*/
++		/*Update virtual functions resolution: {{{*/
++		void  InputUpdateFromSolution(IssmDouble* solutiong){_error_("not implemented yet");};
++		void  InputUpdateFromVector(IssmDouble* vector, int name, int type){_error_("not implemented yet");};
++#ifdef _HAVE_DAKOTA_
++		void  InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){_error_("not implemented yet");};
++		void  InputUpdateFromMatrixDakota(IssmDouble* matrix, int nows, int ncols, int name, int type){_error_("not implemented yet");};
++#endif
++		void  InputUpdateFromConstant(IssmDouble constant, int name){_error_("not implemented yet");};
++		void  InputUpdateFromConstant(int constant, int name){_error_("not implemented yet");};
++		void  InputUpdateFromConstant(bool constant, int name){_error_("not implemented yet");};
++		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
++		/*}}}*/
++		/*Element virtual functions definitions: {{{*/
++		void        ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");};
++		void        ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
++		void        ComputeStressTensor(){_error_("not implemented yet");};
++		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
++		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
++		void        SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){_error_("not implemented yet");};
++		void        CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){_error_("not implemented yet");};
++		void        CreateDVector(Vector<IssmDouble>* df){_error_("not implemented yet");};
++		void        CreatePVector(Vector<IssmDouble>* pf){_error_("not implemented yet");};
++		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("not implemented yet");};
++		void        Delta18oParameterization(void){_error_("not implemented yet");};
++		int         GetNodeIndex(Node* node){_error_("not implemented yet");};
++		void        GetNodesSidList(int* sidlist){_error_("not implemented yet");};
++		void        GetNodesLidList(int* lidlist){_error_("not implemented yet");};
++		int         GetNumberOfNodes(void){_error_("not implemented yet");};
++		int         Sid(){_error_("not implemented yet");};
++		bool        IsOnBed(){_error_("not implemented yet");};
++		bool        IsFloating(){_error_("not implemented yet");};
++		bool        IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");};
++		bool        NoIceInElement(){_error_("not implemented yet");};
++		void        GetSolutionFromInputs(Vector<IssmDouble>* solution){_error_("not implemented yet");};
++		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
++		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp){_error_("not implemented yet");};
++		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){_error_("not implemented yet");};
++		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum){_error_("not implemented yet");};
++		void        InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
++		void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
++		void        InputToResult(int enum_type,int step,IssmDouble time){_error_("not implemented yet");};
++		void        DeleteResults(void){_error_("not implemented yet");};
++		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
++		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum){_error_("not implemented yet");};
++		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){_error_("not implemented yet");};
++		void        RequestedOutput(int output_enum,int step,IssmDouble time){_error_("not implemented yet");};
++		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results){_error_("not implemented yet");};
++		void        PatchFill(int* pcount, Patch* patch){_error_("not implemented yet");};
++		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){_error_("not implemented yet");};
++		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
++		void	      SmbGradients(){_error_("not implemented yet");};
++		IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
++		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
++		IssmDouble  TimeAdapt(){_error_("not implemented yet");};
++
++#ifdef _HAVE_RESPONSES_
++		void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){_error_("not implemented yet");};
++		IssmDouble IceVolume(void){_error_("not implemented yet");};
++		IssmDouble IceVolumeAboveFloatation(void){_error_("not implemented yet");};
++		IssmDouble TotalSmb(void){_error_("not implemented yet");};
++		void       MinVel(IssmDouble* pminvel){_error_("not implemented yet");};
++		void       MinVx(IssmDouble* pminvx){_error_("not implemented yet");};
++		void       MinVy(IssmDouble* pminvy){_error_("not implemented yet");};
++		void       MinVz(IssmDouble* pminvz){_error_("not implemented yet");};
++		IssmDouble MassFlux(IssmDouble* segment){_error_("not implemented yet");};
++		void       MaxAbsVx(IssmDouble* pmaxabsvx){_error_("not implemented yet");};
++		void       MaxAbsVy(IssmDouble* pmaxabsvy){_error_("not implemented yet");};
++		void       MaxAbsVz(IssmDouble* pmaxabsvz){_error_("not implemented yet");};
++		void       ElementResponse(IssmDouble* presponse,int response_enum){_error_("not implemented yet");};
++		void       MaxVel(IssmDouble* pmaxvel){_error_("not implemented yet");};
++		void       MaxVx(IssmDouble* pmaxvx){_error_("not implemented yet");};
++		void       MaxVy(IssmDouble* pmaxvy){_error_("not implemented yet");};
++		void       MaxVz(IssmDouble* pmaxvz){_error_("not implemented yet");};
++#endif
++
++#ifdef _HAVE_GIA_
++		void   GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y){_error_("not implemented yet");};
++#endif
++
++#ifdef _HAVE_CONTROL_
++		IssmDouble DragCoefficientAbsGradient(void){_error_("not implemented yet");};
++		void       GradientIndexing(int* indexing,int control_index){_error_("not implemented yet");};
++		void       Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index){_error_("not implemented yet");};
++		void       GradjBGradient(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDGradient(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjBSSA(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDSSA(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDragSSA(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDragFS(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDragGradient(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GradjThicknessBalancethicknessSoft(Vector<IssmDouble>* gradient,int control_index){_error_("not implemented yet");};
++		void       GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data){_error_("not implemented yet");};
++		void       SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){_error_("not implemented yet");};
++		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index){_error_("not implemented yet");};
++		void       ControlInputScaleGradient(int enum_type,IssmDouble scale){_error_("not implemented yet");};
++		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
++		IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
++		IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
++		IssmDouble SurfaceAbsVelMisfit(void){_error_("not implemented yet");};
++		IssmDouble ThicknessAbsGradient(void){_error_("not implemented yet");};
++		IssmDouble ThicknessAlongGradient(void){_error_("not implemented yet");};
++		IssmDouble ThicknessAcrossGradient(void){_error_("not implemented yet");};
++		IssmDouble BalancethicknessMisfit(void){_error_("not implemented yet");};
++		IssmDouble SurfaceRelVelMisfit(void){_error_("not implemented yet");};
++		IssmDouble SurfaceLogVelMisfit(void){_error_("not implemented yet");};
++		IssmDouble SurfaceLogVxVyMisfit(void){_error_("not implemented yet");};
++		IssmDouble SurfaceAverageVelMisfit(void){_error_("not implemented yet");};
++		void       InputControlUpdate(IssmDouble scalar,bool save_parameter){_error_("not implemented yet");};
++#endif
++
++#ifdef _HAVE_GROUNDINGLINE_
++		void   PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding){_error_("not implemented yet");};
++		void   MigrateGroundingLine(IssmDouble* sheet_ungrounding){_error_("not implemented yet");};
++		int    UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf){_error_("not implemented yet");};
++#endif
++		/*}}}*/
++};
++#endif  /* _SEG_H */
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16343)
+@@ -43,8 +43,6 @@
+ /*FUNCTION TriaRef::SetElementType{{{*/
+ void TriaRef::SetElementType(int type,int type_counter){
+ 
+-	_assert_(type==P1Enum || type==P1DGEnum || type==P1bubbleEnum || type==P1bubblecondensedEnum || type==P2Enum);
+-
+ 	/*initialize element type*/
+ 	this->element_type_list[type_counter]=type;
+ }
+@@ -652,9 +650,74 @@
+ 		case P1bubbleEnum:          return NUMNODESP1b;
+ 		case P1bubblecondensedEnum: return NUMNODESP1b;
+ 		case P2Enum:                return NUMNODESP2;
++		case P1P1Enum:              return NUMNODESP1*2;
++		case P1P1GLSEnum:           return NUMNODESP1*2;
++		case MINIcondensedEnum:     return NUMNODESP1b+NUMNODESP1;
++		case MINIEnum:              return NUMNODESP1b+NUMNODESP1;
++		case TaylorHoodEnum:        return NUMNODESP2+NUMNODESP1;
+ 		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
+ 
+ 	return -1;
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::NumberofNodesPressure{{{*/
++int TriaRef::NumberofNodesPressure(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return NUMNODESP1;
++		case P1P1GLSEnum:       return NUMNODESP1;
++		case MINIcondensedEnum: return NUMNODESP1;
++		case MINIEnum:          return NUMNODESP1;
++		case TaylorHoodEnum:    return NUMNODESP1;
++		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
++/*FUNCTION TriaRef::NumberofNodesVelocity{{{*/
++int TriaRef::NumberofNodesVelocity(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return NUMNODESP1;
++		case P1P1GLSEnum:       return NUMNODESP1;
++		case MINIcondensedEnum: return NUMNODESP1b;
++		case MINIEnum:          return NUMNODESP1b;
++		case TaylorHoodEnum:    return NUMNODESP2;
++		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
++/*FUNCTION TriaRef::VelocityInterpolation{{{*/
++int TriaRef::VelocityInterpolation(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return P1Enum;
++		case P1P1GLSEnum:       return P1Enum;
++		case MINIcondensedEnum: return P1bubbleEnum;
++		case MINIEnum:          return P1bubbleEnum;
++		case TaylorHoodEnum:    return P2Enum;
++		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
++/*FUNCTION TriaRef::PressureInterpolation{{{*/
++int TriaRef::PressureInterpolation(void){
++
++	switch(this->element_type){
++		case P1P1Enum:          return P1Enum;
++		case P1P1GLSEnum:       return P1Enum;
++		case MINIcondensedEnum: return P1Enum;
++		case MINIEnum:          return P1Enum;
++		case TaylorHoodEnum:    return P1Enum;
++		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16342)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16343)
+@@ -38,7 +38,7 @@
+ 
+ 	/*indexing:*/
+ 	this->indexingupdate = true;
+-	DistributeNumDofs(&this->indexing,analysis_type,in_approximation); //number of dofs per node
++	DistributeNumDofs(&this->indexing,analysis_type,in_approximation,iomodel->meshtype); //number of dofs per node
+ 
+ 	if(analysis_type==StressbalanceAnalysisEnum)
+ 	 this->approximation=in_approximation;
+@@ -919,7 +919,6 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
+-			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -970,7 +969,6 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
+-			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1020,7 +1018,6 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
+-			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1069,7 +1066,6 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
+-			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1109,7 +1105,6 @@
+ 		switch(cs_array[i]){
+ 			case PressureEnum: numdofs+=1; break;
+ 			case XYEnum:       numdofs+=2; break;
+-			case XZEnum:       numdofs+=2; break;
+ 			case XYZEnum:      numdofs+=3; break;
+ 			default: _error_("Coordinate system " << EnumToStringx(cs_array[i]) << " not supported yet");
+ 		}
+@@ -1146,15 +1141,6 @@
+ 				transform[(numdofs)*(counter+1) + counter+1] =   coord_system[0][0]/norm;
+ 				counter+=2;
+ 				break;
+-			case XZEnum:
+-				/*We remove the y component, we need to renormalize x and z: x=[x1 0 x2] y=[-x2 0 x1]*/
+-				norm = sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[2][0]*coord_system[2][0]); _assert_(norm>1.e-4);
+-				transform[(numdofs)*(counter+0) + counter+0] =   coord_system[0][0]/norm;
+-				transform[(numdofs)*(counter+0) + counter+2] = - coord_system[2][0]/norm;
+-				transform[(numdofs)*(counter+1) + counter+0] =   coord_system[2][0]/norm;
+-				transform[(numdofs)*(counter+1) + counter+2] =   coord_system[0][0]/norm;
+-				counter+=2;
+-				break;
+ 			case XYZEnum:
+ 				/*The 3 coordinates are changed (x,y,z)*/
+ 				transform[(numdofs)*(counter+0) + counter+0] = coord_system[0][0];
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16342)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16343)
+@@ -327,7 +327,7 @@
+ if getfieldvalue(options,'vertical',0),
+ 	md.mesh=mesh2dvertical;
+ 	md.mesh.x=bamgmesh_out.Vertices(:,1);
+-	md.mesh.z=bamgmesh_out.Vertices(:,2);
++	md.mesh.y=bamgmesh_out.Vertices(:,2);
+ 	md.mesh.elements=bamgmesh_out.Triangles(:,1:3);
+ 	md.mesh.edges=bamgmesh_out.IssmEdges;
+ 	md.mesh.segments=bamgmesh_out.IssmSegments(:,1:3);
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16342)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16343)
+@@ -6,7 +6,7 @@
+ classdef mesh2dvertical
+ 	properties (SetAccess=public) 
+ 		x                           = NaN;
+-		z                           = NaN;
++		y                           = NaN;
+ 		elements                    = NaN
+ 		numberofelements            = 0;
+ 		numberofvertices            = 0;
+@@ -47,7 +47,7 @@
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			md = checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]);
+-			md = checkfield(md,'mesh.z','NaN',1,'size',[md.mesh.numberofvertices 1]);
++			md = checkfield(md,'mesh.y','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 			md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',1:md.mesh.numberofvertices);
+ 			md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements 3]);
+ 			if any(~ismember(1:md.mesh.numberofvertices,sort(unique(md.mesh.elements(:)))));
+@@ -71,7 +71,7 @@
+ 			fielddisplay(obj,'numberofvertices','number of vertices');
+ 			fielddisplay(obj,'elements','vertex indices of the mesh elements');
+ 			fielddisplay(obj,'x','vertices x coordinate [m]');
+-			fielddisplay(obj,'z','vertices z coordinate [m]');
++			fielddisplay(obj,'y','vertices y coordinate [m]');
+ 			fielddisplay(obj,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)');
+ 			fielddisplay(obj,'numberofedges','number of edges of the 2d mesh');
+ 
+@@ -84,10 +84,6 @@
+ 			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
+ 			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
+ 
+-			disp(sprintf('\n      Extracted model:'));
+-			fielddisplay(obj,'extractedvertices','vertices extracted from the model');
+-			fielddisplay(obj,'extractedelements','elements extracted from the model');
+-
+ 			disp(sprintf('\n      Projection:'));
+ 			fielddisplay(obj,'lat','vertices latitude [degrees]');
+ 			fielddisplay(obj,'long','vertices longitude [degrees]');
+@@ -96,8 +92,8 @@
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
+-			WriteData(fid,'enum',MeshYEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
++			WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
+@@ -206,7 +202,7 @@
+ 
+ 			elements = self.elements;
+ 			x        = self.x;
+-			y        = self.z;
++			y        = self.y;
+ 			z        = zeros(self.numberofvertices,1);
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/enum/XZEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/XZEnum.m	(revision 16342)
++++ ../trunk-jpl/src/m/enum/XZEnum.m	(revision 16343)
+@@ -1,11 +0,0 @@
+-function macro=XZEnum()
+-%XZENUM - Enum of XZ
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=XZEnum()
+-
+-macro=StringToEnum('XZ');
+Index: ../trunk-jpl/src/m/enum/SegInputEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SegInputEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SegInputEnum.m	(revision 16343)
+@@ -0,0 +1,11 @@
++function macro=SegInputEnum()
++%SEGINPUTENUM - Enum of SegInput
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SegInputEnum()
++
++macro=StringToEnum('SegInput');
+Index: ../trunk-jpl/src/m/enum/SegEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SegEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SegEnum.m	(revision 16343)
+@@ -0,0 +1,11 @@
++function macro=SegEnum()
++%SEGENUM - Enum of Seg
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=SegEnum()
++
++macro=StringToEnum('Seg');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16342)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16343)
+@@ -394,6 +394,8 @@
+ def SpcTransientEnum(): return StringToEnum("SpcTransient")[0]
+ def StringArrayParamEnum(): return StringToEnum("StringArrayParam")[0]
+ def StringParamEnum(): return StringToEnum("StringParam")[0]
++def SegEnum(): return StringToEnum("Seg")[0]
++def SegInputEnum(): return StringToEnum("SegInput")[0]
+ def TriaEnum(): return StringToEnum("Tria")[0]
+ def TriaInputEnum(): return StringToEnum("TriaInput")[0]
+ def VertexEnum(): return StringToEnum("Vertex")[0]
+@@ -578,7 +580,6 @@
+ def BilinearInterpEnum(): return StringToEnum("BilinearInterp")[0]
+ def NearestInterpEnum(): return StringToEnum("NearestInterp")[0]
+ def XYEnum(): return StringToEnum("XY")[0]
+-def XZEnum(): return StringToEnum("XZ")[0]
+ def XYZEnum(): return StringToEnum("XYZ")[0]
+ def DenseEnum(): return StringToEnum("Dense")[0]
+ def MpiDenseEnum(): return StringToEnum("MpiDense")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16343-16344.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16343-16344.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16343-16344.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16343)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16344)
+@@ -182,6 +182,7 @@
+ 			md.stressbalance.referential=project2d(md,md.stressbalance.referential,md.mesh.numberoflayers);
+ 			md.stressbalance.loadingforce=project2d(md,md.stressbalance.loadingforce,md.mesh.numberoflayers);
+ 			md.masstransport.spcthickness=project2d(md,md.masstransport.spcthickness,md.mesh.numberoflayers);
++			md.damage.spcdamage=project2d(md,md.damage.spcdamage,md.mesh.numberoflayers)
+ 			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+ 			%materials
Index: issm/oecreview/Archive/16133-16554/ISSM-16344-16345.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16344-16345.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16344-16345.diff	(revision 16556)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16344)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16345)
+@@ -73,10 +73,10 @@
+ 	case 290, name='SquareShelfStressFSP2P1';
+ 	case 301, name='SquareSheetConstrainedStressSSA2d';
+ 	case 302, name='SquareSheetConstrainedStressSIA2d';
+-	case 303, name='SquareSheetConstrainedStressHSSA2d';
++	case 303, name='SquareSheetConstrainedStressSIASSA2d';
+ 	case 304, name='SquareSheetConstrainedStressSSA3d';
+ 	case 305, name='SquareSheetConstrainedStressSIA3d';
+-	case 306, name='SquareSheetConstrainedStressHSSA3d';
++	case 306, name='SquareSheetConstrainedStressSIASSA3d';
+ 	case 307, name='SquareSheetConstrainedStressHO';
+ 	case 308, name='SquareSheetConstrainedStressFS';
+ 	case 309, name='SquareSheetConstrainedMasstransp2d';
+Index: ../trunk-jpl/test/NightlyRun/IdToName.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16344)
++++ ../trunk-jpl/test/NightlyRun/IdToName.py	(revision 16345)
+@@ -76,10 +76,10 @@
+ 	290  : 'SquareShelfStressFSP2P1',
+ 	301  : 'SquareSheetConstrainedStressSSA2d',
+ 	302  : 'SquareSheetConstrainedStressSIA2d',
+-	303  : 'SquareSheetConstrainedStressHSSA2d',
++	303  : 'SquareSheetConstrainedStressSIASSA2d',
+ 	304  : 'SquareSheetConstrainedStressSSA3d',
+ 	305  : 'SquareSheetConstrainedStressSIA3d',
+-	306  : 'SquareSheetConstrainedStressHSSA3d',
++	306  : 'SquareSheetConstrainedStressSIASSA3d',
+ 	307  : 'SquareSheetConstrainedStressHO',
+ 	308  : 'SquareSheetConstrainedStressFS',
+ 	309  : 'SquareSheetConstrainedMasstransp2d',
Index: issm/oecreview/Archive/16133-16554/ISSM-16345-16346.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16345-16346.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16345-16346.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16345)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16346)
+@@ -1357,7 +1357,7 @@
+ 		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+ 			GetSolutionFromInputsStressbalanceFS(solution);
+ 		}
+-		else if (approximation==SSAApproximationEnum){
++		else if (approximation==SSAApproximationEnum || approximation==SIAApproximationEnum){
+ 			GetSolutionFromInputsStressbalanceHoriz(solution);
+ 		}
+ 		else{
Index: issm/oecreview/Archive/16133-16554/ISSM-16346-16347.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16346-16347.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16346-16347.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16346)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16347)
+@@ -1593,7 +1593,7 @@
+ 
+ 	/*Need to know the type of approximation for this element*/
+ 	if(iomodel->Data(FlowequationElementEquationEnum)){
+-		this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->Data(FlowequationElementEquationEnum)[index]));
++		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[index])));
+ 	}
+ 
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16346)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16347)
+@@ -2243,7 +2243,7 @@
+ 
+ 	/*Need to know the type of approximation for this element*/
+ 	if(iomodel->Data(FlowequationElementEquationEnum)){
+-		this->inputs->AddInput(new IntInput(ApproximationEnum,iomodel->Data(FlowequationElementEquationEnum)[index]));
++		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[index])));
+ 	}
+ 
+ 	/*DatasetInputs*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16347-16348.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16347-16348.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16347-16348.diff	(revision 16556)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/test/NightlyRun/test331.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test331.m	(revision 16347)
++++ ../trunk-jpl/test/NightlyRun/test331.m	(revision 16348)
+@@ -5,7 +5,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.watercolumn=10^-3*ones(md.mesh.numberofvertices,1);
+ md.hydrology.spcwatercolumn=NaN*ones(md.mesh.numberofvertices,1);
+-pos=find(md.mesh.y==0);
++pos=find(md.mesh.y==0 | md.mesh.x==0);
+ md.hydrology.spcwatercolumn(pos)=2*10^-3;
+ md=solve(md,HydrologySolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test331.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test331.py	(revision 16347)
++++ ../trunk-jpl/test/NightlyRun/test331.py	(revision 16348)
+@@ -16,7 +16,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.watercolumn=1e-3*numpy.ones((md.mesh.numberofvertices,1))
+ md.hydrology.spcwatercolumn=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+-pos=numpy.nonzero(md.mesh.y==0)[0]
++pos=numpy.nonzero(numpy.logical_or(md.mesh.y==0.,md.mesh.x==0.))[0]
+ md.hydrology.spcwatercolumn[pos]=2e-3
+ md=solve(md,HydrologySolutionEnum())
+ 
+Index: ../trunk-jpl/test/Archives/Archive331.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16348-16349.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16348-16349.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16348-16349.diff	(revision 16556)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/plot/plot_contour.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_contour.m	(revision 16348)
++++ ../trunk-jpl/src/m/plot/plot_contour.m	(revision 16349)
+@@ -227,9 +227,9 @@
+ 		else
+ 			dist = 5000;
+ 			if (max(xc)-min(xc)+max(yc)-min(yc))<dist, continue; end
+-			h=patch('Xdata',[xc;NaN],'Ydata',[yc;NaN],'facecolor','none','edgecolor',map(i,:),'linewidth',linewidth);
++			h=patch('Xdata',[xc;NaN],'Ydata',[yc;NaN],'facecolor','none','edgecolor',color,'linewidth',linewidth);
+ 			c = horzcat([level, xc'; length(xc), yc']);
+-			clabel(c,h,'FontSize',10,'labelspacing',20000,'color',map(i,:));
++			clabel(c,h,'FontSize',10,'labelspacing',20000,'color',color);
+ 			hold on
+ 		end
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16349-16350.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16349-16350.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16349-16350.diff	(revision 16556)
@@ -0,0 +1,1014 @@
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16350)
+@@ -291,6 +291,72 @@
+ 	*pviscosity=viscosity;
+ }
+ /*}}}*/
++/*FUNCTION Matice::GetViscosity2dvertical {{{*/
++void  Matice::GetViscosity2dvertical(IssmDouble* pviscosity, IssmDouble* epsilon){
++	/*From a string tensor and a material object, return viscosity, using Glen's flow law.
++									   (1-D) B
++	  viscosity= --------------------------------------
++						  2[ exx^2+eyy^2+ 2exy^2]^[(n-1)/2n]
++
++	  where viscosity is the viscotiy, B the flow law parameter , (u,v) the velocity 
++	  vector, and n the flow law exponent.
++
++	  If epsilon is NULL, it means this is the first time SystemMatrices is being run, and we 
++	  return 10^14, initial viscosity.
++	  */
++
++	/*output: */
++	IssmDouble viscosity;
++
++	/*input strain rate: */
++	IssmDouble exx,eyy,exy;
++
++	/*Intermediary: */
++	IssmDouble A,e;
++	IssmDouble B,D,n;
++
++	/*Get B and n*/
++	B=GetB();
++	n=GetN();
++	D=GetD();
++
++	if (n==1){
++		/*Viscous behaviour! viscosity=B: */
++		viscosity=(1-D)*B/2;
++	}
++	else{
++		if((epsilon[0]==0) && (epsilon[1]==0) && (epsilon[2]==0)){
++			viscosity=0.5*pow(10.,14);
++		}
++		else{
++			/*Retrive strain rate components: */
++			exx=epsilon[0];
++			eyy=epsilon[1];
++			exy=epsilon[2];
++
++			/*Build viscosity: viscosity=B/(2*A^e) */
++			A=exx*exx+eyy*eyy+2.*exy*exy;
++			if(A==0.){
++				/*Maxiviscositym viscosity for 0 shear areas: */
++				viscosity=2.5*2.e+17;
++			}
++			else{
++				e=(n-1.)/(2.*n);
++				viscosity=(1.-D)*B/(2.*pow(A,e));
++			}
++		}
++	}
++
++	/*Checks in debugging mode*/
++	if(viscosity<=0) _error_("Negative viscosity");
++	_assert_(B>0);
++	_assert_(n>0);
++	_assert_(D>=0 && D<1);
++
++	/*Return: */
++	*pviscosity=viscosity;
++}
++/*}}}*/
+ /*FUNCTION Matice::GetViscosity3d {{{*/
+ void  Matice::GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+ 
+@@ -792,10 +858,10 @@
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 
+ 		/*Intermediaries*/
+-		const int num_vertices = 3; //Tria has 3 vertices
+-		IssmDouble    nodeinputs[num_vertices];
+-		IssmDouble    cmmininputs[num_vertices];
+-		IssmDouble    cmmaxinputs[num_vertices];
++		const int  num_vertices = 3; //Tria has 3 vertices
++		IssmDouble nodeinputs[num_vertices];
++		IssmDouble cmmininputs[num_vertices];
++		IssmDouble cmmaxinputs[num_vertices];
+ 
+ 		/*Get B*/
+ 		if (iomodel->Data(MaterialsRheologyBEnum)) {
+@@ -866,7 +932,7 @@
+ 		/*Get D:*/
+ 		if (iomodel->Data(DamageDEnum)) {
+ 			for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->Data(DamageDEnum)[iomodel->elements[num_vertices*index+i]-1];
+-			this->inputs->AddInput(new TriaInput(DamageDbarEnum,nodeinputs,P1Enum));
++			this->inputs->AddInput(new TriaInput(DamageDEnum,nodeinputs,P1Enum));
+ 		}
+ 	}
+ 	#ifdef _HAVE_3D_
+Index: ../trunk-jpl/src/c/classes/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Materials/Material.h	(revision 16350)
+@@ -26,6 +26,7 @@
+ 		virtual void       Configure(Elements* elements)=0;
+ 		virtual void       GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum)=0;
+ 		virtual void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon)=0;
++		virtual void       GetViscosity2dvertical(IssmDouble* pviscosity, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon)=0;
+ 		virtual void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon)=0;
+ 		virtual void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon)=0;
+Index: ../trunk-jpl/src/c/classes/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16350)
+@@ -53,6 +53,7 @@
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum);
+ 		void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
++		void       GetViscosity2dvertical(IssmDouble* pviscosity, IssmDouble* pepsilon);
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
+ 		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16350)
+@@ -79,10 +79,11 @@
+ 		void   InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
+ 		/*}}}*/
+ 		/*Material virtual functions resolution: {{{*/
+-		void   InputDuplicate(int original_enum,int new_enum);
+-		void   Configure(Elements* elements);
+-		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){return;}
++		void       InputDuplicate(int original_enum,int new_enum);
++		void       Configure(Elements* elements);
++		void       GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){return;}
+ 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon){_error_("not supported");};
++		void       GetViscosity2dvertical(IssmDouble* pviscosity, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon){_error_("not supported");};
+ 		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){_error_("not supported");};
+ 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon){_error_("not supported");};
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16350)
+@@ -19,7 +19,9 @@
+ /*}}}*/
+ 
+ /*Element macros*/
+-#define NUMVERTICES 3
++#define NUMVERTICES   3
++#define NUMVERTICES1D 2
++
+ /*Constructors/destructor/copy*/
+ /*FUNCTION Tria::Tria(){{{*/
+ Tria::Tria(){
+@@ -218,7 +220,18 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_STRESSBALANCE_
+ 		case StressbalanceAnalysisEnum:
+-			return CreateKMatrixStressbalanceSSA();
++			int approximation;
++			inputs->GetInputValue(&approximation,ApproximationEnum);
++			switch(approximation){
++				case SSAApproximationEnum:
++					return CreateKMatrixStressbalanceSSA();
++				case FSApproximationEnum:
++					return CreateKMatrixStressbalanceFS();
++				case NoneApproximationEnum:
++					return NULL;
++				default:
++					_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
++			}
+ 			break;
+ 		case StressbalanceSIAAnalysisEnum:
+ 			return CreateKMatrixStressbalanceSIA();
+@@ -372,7 +385,18 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_STRESSBALANCE_
+ 		case StressbalanceAnalysisEnum:
+-			return CreatePVectorStressbalanceSSA();
++			int approximation;
++			inputs->GetInputValue(&approximation,ApproximationEnum);
++			switch(approximation){
++				case SSAApproximationEnum:
++					return CreatePVectorStressbalanceSSA();
++				case FSApproximationEnum:
++					return CreatePVectorStressbalanceFS();
++				case NoneApproximationEnum:
++					return NULL;
++				default:
++					_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
++			}
+ 			break;
+ 		case StressbalanceSIAAnalysisEnum:
+ 			return CreatePVectorStressbalanceSIA();
+@@ -1678,7 +1702,17 @@
+ 	switch(analysis_type){
+ 		#ifdef _HAVE_STRESSBALANCE_
+ 		case StressbalanceAnalysisEnum:
+-			InputUpdateFromSolutionStressbalanceHoriz(solution);
++			int approximation;
++			inputs->GetInputValue(&approximation,ApproximationEnum);
++			if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
++				InputUpdateFromSolutionStressbalanceFS(solution);
++			}
++			else if (approximation==SSAApproximationEnum || approximation==SIAApproximationEnum){
++				InputUpdateFromSolutionStressbalanceHoriz(solution);
++			}
++			else{
++				_error_("approximation not supported yet");
++			}
+ 			break;
+ 		case StressbalanceSIAAnalysisEnum:
+ 			InputUpdateFromSolutionStressbalanceHoriz(solution);
+@@ -2055,6 +2089,50 @@
+ 	return onbed;
+ }
+ /*}}}*/
++/*FUNCTION Tria::HasEdgeOnBed {{{*/
++bool Tria::HasEdgeOnBed(){
++
++	IssmDouble values[NUMVERTICES];
++	IssmDouble sum;
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonbedEnum);
++	sum = values[0]+values[1]+values[2];
++
++	_assert_(sum==0. || sum==1. || sum==2.);
++
++	if(sum>1.){
++		return true;
++	}
++	else{
++		return false;
++	}
++}
++/*}}}*/
++/*FUNCTION Tria::EdgeOnBedIndices{{{*/
++void Tria::EdgeOnBedIndices(int* pindex1,int* pindex2){
++
++	bool found=false;
++	IssmDouble values[NUMVERTICES];
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonbedEnum);
++
++	for(int i=0;i<NUMVERTICES;i++){
++		if(values[i]==1.){
++			if(found){
++				*pindex2 = i;
++				return;
++			}
++			else{
++				*pindex1 = i;
++			}
++		}
++	}
++
++	_error_("Could not find 2 vertices on bed");
++}
++/*}}}*/
+ /*FUNCTION Tria::IsFloating {{{*/
+ bool   Tria::IsFloating(){
+ 
+@@ -3036,6 +3114,112 @@
+ #endif
+ 
+ #ifdef _HAVE_STRESSBALANCE_
++/*FUNCTION Tria::CreateKMatrixStressbalanceFS{{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceFS(void){
++
++	ElementMatrix* Ke1 = NULL;
++	ElementMatrix* Ke2 = NULL;
++	ElementMatrix* Ke  = NULL;
++
++	/*compute all stiffness matrices for this element*/
++	Ke1=CreateKMatrixStressbalanceFSViscous();
++	Ke2=CreateKMatrixStressbalanceFSFriction();
++	Ke =new ElementMatrix(Ke1,Ke2);
++
++	/*clean-up and return*/
++	delete Ke1;
++	delete Ke2;
++	return Ke;
++
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixStressbalanceFSViscous {{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceFSViscous(void){
++
++	/*Intermediaries */
++	int        i,approximation;
++	IssmDouble Jdet,viscosity,FSreconditioning,D_scalar;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[3]; /* epsilon=[exx,eyy,exy];*/
++	GaussTria *gauss=NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int numdof    = vnumnodes*NDOF2 + pnumnodes*NDOF1;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++	IssmDouble*    B      = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    Bprime = xNew<IssmDouble>(5*numdof);
++	IssmDouble*    D      = xNewZeroInit<IssmDouble>(5*5);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussTria(5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetBFS(B,&xyz_list[0][0],gauss); 
++		GetBprimeFS(Bprime,&xyz_list[0][0],gauss); 
++
++		this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
++		material->GetViscosity2dvertical(&viscosity,&epsilon[0]);
++
++		D_scalar=gauss->weight*Jdet;
++		for(i=0;i<3;i++) D[i*5+i] = +D_scalar*2.*viscosity;
++		for(i=3;i<5;i++) D[i*5+i] = -D_scalar*FSreconditioning;
++
++		TripleMultiply(B,5,numdof,1,
++					D,5,5,0,
++					Bprime,5,numdof,0,
++					Ke->values,1);
++	}
++
++	/*Transform Coordinate System*/
++	TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list);
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	xDelete<IssmDouble>(D);
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixStressbalanceFSFriction{{{*/
++ElementMatrix* Tria::CreateKMatrixStressbalanceFSFriction(void){
++
++	/*Intermediaries */
++	int         i,j;
++	int         analysis_type,approximation;
++	IssmDouble  alpha2,Jdet2d;
++	IssmDouble  FSreconditioning,viscosity;
++	IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_seg[NUMVERTICES1D][3];
++	Friction   *friction = NULL;
++	GaussTria  *gauss    = NULL;
++
++	/*Initialize Element matrix and return if necessary*/
++	if(IsFloating() || !HasEdgeOnBed()) return NULL;
++
++	_error_("STOP");
++}
++/*}}}*/
+ /*FUNCTION Tria::CreateKMatrixStressbalanceSSA {{{*/
+ ElementMatrix* Tria::CreateKMatrixStressbalanceSSA(void){
+ 
+@@ -3225,6 +3409,183 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorStressbalanceFS {{{*/
++ElementVector* Tria::CreatePVectorStressbalanceFS(void){
++
++	ElementVector* pe1;
++	ElementVector* pe2;
++	ElementVector* pe3;
++	ElementVector* pe;
++
++	/*compute all stiffness matrices for this element*/
++	pe1=CreatePVectorStressbalanceFSViscous();
++	pe2=CreatePVectorStressbalanceFSShelf();
++	pe3=CreatePVectorStressbalanceFSFront();
++	pe =new ElementVector(pe1,pe2,pe3);
++
++	/*clean-up and return*/
++	delete pe1;
++	delete pe2;
++	delete pe3;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorStressbalanceFSFront{{{*/
++ElementVector* Tria::CreatePVectorStressbalanceFSFront(void){
++
++	/*Intermediaries */
++	int         i;
++	IssmDouble  ls[NUMVERTICES];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	bool        isfront;
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
++
++	/*If the level set is awlays <=0, there is no ice front here*/
++	isfront = false;
++	if(ls[0]>0. || ls[1]>0. || ls[2]>0.){
++		if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
++			isfront = true;
++		}
++	}
++
++	/*If no front, return NULL*/
++	if(!isfront) return NULL;
++
++	_error_("STOP");
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorStressbalanceFSViscous {{{*/
++ElementVector* Tria::CreatePVectorStressbalanceFSViscous(void){
++
++	/*Intermediaries*/
++	int        i;
++	int        approximation;
++	IssmDouble Jdet,gravity,rho_ice;
++	IssmDouble forcex,forcey;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	GaussTria *gauss=NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
++	Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
++	rho_ice = matpar->GetRhoIce();
++	gravity = matpar->GetG();
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussTria(5);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctionsVelocity(vbasis, gauss);
++
++		loadingforcex_input->GetInputValue(&forcex,gauss);
++		loadingforcey_input->GetInputValue(&forcey,gauss);
++
++		for(i=0;i<vnumnodes;i++){
++			pe->values[i*NDOF2+1] += -rho_ice*gravity*Jdet*gauss->weight*vbasis[i];
++			pe->values[i*NDOF2+0] += +rho_ice*forcex *Jdet*gauss->weight*vbasis[i];
++			pe->values[i*NDOF2+1] += +rho_ice*forcey *Jdet*gauss->weight*vbasis[i];
++		}
++	}
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list);
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Tria::CreatePVectorStressbalanceFSShelf{{{*/
++ElementVector* Tria::CreatePVectorStressbalanceFSShelf(void){
++
++	/*Intermediaries*/
++	int         i,j;
++	int         indices[2];
++	IssmDouble  gravity,rho_water,bed,water_pressure;
++	IssmDouble  normal_vel,vx,vy,dt;
++	IssmDouble	xyz_list_seg[NUMVERTICES1D][3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble	normal[2];
++	IssmDouble  Jdet;
++
++	/*Initialize Element vector and return if necessary*/
++	if(!HasEdgeOnBed() || !IsFloating()) return NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
++
++	/*Retrieve all inputs and parameters*/
++	rho_water=matpar->GetRhoWater();
++	gravity=matpar->GetG();
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* bed_input=inputs->GetInput(BedEnum); _assert_(bed_input);
++
++	/*Get vertex indices that lie on bed*/
++	this->EdgeOnBedIndices(&indices[0],&indices[1]);
++
++	for(i=0;i<NUMVERTICES1D;i++) for(j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j];
++
++	/* Start looping on the number of gauss 1d (nodes on the bedrock) */
++	GaussTria* gauss=new GaussTria(indices[0],indices[1],2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
++		GetNodalFunctionsVelocity(vbasis, gauss);
++
++		GetSegmentNormal(&normal[0],xyz_list_seg);
++		_assert_(normal[1]<0.);
++		bed_input->GetInputValue(&bed, gauss);
++		water_pressure=gravity*rho_water*bed;
++
++		for(i=0;i<vnumnodes;i++){
++			pe->values[2*i+0]+=(water_pressure)*gauss->weight*Jdet*vbasis[i]*normal[0];
++			pe->values[2*i+1]+=(water_pressure)*gauss->weight*Jdet*vbasis[i]*normal[1];
++		}
++	}
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorStressbalanceSSA {{{*/
+ ElementVector* Tria::CreatePVectorStressbalanceSSA(){
+ 
+@@ -3695,6 +4056,79 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Tria::InputUpdateFromSolutionStressbalanceFS {{{*/
++void  Tria::InputUpdateFromSolutionStressbalanceFS(IssmDouble* solution){
++
++	int          i;
++	int*         vdoflist=NULL;
++	int*         pdoflist=NULL;
++	IssmDouble   FSreconditioning;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumdof   = vnumnodes*NDOF2;
++	int pnumdof   = pnumnodes*NDOF1;
++
++	/*Initialize values*/
++	IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
++	IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
++	IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* pressure = xNew<IssmDouble>(pnumnodes);
++
++	/*Get dof list: */
++	GetDofListVelocity(&vdoflist,GsetEnum);
++	GetDofListPressure(&pdoflist,GsetEnum);
++
++	/*Use the dof list to index into the solution vector: */
++	for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
++	for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
++
++	/*Transform solution in Cartesian Space*/
++	TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYEnum);
++
++	/*Ok, we have vx and vy in values, fill in all arrays: */
++	for(i=0;i<vnumnodes;i++){
++		vx[i] = vvalues[i*NDOF2+0];
++		vy[i] = vvalues[i*NDOF2+1];
++		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
++	}
++	for(i=0;i<pnumnodes;i++){
++		pressure[i] = pvalues[i];
++		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
++	}
++
++	/*Recondition pressure and compute vel: */
++	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
++	for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
++	for(i=0;i<vnumnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
++
++	/*Now, we have to move the previous inputs  to old 
++	 * status, otherwise, we'll wipe them off: */
++	this->inputs->ChangeEnum(VxEnum,VxPicardEnum);
++	this->inputs->ChangeEnum(VyEnum,VyPicardEnum);
++	this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
++
++	/*Add vx and vy as inputs to the tria element: */
++	this->inputs->AddInput(new TriaInput(VxEnum,vx,P1Enum));
++	this->inputs->AddInput(new TriaInput(VyEnum,vy,P1Enum));
++	this->inputs->AddInput(new TriaInput(VelEnum,vel,P1Enum));
++	this->inputs->AddInput(new TriaInput(PressureEnum,pressure,P1Enum));
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(pressure);
++	xDelete<IssmDouble>(vel);
++	xDelete<IssmDouble>(vy);
++	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(vvalues);
++	xDelete<IssmDouble>(pvalues);
++	xDelete<int>(vdoflist);
++	xDelete<int>(pdoflist);
++}
++/*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionStressbalanceSIA {{{*/
+ void  Tria::InputUpdateFromSolutionStressbalanceSIA(IssmDouble* solution){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16350)
+@@ -22,8 +22,10 @@
+ 		void SetElementType(int type,int type_counter);
+ 
+ 		/*Numerics*/
++		void GetBFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBSSA(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBSSAFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
++		void GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeSSA(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeSSAFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBprimeMasstransport(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+@@ -35,10 +37,14 @@
+ 		void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
++		void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss);
++		void GetNodalFunctionsPressure(IssmDouble* basis, GaussTria* gauss);
+ 		void GetSegmentNodalFunctions(IssmDouble* basis,GaussTria* gauss, int index1,int index2);
+ 		void GetSegmentBFlux(IssmDouble* B,GaussTria* gauss, int index1,int index2);
+ 		void GetSegmentBprimeFlux(IssmDouble* Bprime,GaussTria* gauss, int index1,int index2);
+ 		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss);
++		void GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
++		void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16350)
+@@ -333,9 +333,9 @@
+ 
+ 	/*Compute B  matrix. B=[Bv1 Bv2 ... Bp1 Bp2 ...] where Bvi is of size 3*NDOF3. 
+ 	 * For node i, Bvi can be expressed in the actual coordinate system
+-	 * by: 	   Bvi=[ dh/dx          0              0      ]
++	 * by: 	   Bvi=[ dh/dx          0             0      ]
+ 	 *					[   0           dh/dy           0      ]
+-	 *					[   0             0           dh/dy    ]
++	 *					[   0             0           dh/dz    ]
+ 	 *					[ 1/2*dh/dy    1/2*dh/dx        0      ]
+ 	 *					[ 1/2*dh/dz       0         1/2*dh/dx  ]
+ 	 *					[   0          1/2*dh/dz    1/2*dh/dy  ]
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16350)
+@@ -83,6 +83,8 @@
+ 		int         GetNumberOfNodes(void);
+ 		int         Sid();
+ 		bool        IsOnBed();
++		bool        HasEdgeOnBed();
++		void        EdgeOnBedIndices(int* pindex1,int* pindex);
+ 		bool        IsFloating();
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool        NoIceInElement();
+@@ -232,15 +234,24 @@
+ 		ElementMatrix* CreateKMatrixStressbalanceSSAViscous(void);
+ 		ElementMatrix* CreateKMatrixStressbalanceSSAFriction(void);
+ 		ElementMatrix* CreateKMatrixStressbalanceSIA(void);
++		ElementMatrix* CreateKMatrixStressbalanceFS(void);
++		ElementMatrix* CreateKMatrixStressbalanceFSViscous(void);
++		ElementMatrix* CreateKMatrixStressbalanceFSFriction(void);
+ 		ElementVector* CreatePVectorStressbalanceSSA(void);
+ 		ElementVector* CreatePVectorStressbalanceSSADrivingStress(void);
+ 		ElementVector* CreatePVectorStressbalanceSSAFront(void);
+ 		ElementVector* CreatePVectorStressbalanceSIA(void);
++		ElementVector* CreatePVectorStressbalanceFS(void);
++		ElementVector* CreatePVectorStressbalanceFSFront(void);
++		ElementVector* CreatePVectorStressbalanceFSViscous(void);
++		void           PVectorGLSstabilization(ElementVector* pe);
++		ElementVector* CreatePVectorStressbalanceFSShelf(void);
+ 		ElementMatrix* CreateJacobianStressbalanceSSA(void);
+ 		void	  GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution);
+ 		void	  GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution);
+ 		void	  GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution);
+ 		void	  InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solution);
++		void	  InputUpdateFromSolutionStressbalanceFS( IssmDouble* solution);
+ 		void	  InputUpdateFromSolutionStressbalanceSIA( IssmDouble* solution);
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16350)
+@@ -10657,7 +10657,7 @@
+ 	IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vz       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
+-	IssmDouble* pressure = xNew<IssmDouble>(vnumnodes);
++	IssmDouble* pressure = xNew<IssmDouble>(pnumnodes);
+ 
+ 	/*Get dof list: */
+ 	GetDofListVelocity(&vdoflist,GsetEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16349)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16350)
+@@ -199,6 +199,116 @@
+ 	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::GetBFS {{{*/
++void TriaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++	/*Compute B  matrix. B=[Bv1 Bv2 ... Bp1 Bp2 ...] where Bvi is of size 3*NDOF3. 
++	 * For node i, Bvi can be expressed in the actual coordinate system
++	 * by: 	   Bvi=[ dphi/dx          0        ]
++	 *					 [   0           dphi/dy     ]
++	 *					 [ 1/2*dphi/dy    1/2*dphi/dx]
++	 *					 [   0             0         ]
++	 *					 [ dphi/dx         dphi/dy   ]
++	 *
++	 * by: 	  Bpi=[  0    ]
++	 *					[  0    ]
++	 *					[  0    ]
++	 *					[ phi_p ]
++	 *					[  0    ]
++	 *	where phi is the interpolation function for node i.
++	 *	Same thing for Bb except the last column that does not exist.
++	 */
++
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* vdbasis=xNew<IssmDouble>(2*vnumnodes);
++	IssmDouble* pbasis =xNew<IssmDouble>(pnumnodes);
++	GetNodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss);
++	GetNodalFunctionsPressure(pbasis,gauss);
++
++	/*Build B: */
++	for(int i=0;i<vnumnodes;i++){
++		B[(2*vnumnodes+pnumnodes)*0+2*i+0] = vdbasis[0*vnumnodes+i];
++		B[(2*vnumnodes+pnumnodes)*0+2*i+1] = 0.;
++		B[(2*vnumnodes+pnumnodes)*1+2*i+0] = 0.;
++		B[(2*vnumnodes+pnumnodes)*1+2*i+1] = vdbasis[1*vnumnodes+i];
++		B[(2*vnumnodes+pnumnodes)*2+2*i+0] = .5*vdbasis[1*vnumnodes+i];
++		B[(2*vnumnodes+pnumnodes)*2+2*i+1] = .5*vdbasis[0*vnumnodes+i];
++		B[(2*vnumnodes+pnumnodes)*3+2*i+0] = 0.;
++		B[(2*vnumnodes+pnumnodes)*3+2*i+1] = 0.;
++		B[(2*vnumnodes+pnumnodes)*4+2*i+0] = vdbasis[0*vnumnodes+i];
++		B[(2*vnumnodes+pnumnodes)*4+2*i+1] = vdbasis[1*vnumnodes+i];
++	}
++	for(int i=0;i<pnumnodes;i++){
++		B[(2*vnumnodes+pnumnodes)*0+(2*vnumnodes)+i] = 0.;
++		B[(2*vnumnodes+pnumnodes)*1+(2*vnumnodes)+i] = 0.;
++		B[(2*vnumnodes+pnumnodes)*2+(2*vnumnodes)+i] = 0.;
++		B[(2*vnumnodes+pnumnodes)*3+(2*vnumnodes)+i] = pbasis[i];
++		B[(2*vnumnodes+pnumnodes)*4+(2*vnumnodes)+i] = 0.;
++	}
++
++	/*Clean up*/
++	xDelete<IssmDouble>(vdbasis);
++	xDelete<IssmDouble>(pbasis);
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetBprimeFS {{{*/
++void TriaRef::GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussTria* gauss){
++	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
++	 *	For node i, Bi' can be expressed in the actual coordinate system
++	 *	by: 
++	 *			Bvi' = [  dphi/dx     0     ]
++	 *					 [     0      dphi/dy ]
++	 *					 [  dphi/dy   dphi/dx ]
++	 *					 [  dphi/dx   dphi/dy ]
++	 *					 [     0      0       ]
++	 *
++	 * by: 	  Bpi=[  0  ]
++	 *					[  0  ]
++	 *					[  0  ]
++	 *					[  0  ]
++	 *					[ phi ]
++	 *	where phi is the interpolation function for node i.
++	 */
++
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* vdbasis=xNew<IssmDouble>(2*vnumnodes);
++	IssmDouble* pbasis =xNew<IssmDouble>(pnumnodes);
++	GetNodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss);
++	GetNodalFunctionsPressure(pbasis,gauss);
++
++	/*Build B_prime: */
++	for(int i=0;i<vnumnodes;i++){
++		B_prime[(2*vnumnodes+pnumnodes)*0+2*i+0] = vdbasis[0*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*0+2*i+1] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*1+2*i+0] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*1+2*i+1] = vdbasis[1*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*2+2*i+0] = vdbasis[1*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*2+2*i+1] = vdbasis[0*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*3+2*i+0] = vdbasis[0*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*3+2*i+1] = vdbasis[1*vnumnodes+i];
++		B_prime[(2*vnumnodes+pnumnodes)*4+2*i+0] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*4+2*i+1] = 0.;
++	}
++	for(int i=0;i<pnumnodes;i++){
++		B_prime[(2*vnumnodes+pnumnodes)*0+(2*vnumnodes)+i] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*1+(2*vnumnodes)+i] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*2+(2*vnumnodes)+i] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*3+(2*vnumnodes)+i] = 0.;
++		B_prime[(2*vnumnodes+pnumnodes)*4+(2*vnumnodes)+i] = pbasis[i];
++	}
++
++	/*Clean up*/
++	xDelete<IssmDouble>(vdbasis);
++	xDelete<IssmDouble>(pbasis);
++}
++/*}}}*/
+ /*FUNCTION TriaRef::GetBMasstransport{{{*/
+ void TriaRef::GetBMasstransport(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
+@@ -457,6 +567,76 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsVelocity{{{*/
++void TriaRef::GetNodalFunctionsVelocity(IssmDouble* basis,GaussTria* gauss){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIEnum;
++			return;
++		case TaylorHoodEnum:
++			this->element_type = P2Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsPressure{{{*/
++void TriaRef::GetNodalFunctionsPressure(IssmDouble* basis,GaussTria* gauss){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = MINIEnum;
++			return;
++		case TaylorHoodEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctions(basis,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION TriaRef::GetSegmentNodalFunctions{{{*/
+ void TriaRef::GetSegmentNodalFunctions(IssmDouble* basis,GaussTria* gauss,int index1,int index2){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+@@ -528,6 +708,72 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivativesPressure{{{*/
++void TriaRef::GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIEnum;
++			return;
++		case TaylorHoodEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivativesVelocity{{{*/
++void TriaRef::GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){
++	switch(this->element_type){
++		case P1P1Enum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1Enum;
++			return;
++		case P1P1GLSEnum:
++			this->element_type = P1Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = P1P1GLSEnum;
++			return;
++		case MINIcondensedEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIcondensedEnum;
++			return;
++		case MINIEnum:
++			this->element_type = P1bubbleEnum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = MINIEnum;
++			return;
++		case TaylorHoodEnum:
++			this->element_type = P2Enum;
++			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++			this->element_type = TaylorHoodEnum;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference{{{*/
+ void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
Index: issm/oecreview/Archive/16133-16554/ISSM-16350-16351.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16350-16351.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16350-16351.diff	(revision 16556)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16350)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16351)
+@@ -113,6 +113,7 @@
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+ 	}
+ 	if(isFS){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 		iomodel->FetchDataToInput(elements,PressureEnum,0.);
+ 		if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16350)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16351)
+@@ -2062,6 +2062,7 @@
+ 				name==EplHeadOldEnum ||
+ 				name==EplHeadEnum ||
+ 				name==HydrologydcMaskEplactiveEnum ||
++				name==MeshVertexonbedEnum ||
+ 				name==WaterTransferEnum ||
+ 				name==QmuVxEnum ||
+ 				name==QmuVyEnum ||
+@@ -2112,24 +2113,21 @@
+ /*FUNCTION Tria::EdgeOnBedIndices{{{*/
+ void Tria::EdgeOnBedIndices(int* pindex1,int* pindex2){
+ 
+-	bool found=false;
+ 	IssmDouble values[NUMVERTICES];
++	int        indices[3][2] = {{1,2},{2,0},{0,1}};
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetInputListOnVertices(&values[0],MeshVertexonbedEnum);
+ 
+-	for(int i=0;i<NUMVERTICES;i++){
+-		if(values[i]==1.){
+-			if(found){
+-				*pindex2 = i;
+-				return;
+-			}
+-			else{
+-				*pindex1 = i;
+-			}
++	for(int i=0;i<3;i++){
++		if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1.){
++			*pindex1 = indices[i][0];
++			*pindex2 = indices[i][1];
++			return;
+ 		}
+ 	}
+ 
++	_printf_("list of vertices on bed: "<<values[0]<<" "<<values[1]<<" "<<values[2]);
+ 	_error_("Could not find 2 vertices on bed");
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16351-16352.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16351-16352.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16351-16352.diff	(revision 16556)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16351)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16352)
+@@ -31,6 +31,15 @@
+ 		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
+ 		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+ 	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		elementnbv = 3;
++		elementnbe = 3;
++		elementedges         = xNew<int>(elementnbe*2);
++		elementedges_markers = xNew<int>(elementnbe);
++		elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
++		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
++		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
++	}
+ 	else if(iomodel->meshtype==Mesh3DEnum){
+ 		elementnbv = 6;
+ 		elementnbe = 9;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16351)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16352)
+@@ -20,6 +20,9 @@
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementnbe = 3;
+ 	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		elementnbe = 3;
++	}
+ 	else if(iomodel->meshtype==Mesh3DEnum){
+ 		elementnbe = 9;
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16352-16353.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16352-16353.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16352-16353.diff	(revision 16556)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16352)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16353)
+@@ -1,17 +1,16 @@
+ function exportVTK(filename,model)
+ % vtk export
+-% function exportVTK(filename,model,Solution)
+-% creates a directory with the vtk files for you simulation
++% function exportVTK(filename,model)
++% creates a directory with the vtk files for displays in paraview
+ % (only work for triangle and wedges based on their number of nodes)
+-% and additional cell data
+ %
++%Give only the results for nw but could be extended to geometry, mask... 
++%
+ % input: filename   destination 
+ %                   (string)
+ %------------------------------------------------------------------
+ %        model      this is md 
+-%------------------------------------------------------------------
+-%        Solution   Put on the enum of the solution you want 
+-%	                  to plot         
++%
+ % Basile de Fleurian:
+ 
+ [path,name,ext]=fileparts(filename);
+@@ -33,8 +32,6 @@
+ 	error('Your Element definition is not taken into account \n');
+ end
+ 
+-%sol_enum=EnumToString(Solution);
+-
+ %this is the result structure
+ res_struct=model.results;
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16353-16354.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16353-16354.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16353-16354.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16353)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp	(revision 16354)
+@@ -31,7 +31,7 @@
+ 		elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
+ 		elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
+ 	}
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
+ 		elementnbv = 3;
+ 		elementnbe = 3;
+ 		elementedges         = xNew<int>(elementnbe*2);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16353)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp	(revision 16354)
+@@ -20,7 +20,7 @@
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum){
+ 		elementnbe = 3;
+ 	}
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
+ 		elementnbe = 3;
+ 	}
+ 	else if(iomodel->meshtype==Mesh3DEnum){
Index: issm/oecreview/Archive/16133-16554/ISSM-16354-16355.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16354-16355.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16354-16355.diff	(revision 16556)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m	(revision 0)
++++ ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m	(revision 16355)
+@@ -0,0 +1,52 @@
++function exportgmsh(mesh,groundedice_levelset,filename),
++%EXPORTGMSH - export mesh to gmsh format
++%
++%   http://www.geuz.org/gmsh/doc/texinfo/#MSH-ASCII-file-format
++%
++%   Usage:
++%      exportgmsh(mesh,groundedice_levelset,filename)
++%
++%   Example:
++%      exportgmsh(md.mesh,md.mask.groundedice_levelset,'temp.gmsh')
++
++fid=fopen(filename,'w');
++
++%Header
++fprintf(fid,'$MeshFormat\n');
++fprintf(fid,'2.2 0 8\n');
++fprintf(fid,'$EndMeshFormat\n');
++
++%Vertices
++nbv = mesh.numberofvertices;
++fprintf(fid,'$Nodes\n');
++fprintf(fid,'%i\n',nbv);
++fprintf(fid,'%i %8g %8g %8g\n',[[1:nbv]' mesh.x mesh.y zeros(nbv,1)]');
++fprintf(fid,'$EndNodes\n');
++
++%Boundary Elements first
++nbe     = mesh.numberofelements;
++nbs     = size(mesh.segments,1);
++segment = 1;
++tria    = 2;
++
++%Create flags
++grounded = sum(groundedice_levelset(mesh.segments(:,1:2))>0,2);
++A = zeros(nbs,2);
++pos = find(mesh.segmentmarkers==4);
++A(pos,:)=repmat([1,4],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==1 &  grounded);
++A(pos,:)=repmat([2,1],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==1 & ~grounded);
++A(pos,:)=repmat([3,5],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==2);
++A(pos,:)=repmat([4,2],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==3);
++A(pos,:)=repmat([5,3],[numel(pos) 1]);
++
++fprintf(fid,'$Elements\n');
++fprintf(fid,'%i\n',nbe+nbs);
++fprintf(fid,'%i %i %i %i %i %i %i\n',[[1    :nbs    ]' segment*ones(nbs,1) 2*ones(nbs,1) A mesh.segments(:,1:2)]');
++fprintf(fid,'%i %i %i %i %i %i %i %i\n',[[nbs+1:nbs+nbe]' tria*ones(nbe,1) 2*ones(nbe,1) 7*ones(nbe,1) 6*ones(nbe,1) mesh.elements]');
++fprintf(fid,'$EndElements\n');
++
++fclose(fid);
Index: issm/oecreview/Archive/16133-16554/ISSM-16355-16356.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16355-16356.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16355-16356.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16355)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16356)
+@@ -92,6 +92,12 @@
+ 				disp('Recovering old hydrology class');
+ 				md.hydrology=hydrologyshreve(md.materials);
+ 			end
++			%2013 October 9
++			if ~isa(md.damage,'damage'),
++				md.damage=damage();
++				md.damage.D=zeros(md.mesh.numberofvertices,1);
++				md.damage.spcdamage=NaN*ones(md.mesh.numberofvertices,1);
++			end
+ 		end% }}}
+ 	end
+ 	methods
Index: issm/oecreview/Archive/16133-16554/ISSM-16356-16357.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16356-16357.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16356-16357.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16356)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16357)
+@@ -4874,8 +4874,10 @@
+ 		/*Force temperature between [Tpmp-50 Tpmp] to disable penalties*/
+ 		IssmDouble pressure[numdof];
+ 		GetInputListOnVertices(&pressure[0],PressureEnum);
+-		if(values[i]>matpar->TMeltingPoint(pressure[i]))     values[i]=matpar->TMeltingPoint(pressure[i]);
+-		if(values[i]<matpar->TMeltingPoint(pressure[i])-50.) values[i]=matpar->TMeltingPoint(pressure[i])-50.;
++		for(i=0;i<numdof;i++){
++			if(values[i]>matpar->TMeltingPoint(pressure[i]))     values[i]=matpar->TMeltingPoint(pressure[i]);
++			if(values[i]<matpar->TMeltingPoint(pressure[i])-50.) values[i]=matpar->TMeltingPoint(pressure[i])-50.;
++		}
+ 	}
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16357-16358.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16357-16358.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16357-16358.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/regional/isbasin.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/isbasin.m	(revision 16357)
++++ ../trunk-jpl/src/m/regional/isbasin.m	(revision 16358)
+@@ -7,7 +7,7 @@
+ %
+ 
+ %First, load basin names:
+-load([jplsvn '/projects/ModelData/Names/Names.mat']);
++load([jplsvn '/ModelData/Names/Names.mat']);
+ 
+ %go through names: 
+ for i=1:length(names),
+Index: ../trunk-jpl/src/m/regional/basinzoom.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/basinzoom.m	(revision 16357)
++++ ../trunk-jpl/src/m/regional/basinzoom.m	(revision 16358)
+@@ -37,7 +37,7 @@
+ basindeltay=basindeltay*1000;
+ 
+ %Ok, find basin we are talking about: 
+-load([jplsvn() '/projects/ModelData/Names/Names.mat']);
++load([jplsvn() '/ModelData/Names/Names.mat']);
+ 
+ %Go through names: 
+ found=0;
Index: issm/oecreview/Archive/16133-16554/ISSM-16358-16359.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16358-16359.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16358-16359.diff	(revision 16556)
@@ -0,0 +1,249 @@
+Index: ../trunk-jpl/src/c/analyses/enthalpy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16358)
++++ ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16359)
+@@ -29,5 +29,7 @@
+ 		InputToResultx(femmodel,TemperatureEnum);
+ 		InputToResultx(femmodel,EnthalpyEnum);
+ 		InputToResultx(femmodel,WaterfractionEnum);
++		InputToResultx(femmodel,WatercolumnEnum);
++		InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16358)
++++ ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16359)
+@@ -14,6 +14,8 @@
+ 
+     IssmDouble w0=0.01, w1=0.02, w2=0.03;
+     IssmDouble Dret, D0=0, D1=0.005, D2=0.05;
++		IssmDouble yts=365*24*60*60;
++		dt/=yts;
+ 
+     /*get drainage function value*/
+     if((w0==w1)||(w1==w2)||(w0==w2))
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16358)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16359)
+@@ -384,6 +384,27 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Matpar::GetEnthalpyDiffusionParameterVolume{{{*/
++IssmDouble Matpar::GetEnthalpyDiffusionParameterVolume(IssmDouble enthalpy0, IssmDouble enthalpy1, IssmDouble pressure0, IssmDouble pressure1){
++	/*returns kappa depending on distribution of enthalpy over edge of element
++		lambda is the barycentric coordinate that solves H0+(H1-H0)*lambda=H_pureice.
++		it represents the fraction of the ice column which is temperate/cold like H0.
++		if lambda<0 or lambda>1, then the whole ice column is cold or temperate, respectively.
++	*/
++	IssmDouble kappa, kappa0, kappa1;
++	if (enthalpy0!=enthalpy1){
++		IssmDouble lambda=(PureIceEnthalpy(pressure0)-enthalpy0)/(enthalpy1-enthalpy0);
++		if ((lambda>=0.) && (lambda<=1.)){
++			kappa0=GetEnthalpyDiffusionParameter(enthalpy0,pressure0);
++			kappa1=GetEnthalpyDiffusionParameter(enthalpy1,pressure1);
++			kappa=lambda*kappa0+(1.-lambda)*kappa1;
++		}
++	}
++	else
++		kappa=GetEnthalpyDiffusionParameter(enthalpy0, pressure0);
++	return kappa;
++}
++/*}}}*/
+ /*FUNCTION Matpar::EnthalpyToThermal {{{*/
+ void Matpar::EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure){
+ 
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16358)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16359)
+@@ -125,6 +125,7 @@
+ 		IssmDouble TMeltingPoint(IssmDouble pressure);
+ 		IssmDouble PureIceEnthalpy(IssmDouble pressure);
+ 		IssmDouble GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure);
++		IssmDouble GetEnthalpyDiffusionParameterVolume(IssmDouble enthalpy0, IssmDouble enthalpy1, IssmDouble pressure0, IssmDouble pressure1);
+ 		IssmDouble GetLithosphereShearModulus();
+ 		IssmDouble GetLithosphereDensity();
+ 		IssmDouble GetMantleShearModulus();
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16358)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16359)
+@@ -4525,7 +4525,8 @@
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
+ 	IssmDouble Jdet2d,dt;
+-	IssmDouble rho_ice,heatcapacity,geothermalflux_value;
++	IssmDouble rho_ice,heatcapacity;
++	IssmDouble geothermalflux_value, heatflux_value;
+ 	IssmDouble basalfriction,alpha2,vx,vy,vz;
+ 	IssmDouble scalar,enthalpy,enthalpyup;
+ 	IssmDouble pressure,pressureup;
+@@ -4562,6 +4563,7 @@
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+ 	gaussup=new GaussPenta(3,4,5,2);
++
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+@@ -4574,7 +4576,7 @@
+ 		pressure_input->GetInputValue(&pressure,gauss);
+ 		watercolumn_input->GetInputValue(&watercolumn,gauss);
+ 
+-		if((watercolumn==0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
++		if((watercolumn<=0.) && (enthalpy<matpar->PureIceEnthalpy(pressure))){
+ 			/* the above check is equivalent to 
+ 			 NOT ((watercolumn>0.) AND (enthalpy<PIE)) AND (enthalpy<PIE)*/
+ 			geothermalflux_input->GetInputValue(&geothermalflux_value,gauss);
+@@ -4585,7 +4587,8 @@
+ 			vz_input->GetInputValue(&vz,gauss);
+ 			basalfriction=alpha2*(pow(vx,2.0)+pow(vy,2.0)+pow(vz,2.0));
+ 
+-			scalar=gauss->weight*Jdet2d*(basalfriction+geothermalflux_value)/(rho_ice);
++			heatflux_value=(basalfriction+geothermalflux_value)/(rho_ice);
++			scalar=gauss->weight*Jdet2d*heatflux_value;
+ 			if(reCast<bool,IssmDouble>(dt)) scalar=dt*scalar;
+ 			for(i=0;i<numdof;i++) pe->values[i]+=scalar*basis[i];
+ 		}
+@@ -5013,8 +5016,9 @@
+ 	/*Intermediary*/
+ 	bool        isenthalpy,isdynamicbasalspc,setspc;
+ 	int         numindices, numindicesup;
+-	IssmDouble  h_pmp,pressure, pressureup;
+-	IssmDouble  enthalpy, enthalpyup;
++	IssmDouble  pressure, pressureup;
++	IssmDouble  h_pmp, enthalpy, enthalpyup;
++	IssmDouble  watercolumn;
+ 	int        *indices = NULL, *indicesup = NULL;
+ 
+ 	/* Only update Constraints at the base of grounded ice*/
+@@ -5034,6 +5038,7 @@
+ 	/*Get parameters and inputs: */
+ 	Input* pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);
+ 	Input* enthalpy_input=inputs->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
++	Input* watercolumn_input=inputs->GetInput(WatercolumnEnum); //_assert_(watercolumn_input);
+ 
+ 	/*if there is a temperate layer of zero thickness, set spc enthalpy=h_pmp at that node*/
+ 	GaussPenta* gauss=new GaussPenta();
+@@ -5046,6 +5051,7 @@
+ 		/*check if node is temperate, if not, continue*/
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+ 		pressure_input->GetInputValue(&pressure, gauss);
++		watercolumn_input->GetInputValue(&watercolumn,gauss);
+ 		setspc = false;
+ 		if (enthalpy>=matpar->PureIceEnthalpy(pressure)){		
+ 			/*check if upper node is temperate, too. 
+@@ -5053,7 +5059,7 @@
+ 				if not, apply dirichlet BC.*/
+ 			enthalpy_input->GetInputValue(&enthalpyup, gaussup);
+ 			pressure_input->GetInputValue(&pressureup, gaussup);    
+-			setspc=(enthalpyup<matpar->PureIceEnthalpy(pressureup))?true:false;
++			setspc=((enthalpyup<matpar->PureIceEnthalpy(pressureup)) && (watercolumn>=0.))?true:false;
+ 		}
+ 
+ 		if (setspc) {
+@@ -5095,7 +5101,8 @@
+ 	IssmDouble  basalfriction, alpha2;
+ 	IssmDouble  vx[NUMVERTICES],vy[NUMVERTICES],vz[NUMVERTICES];
+ 	IssmDouble  geothermalflux[NUMVERTICES];
+-	IssmDouble  dt,meltingrate_enthalpy;
++	IssmDouble  dt;
++	IssmDouble  meltingrate_enthalpy;
+ 	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+@@ -5107,7 +5114,7 @@
+ 
+ 	/*Fetch parameters and inputs */
+ 	latentheat=matpar->GetLatentHeat();
+-	rho_ice=this->matpar->GetRhoIce();
++	rho_ice=matpar->GetRhoIce();
+ 	GetInputListOnVertices(&vx[0],VxEnum);
+ 	GetInputListOnVertices(&vy[0],VyEnum);
+ 	GetInputListOnVertices(&vz[0],VzEnum);
+@@ -5148,10 +5155,10 @@
+ 			/*ok, from here on all basal ice is temperate. Check for positive thickness of layer of temperate ice. */
+ 			istemperatelayer=false;
+ 			if(enthalpy[iv+3]>=matpar->PureIceEnthalpy(pressure[iv+3])) istemperatelayer=true;
+-			if(istemperatelayer) for(i=0;i<3;i++) vec_heatflux[i]=0.;
++			if(istemperatelayer) for(i=0;i<3;i++) vec_heatflux[i]=0.; // TODO: add -k*nabla T_pmp
+ 			else{
+ 				enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],&xyz_list[0][0],gauss);
+-				kappa=matpar->GetEnthalpyDiffusionParameter(enthalpy[iv],pressure[iv]); _assert_(kappa>0.);
++				kappa=matpar->GetEnthalpyDiffusionParameterVolume(enthalpy[iv],enthalpy[iv+NUMVERTICES2D], pressure[iv],pressure[iv+NUMVERTICES2D]); _assert_(kappa>0.);
+ 				for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
+ 			}
+ 
+@@ -5165,16 +5172,17 @@
+ 			basalfriction=alpha2*(pow(vx[iv],2.0)+pow(vy[iv],2.0)+pow(vz[iv],2.0));
+ 
+ 			matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure[iv]);
+-			meltingrate_enthalpy=(basalfriction-(heatflux-geothermalflux[iv]))/((1-waterfraction)*latentheat*rho_ice); // m/yr water equivalent 
++			// -Mb= Fb-(q-q_geo)/((1-w)*L), cf Aschwanden 2012, eq.66
++			meltingrate_enthalpy=(heatflux+basalfriction+geothermalflux[iv])/((1-waterfraction)*latentheat*rho_ice); // m/s water equivalent 
+ 		}
+-
+ 		/*Update water column, basal meltingrate*/
+-		basalmeltingrate[iv]+=meltingrate_enthalpy;
++		//basalmeltingrate[iv]+=meltingrate_enthalpy;
++		basalmeltingrate[iv]=meltingrate_enthalpy;
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 		if(reCast<bool,IssmDouble>(dt))
+-		 watercolumn[iv]+=dt*meltingrate_enthalpy; 
++			watercolumn[iv]+=dt*meltingrate_enthalpy; 
+ 		else
+-		 watercolumn[iv]+=meltingrate_enthalpy;
++			watercolumn[iv]+=meltingrate_enthalpy;
+ 	}  
+ 	/*feed updated variables back into model*/
+ 	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+@@ -5192,29 +5200,42 @@
+     /*Intermediaries*/
+ 	bool isenthalpy;
+ 	IssmDouble waterfraction[NUMVERTICES], temperature[NUMVERTICES];
++	IssmDouble watercolumnbase[NUMVERTICES];
+ 	IssmDouble enthalpy[NUMVERTICES], pressure[NUMVERTICES]; 
+ 	IssmDouble latentheat, dt;
++	IssmDouble dw, dwc;
++	Penta *pentabase = NULL;
+ 
+ 	/*Check wether enthalpy is activated*/
+ 	parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	if(!isenthalpy) return;       
+-
++	
++	/*get basal element, needed for basal watercolumn*/
++	pentabase=this->GetBasalElement();
++	
+ 	GetInputListOnVertices(&enthalpy[0],EnthalpyEnum);
+ 	GetInputListOnVertices(&pressure[0],PressureEnum);
++	pentabase->GetInputListOnVertices(&watercolumnbase[0], WatercolumnEnum);
++
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 	latentheat=matpar->GetLatentHeat();
+ 
+ 	for(int iv=0;iv<NUMVERTICES;iv++){ 
+ 		matpar->EnthalpyToThermal(&temperature[iv],&waterfraction[iv], enthalpy[iv],pressure[iv]); 
+-
++		dw=DrainageFunctionWaterfraction(waterfraction[iv], dt);
+ 		/*drain water fraction & update enthalpy*/
+-		waterfraction[iv]-=DrainageFunctionWaterfraction(waterfraction[iv], dt);
++		waterfraction[iv]-=dw;
+ 		matpar->ThermalToEnthalpy(&enthalpy[iv], temperature[iv], waterfraction[iv], pressure[iv]);        
++		/*add drained water to watercolumn at base*/
++		dwc=dw*this->IceVolume();
++		watercolumnbase[iv%NUMVERTICES2D]+=dwc;
+ 	}
+ 	/*feed updated results back into model*/
+ 	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
+-	// this->inputs->AddInput(new PentaInput(TemperatureEnum,temperature,P1Enum));    // temperature should not change during drainage...
++	pentabase->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumnbase,P1Enum));
++
++	delete pentabase;
+ }
+ /*}}}*/
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16359-16360.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16359-16360.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16359-16360.diff	(revision 16556)
@@ -0,0 +1,115 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive121.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive326.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16359)
++++ ../trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp	(revision 16360)
+@@ -8,38 +8,38 @@
+ 
+ /*FUNCTION IssmDouble DrainageFunctionWaterfraction()*/
+ IssmDouble DrainageFunctionWaterfraction(IssmDouble waterfraction, IssmDouble dt=0.){
+-    /* DrainageFunctionWaterfraction returns how much of the waterfraction is drained per year */
+-    _assert_(waterfraction>=0.);
+-    _assert_(dt>=0.);
++	/* DrainageFunctionWaterfraction returns how much of the waterfraction is drained per year */
++	_assert_(waterfraction>=0.);
++	_assert_(dt>=0.);
+ 
+-    IssmDouble w0=0.01, w1=0.02, w2=0.03;
+-    IssmDouble Dret, D0=0, D1=0.005, D2=0.05;
+-		IssmDouble yts=365*24*60*60;
+-		dt/=yts;
++	IssmDouble w0=0.01, w1=0.02, w2=0.03;
++	IssmDouble Dret, D0=0, D1=0.005, D2=0.05;
++	IssmDouble yts=365*24*60*60;
++	dt/=yts;
+ 
+-    /*get drainage function value*/
+-    if((w0==w1)||(w1==w2)||(w0==w2))
+-        _error_("Error: equal ordinates in DrainageFunctionWaterfraction -> division by zero. Abort");
+-    if(waterfraction<=w0)
+-        Dret=D0;
+-    if((waterfraction>w0) && (waterfraction<=w1))
+-        Dret=(D1-D0)/(w1-w0)*(waterfraction-w0)+D0;
+-    if((waterfraction>w1) && (waterfraction<=w2))
+-        Dret=(D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
+-    else 
+-        Dret=D2;
++	/*get drainage function value*/
++	if((w0==w1)||(w1==w2)||(w0==w2))
++		_error_("Error: equal ordinates in DrainageFunctionWaterfraction -> division by zero. Abort");
++	if(waterfraction<=w0)
++		Dret=D0;
++	if((waterfraction>w0) && (waterfraction<=w1))
++		Dret=(D1-D0)/(w1-w0)*(waterfraction-w0)+D0;
++	if((waterfraction>w1) && (waterfraction<=w2))
++		Dret=(D2-D1)/(w2-w1)*(waterfraction-w1)+D1;
++	else 
++		Dret=D2;
+ 
+-    /*check if dt*Dret>waterfraction. If so, drain whole waterfraction*/
+-    if(dt==0.){
+-      if(Dret>waterfraction)
+-        return waterfraction;
+-      else
+-        return Dret;
+-    }
+-    else{
+-      if(dt*Dret>waterfraction)
+-        return waterfraction;
+-      else
+-        return dt*Dret;
+-    }
++	/*check if dt*Dret>waterfraction. If so, drain whole waterfraction*/
++	if(dt==0.){
++		if(Dret>waterfraction)
++			return waterfraction;
++		else
++			return Dret;
++	}
++	else{
++		if(dt*Dret>waterfraction)
++			return waterfraction;
++		else
++			return dt*Dret;
++	}
+ }
+Index: ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16359)
++++ ../trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp	(revision 16360)
+@@ -18,10 +18,11 @@
+ 	}
+ 
+ 	/*drain excess water fraction: */
+-	for (i=0;i<femmodel->elements->Size();i++){
++	/*for (i=0;i<femmodel->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+ 		element->DrainWaterfraction();
+ 	}
++	*/
+ 
+ 	/*Update basal dirichlet BCs for enthalpy: */
+ 	for (i=0;i<femmodel->elements->Size();i++){
Index: issm/oecreview/Archive/16133-16554/ISSM-16360-16361.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16360-16361.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16360-16361.diff	(revision 16556)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16360)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16361)
+@@ -227,6 +227,8 @@
+ 					return CreateKMatrixStressbalanceSSA();
+ 				case FSApproximationEnum:
+ 					return CreateKMatrixStressbalanceFS();
++				case SIAApproximationEnum:
++					return NULL;
+ 				case NoneApproximationEnum:
+ 					return NULL;
+ 				default:
+@@ -392,6 +394,8 @@
+ 					return CreatePVectorStressbalanceSSA();
+ 				case FSApproximationEnum:
+ 					return CreatePVectorStressbalanceFS();
++				case SIAApproximationEnum:
++					return NULL;
+ 				case NoneApproximationEnum:
+ 					return NULL;
+ 				default:
Index: issm/oecreview/Archive/16133-16554/ISSM-16361-16362.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16361-16362.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16361-16362.diff	(revision 16556)
@@ -0,0 +1,6 @@
+Index: ../trunk-jpl/scripts/ol.m
+===================================================================
+--- ../trunk-jpl/scripts/ol.m	(revision 0)
++++ ../trunk-jpl/scripts/ol.m	(revision 16362)
+@@ -0,0 +1 @@
++system('ol');
Index: issm/oecreview/Archive/16133-16554/ISSM-16362-16363.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16362-16363.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16362-16363.diff	(revision 16556)
@@ -0,0 +1,1012 @@
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 16363)
+@@ -13,7 +13,7 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+-md.transient.requested_outputs=[IceVolumeEnum();IceVolumeAboveFloatationEnum()];
++md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation'};
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 16363)
+@@ -7,7 +7,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.href=md.geometry.surface;
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs=TotalSmbEnum();
++md.transient.requested_outputs={'TotalSmb'};
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3103.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md.toolkits.DefaultAnalysis=issmmumpssolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test329.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test329.py	(revision 16363)
+@@ -19,7 +19,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+ md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs=TotalSmbEnum()
++md.transient.requested_outputs=['TotalSmb']
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 16363)
+@@ -8,7 +8,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.href=md.geometry.surface;
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs=TotalSmbEnum();
++md.transient.requested_outputs={'TotalSmb'};
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16363)
+@@ -3,7 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
++md.verbose=verbose('11111111');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/android.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/android.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/android.m	(revision 16363)
+@@ -4,7 +4,7 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('mprocessor',true,'module',true,'solution',true,'solver',true,'convergence',true,'control',true,'qmu',true,'autodiff',true);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ 	
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 16363)
+@@ -7,7 +7,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
++md.transient.requested_outputs={'IceVolume','MaxVelEnum'};
+ md.verbose=verbose('autodiff',true);
+ md.stressbalance.restol=1e-4;
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+Index: ../trunk-jpl/test/NightlyRun/test3101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3101.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3101.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmmumpssolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16363)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test110.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ 
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3110.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3110.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16363)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 16363)
+@@ -21,7 +21,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.masstransport.requested_outputs=IceVolumeEnum()
++md.masstransport.requested_outputs=['IceVolume']
+ md.verbose=verbose('autodiff',True)
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3021.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3021.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3021.m	(revision 16363)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md.autodiff.isautodiff=false;
+ md.toolkits.DefaultAnalysis=issmsolver();
+ md.verbose=verbose('1111111');
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 16363)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 16363)
+@@ -56,7 +56,7 @@
+ md.qmu.isdakota=1;
+ 
+ md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ 
+ %solve
+ md=solve(md,TransientSolutionEnum(),'overwrite','y');
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+-md.transient.requested_outputs=IceVolumeEnum()
++md.transient.requested_outputs=['IceVolume']
+ 
+ md.autodiff.isautodiff=True
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 16363)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 16363)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 16363)
+@@ -22,7 +22,7 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
+-md.transient.requested_outputs=[IceVolumeEnum(),IceVolumeAboveFloatationEnum()]
++md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation']
+ 
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3103.m	(revision 16363)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs=StressTensorEnum();
++md.stressbalance.requested_outputs={'StressTensor'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmmumpssolver();
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test110.py	(revision 16363)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.requested_outputs=IceVolumeEnum()
++md.transient.requested_outputs=['IceVolume']
+ 
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test235.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test235.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test235.m	(revision 16363)
+@@ -51,7 +51,7 @@
+ md.qmu.isdakota=1;
+ 
+ md.stressbalance.reltol=10^-5; %tighten for qmu analyses
+-md.transient.requested_outputs=IceVolumeEnum();
++md.transient.requested_outputs={'IceVolume'};
+ 
+ %solve
+ md=solve(md,TransientSolutionEnum(),'overwrite','y');
+Index: ../trunk-jpl/test/NightlyRun/test3101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3101.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3101.py	(revision 16363)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md.toolkits.DefaultAnalysis=issmmumpssolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 16363)
+@@ -21,7 +21,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
++md.transient.requested_outputs=['IceVolume','MaxVel']
+ md.verbose=verbose('autodiff',True)
+ md.stressbalance.restol=0.000001
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 16363)
+@@ -7,7 +7,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.masstransport.requested_outputs=IceVolumeEnum();
++md.masstransport.requested_outputs={'IceVolume'};
+ md.verbose=verbose('autodiff',true);
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test111.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.transient.requested_outputs=IceVolumeEnum()
++md.transient.requested_outputs=['IceVolume']
+ md=solve(md,TransientSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 16363)
+@@ -12,7 +12,7 @@
+ md.transient.isstressbalance=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+-md.transient.requested_outputs=[IceVolumeEnum();IceVolumeAboveFloatationEnum()];
++md.transient.requested_outputs={'IceVolume','IceVolumeAboveFloatation'};
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test3110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3110.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3110.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.toolkits.DefaultAnalysis=issmmumpssolver()
+-md.transient.requested_outputs=IceVolumeEnum()
++md.transient.requested_outputs=['IceVolume']
+ 
+ md.autodiff.isautodiff=True
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 16363)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=StressTensorEnum()
++md.stressbalance.requested_outputs=['StressTensor']
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 16363)
+@@ -23,7 +23,7 @@
+ md.transient.isstressbalance=False
+ md.transient.isgroundingline=True
+ md.groundingline.migration='AgressiveMigration'
+-md.transient.requested_outputs=[IceVolumeEnum(),IceVolumeAboveFloatationEnum()]
++md.transient.requested_outputs=['IceVolume','IceVolumeAboveFloatation']
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test328.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.py	(revision 16362)
++++ ../trunk-jpl/test/NightlyRun/test328.py	(revision 16363)
+@@ -16,7 +16,7 @@
+ md.surfaceforcings.issmbgradients=1
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+-md.transient.requested_outputs=TotalSmbEnum()
++md.transient.requested_outputs=['TotalSmb']
+ md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16363)
+@@ -19,6 +19,7 @@
+ void transient_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
++	int    i;
+ 	IssmDouble starttime,finaltime,dt,yts;
+ 	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
+ 	bool   save_results,dakota_analysis;
+@@ -26,8 +27,9 @@
+ 	int    output_frequency;
+ 	int    meshtype,groundingline_migration;
+ 	int    numoutputs         = 0;
+-	int   *requested_outputs = NULL;
++	char** requested_outputs = NULL;
+ 
++
+ 	/*intermediary: */
+ 	int    step;
+ 	IssmDouble time;
+@@ -183,6 +185,6 @@
+ 
+ 	femmodel->RequestedDependentsx();
+ 
+-	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
++	/*Free ressources:*/	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+ }
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16363)
+@@ -12,10 +12,11 @@
+ void masstransport_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
++	int   i;
+ 	bool  save_results;
+ 	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
+ 	int   solution_type;
+-	int  *requested_outputs = NULL;
++	char** requested_outputs = NULL;
+ 	int   numoutputs        = 0;
+ 
+ 	/*activate configuration*/
+@@ -76,5 +77,5 @@
+ 	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
+ 
+ 	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);} 
+ }
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16363)
+@@ -20,8 +20,10 @@
+ 	int   newton;
+ 	int   solution_type;
+ 	int   numoutputs        = 0;
+-	int  *requested_outputs = NULL;
++	char** requested_outputs = NULL;
++	int    i;
+ 
++
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+@@ -95,6 +97,6 @@
+ 
+ 	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+ 
+-	/*Free ressources:*/
+-	xDelete<int>(requested_outputs);
++	/*Free ressources:*/	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+ }
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16363)
+@@ -20,6 +20,7 @@
+ void steadystate_core(FemModel* femmodel){
+ 
+ 	/*intermediary: */
++	int i;
+ 	int step; 
+ 	Vector<IssmDouble>* ug     = NULL;
+ 	Vector<IssmDouble>* ug_old = NULL;
+@@ -31,7 +32,7 @@
+ 	int         maxiter;
+ 	IssmDouble  reltol;
+ 	int         numoutputs        = 0;
+-	int        *requested_outputs = NULL;
++	char**      requested_outputs = NULL;
+ 
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+@@ -101,8 +102,8 @@
+ 	delete tg_old;
+ 	delete ug_old;
+ 	delete tg;
+-	delete ug;
+-	xDelete<int>(requested_outputs);
++	delete ug;	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+ }
+ bool steadystateconvergence(Vector<IssmDouble>* tg,Vector<IssmDouble>* tg_old,Vector<IssmDouble>* ug,Vector<IssmDouble>* ug_old,IssmDouble reltol){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 16363)
+@@ -11,7 +11,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int         numoutputs;
+-	IssmDouble *requestedoutputs = NULL;
++	char**      requestedoutputs = NULL;
+ 
+ 	/*Get parameters: */
+ 	Parameters *parameters=*pparameters;
+@@ -34,10 +34,10 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
+ 
+ 	/*Requested outputs*/
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,StressbalanceRequestedOutputsEnum);
++	iomodel->FetchData(&requestedoutputs,&numoutputs,StressbalanceRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,StressbalanceRequestedOutputsEnum);
++	if(numoutputs)parameters->AddObject(new StringArrayParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
+ 
+ 	/*Assign output pointer: */
+ 	*pparameters = parameters;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16363)
+@@ -20,7 +20,7 @@
+ 	int         i,j,m,k;
+ 	int         numoutputs,meshtype;
+ 	Parameters *parameters       = NULL;
+-	IssmDouble *requestedoutputs = NULL;
++	char**      requestedoutputs = NULL;
+ 	IssmDouble  time;
+ 	bool        ispdd,isdelta18o;
+ 
+@@ -135,20 +135,21 @@
+ 	/*By default, save all results*/
+ 	parameters->AddObject(new BoolParam(SaveResultsEnum,true));
+ 
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,TransientRequestedOutputsEnum);
++	/*Requested outputs */
++	iomodel->FetchData(&requestedoutputs,&numoutputs,TransientRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(TransientNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(TransientRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,TransientRequestedOutputsEnum);
++	if(numoutputs)parameters->AddObject(new StringArrayParam(TransientRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,TransientRequestedOutputsEnum);
+ 
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,SteadystateRequestedOutputsEnum);
++	iomodel->FetchData(&requestedoutputs,&numoutputs,SteadystateRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(SteadystateNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,SteadystateRequestedOutputsEnum);
++	if(numoutputs)parameters->AddObject(new StringArrayParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,SteadystateRequestedOutputsEnum);
+ 
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,MasstransportRequestedOutputsEnum);
++	iomodel->FetchData(&requestedoutputs,&numoutputs,MasstransportRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(MasstransportNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new IntVecParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(requestedoutputs,MasstransportRequestedOutputsEnum);
++	if(numoutputs)parameters->AddObject(new StringArrayParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,MasstransportRequestedOutputsEnum);
+ 
+ 	/*Deal with mass flux segments: {{{*/
+ 	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16363)
+@@ -469,9 +469,9 @@
+ 
+ }
+ /*}}}*/
+-void FemModel::RequestedOutputsx(int* requested_outputs, int numoutputs){/*{{{*/
++void FemModel::RequestedOutputsx(char** requested_outputs, int numoutputs){/*{{{*/
+ 
+-	int      output_enum;
++	char*    output_string;
+ 	int      step;
+ 	IssmDouble   time;
+ 	IssmDouble   output_value;
+@@ -484,34 +484,28 @@
+ 	/*retrieve Inputs*/
+ 	if(numoutputs){
+ 		for(int i=0;i<numoutputs;i++){
+-			output_enum=requested_outputs[i];
++			output_string=requested_outputs[i];
+ 
+-			switch(output_enum){
++			if (strcmp(output_string,"IceVolume")==0){
++				Responsex(&output_value,output_string);
++				results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+ 
+-				case IceVolumeEnum:
+-					Responsex(&output_value,"IceVolume");
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				case IceVolumeAboveFloatationEnum:
+-					Responsex(&output_value,"IceVolumeAboveFloatation");
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeAboveFloatationEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				case TotalSmbEnum:
+-					Responsex(&output_value,"TotalSmb");
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				case MaxVelEnum:
+-					Responsex(&output_value,"MaxVel");
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				default:
+-					/*create this output in the element inputs, and then transfer to results:*/
+-					for(int j=0;j<elements->Size();j++){
+-						element=(Element*)elements->GetObjectByOffset(j);
+-						element->RequestedOutput(output_enum,step,time);
+-					}
+-					break;
+ 			}
++			else if (strcmp(output_string,"TotalSmb")==0){
++				Responsex(&output_value,output_string);
++				results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
++			}
++			else if (strcmp(output_string,"MaxVel")==0){
++				Responsex(&output_value,output_string);
++				results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
++			}
++			else{
++				/*create this output in the element inputs, and then transfer to results:*/
++				for(int j=0;j<elements->Size();j++){
++					element=(Element*)elements->GetObjectByOffset(j);
++					element->RequestedOutput(StringToEnumx(output_string),step,time);
++				}
++			}
+ 		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16362)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16363)
+@@ -66,6 +66,7 @@
+ 		IssmDouble *Data(int dataenum);
+ 		void        DeleteData(int num,...);
+ 		void        DeleteData(IssmDouble* vector, int dataenum);
++		void        DeleteData(char*** pstringarray, int numstrings, int dataenum);
+ 		void        FetchConstants(void);
+ 		void        FetchData(bool* pboolean,int data_enum);
+ 		void        FetchData(int* pinteger,int data_enum);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16362)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16363)
+@@ -339,6 +339,21 @@
+ 	if(vector)if (!this->independents[dataenum]) xDelete<IssmDouble>(vector);
+ 
+ } /*}}}*/
++/*FUNCTION IoModel::DeleteData(char*** pstringarray, int numstrings, int dataenum) {{{*/
++void  IoModel::DeleteData(char*** pstringarray, int numstrings, int dataenum){
++
++	int i;
++	char** stringarray=*pstringarray;
++	
++	if (numstrings){
++		for (i=0;i<numstrings;i++){
++			char* string=stringarray[i]; 
++			xDelete<char>(string);
++		}
++		xDelete<char*>(stringarray);
++	}
++	*pstringarray=NULL;
++} /*}}}*/
+ /*FUNCTION IoModel::FetchConstants{{{*/
+ void  IoModel::FetchConstants(void){
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16362)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16363)
+@@ -81,7 +81,7 @@
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+-		void RequestedOutputsx(int* requested_outputs, int numoutputs);
++		void RequestedOutputsx(char** requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor);
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16362)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16363)
+@@ -17,7 +17,7 @@
+ 		self.isthermal         = False
+ 		self.isgroundingline   = False
+ 		self.isgia             = False
+-		self.requested_outputs = float('NaN')
++		self.requested_outputs = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -55,7 +55,7 @@
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+-		md = checkfield(md,'transient.requested_outputs','size',[float('NaN')])
++		md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
+ 
+ 
+ 		return md
+@@ -66,6 +66,6 @@
+ 		WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgia','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray')
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/classes/steadystate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.m	(revision 16362)
++++ ../trunk-jpl/src/m/classes/steadystate.m	(revision 16363)
+@@ -7,7 +7,7 @@
+ 	properties (SetAccess=public) 
+ 		reltol            = 0;
+ 		maxiter           = 0;
+-		requested_outputs = NaN;
++		requested_outputs = {};
+ 	end
+ 	methods
+ 		function obj = steadystate(varargin) % {{{
+@@ -49,7 +49,7 @@
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 16362)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 16363)
+@@ -11,7 +11,7 @@
+ 		isgroundingline   = 0;
+ 		isgia             = 0;
+ 		isdamage             = 0;
+-		requested_outputs = NaN;
++		requested_outputs = {};
+ 	end
+ 	methods
+ 		function obj = transient(varargin) % {{{
+@@ -44,7 +44,7 @@
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgia','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isdamage','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'transient.requested_outputs','size',[NaN 1]);
++			md = checkfield(md,'transient.requested_outputs','size',[1 NaN]);
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -66,7 +66,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','isgroundingline','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgia','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isdamage','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 16362)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 16363)
+@@ -20,7 +20,7 @@
+ 		self.stabilization          = 0
+ 		self.vertex_pairing         = float('NaN')
+ 		self.penalty_factor         = 0
+-		self.requested_outputs      = float('NaN')
++		self.requested_outputs      = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -65,7 +65,7 @@
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
+ 		if not md.masstransport.requested_outputs:
+-			md = checkfield(md,'masstransport.requested_outputs','size',[float('NaN'),1])
++			md = checkfield(md,'masstransport.requested_outputs','size',[1, float('NaN')])
+ 
+ 		return md
+ 	# }}}
+@@ -77,5 +77,5 @@
+ 		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray');
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/snowpack.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/snowpack.m	(revision 16362)
++++ ../trunk-jpl/src/m/classes/snowpack.m	(revision 16363)
+@@ -470,7 +470,7 @@
+ 			WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');
+ 			WriteData(fid,'object',obj,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');
+ 			WriteData(fid,'object',obj,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','snowpack','fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','snowpack','fieldname','requested_outputs','format','StringArray');
+ 			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16362)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16363)
+@@ -33,7 +33,7 @@
+ 		self.rift_penalty_threshold   = 0
+ 		self.referential              = float('NaN')
+ 		self.loadingforce             = float('NaN')
+-		self.requested_outputs        = float('NaN')
++		self.requested_outputs        = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -123,7 +123,7 @@
+ 		md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+ 		if not md.stressbalance.requested_outputs:
+-			md = checkfield(md,'stressbalance.requested_outputs','size',[float('NaN'),1])
++			md = checkfield(md,'stressbalance.requested_outputs','size',[1, float('NaN')])
+ 
+ 		#singular solution
+ #		if ~any((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy))==2),
+@@ -171,7 +171,7 @@
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','stressbalance','fieldname','requested_outputs','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'class','stressbalance','fieldname','requested_outputs','format','StringArray')
+ 		WriteData(fid,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16362)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16363)
+@@ -15,7 +15,7 @@
+ 	def __init__(self): # {{{
+ 		self.reltol            = 0
+ 		self.maxiter           = 0
+-		self.requested_outputs = float('NaN')
++		self.requested_outputs = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -55,5 +55,5 @@
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
++		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16362)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16363)
+@@ -22,7 +22,7 @@
+ 		rift_penalty_threshold = 0;
+ 		referential            = NaN;
+ 		loadingforce           = NaN;
+-		requested_outputs      = NaN;
++		requested_outputs      = {};
+ 	end
+ 	methods
+ 		function obj = stressbalance(varargin) % {{{
+@@ -91,7 +91,7 @@
+ 			md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices 6]);
+ 			md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
+ 			if ~isempty(md.stressbalance.requested_outputs),
+-				md = checkfield(md,'stressbalance.requested_outputs','size',[NaN 1]);
++				md = checkfield(md,'stressbalance.requested_outputs','size',[1 NaN]);
+ 			end
+ 
+ 			%singular solution
+@@ -171,7 +171,7 @@
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','stressbalance','fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'class','stressbalance','fieldname','requested_outputs','format','StringArray');
+ 			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 16362)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 16363)
+@@ -12,7 +12,7 @@
+ 		 stabilization          = 0;
+ 		 vertex_pairing         = NaN;
+ 		 penalty_factor         = 0;
+-		 requested_outputs      = NaN;
++		 requested_outputs      = {};
+ 	end
+ 	methods (Static)
+ 		function obj = loadobj(obj) % {{{
+@@ -84,7 +84,7 @@
+ 			md = checkfield(md,'masstransport.stabilization','values',[0 1 2 3]);
+ 			md = checkfield(md,'masstransport.min_thickness','>',0);
+ 			if ~isempty(md.masstransport.requested_outputs),
+-				md = checkfield(md,'masstransport.requested_outputs','size',[NaN 1]);
++				md = checkfield(md,'masstransport.requested_outputs','size',[1 NaN]);
+ 			end
+ 
+ 		end % }}}
+@@ -110,7 +110,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
+ 		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16363-16364.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16363-16364.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16363-16364.diff	(revision 16556)
@@ -0,0 +1,230 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16363)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16364)
+@@ -3455,7 +3455,68 @@
+ 	/*If no front, return NULL*/
+ 	if(!isfront) return NULL;
+ 
+-	_error_("STOP");
++	/*Intermediaries*/
++	IssmDouble  rho_ice,rho_water,gravity,y_g;
++	IssmDouble  Jdet,water_pressure,air_pressure,pressure;
++	IssmDouble  xyz_list_front[2][3];
++	IssmDouble  area_coordinates[2][3];
++	IssmDouble  normal[2];
++	GaussTria*  gauss = NULL;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	ElementVector* pe     = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++	IssmDouble*    vbasis = xNew<IssmDouble>(vnumnodes);
++
++	/*Retrieve all inputs and parameters*/
++	rho_water = matpar->GetRhoWater();
++	gravity   = matpar->GetG();
++	GetZeroLevelsetCoordinates(&xyz_list_front[0][0],xyz_list,MaskIceLevelsetEnum);
++	GetAreaCoordinates(&area_coordinates[0][0],xyz_list_front,xyz_list,2);
++	GetSegmentNormal(&normal[0],xyz_list_front);
++
++	/*Start looping on Gaussian points*/
++	IssmDouble ymax=max(xyz_list_front[0][1],xyz_list_front[1][1]);
++	IssmDouble ymin=min(xyz_list_front[0][1],xyz_list_front[1][1]);
++	if(ymax>0. && ymin<0.) gauss=new GaussTria(area_coordinates,30); //refined in vertical because of the sea level discontinuity
++	else                   gauss=new GaussTria(area_coordinates,3);
++
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++		y_g=GetYcoord(gauss);
++		GetNodalFunctionsVelocity(vbasis,gauss);
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_front[0][0],gauss);
++
++		water_pressure = rho_water*gravity*min(0.,y_g); //0 if the gaussian point is above water level
++		air_pressure   = 0.;
++		pressure       = water_pressure + air_pressure;
++
++		for(i=0;i<vnumnodes;i++){
++			pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*vbasis[i];
++			pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*vbasis[i];
++		}
++	}
++
++
++	/*Transform coordinate system*/
++	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
++
++	/*Clean up and return*/
++	xDelete<int>(cs_list);
++	xDelete<IssmDouble>(vbasis);
++	delete gauss;
++	return pe;
++
+ }
+ /*}}}*/
+ /*FUNCTION Tria::CreatePVectorStressbalanceFSViscous {{{*/
+@@ -3578,8 +3639,10 @@
+ 		}
+ 	}
+ 
++	pe->CheckConsistency();
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
++	pe->CheckConsistency();
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3986,6 +4049,20 @@
+ 	xDelete<int>(doflist);
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetYcoord {{{*/
++IssmDouble Tria::GetYcoord(GaussTria* gauss){
++
++	IssmDouble y;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble y_list[NUMVERTICES];
++
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	for(int i=0;i<NUMVERTICES;i++) y_list[i]=xyz_list[i][1];
++	TriaRef::GetInputValue(&y,&y_list[0],gauss,P1Enum);
++
++	return y;
++}
++/*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionStressbalanceHoriz {{{*/
+ void  Tria::InputUpdateFromSolutionStressbalanceHoriz(IssmDouble* solution){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16363)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16364)
+@@ -37,6 +37,7 @@
+ 		void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
++		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation);
+ 		void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss);
+ 		void GetNodalFunctionsPressure(IssmDouble* basis, GaussTria* gauss);
+ 		void GetSegmentNodalFunctions(IssmDouble* basis,GaussTria* gauss, int index1,int index2);
+@@ -47,9 +48,11 @@
+ 		void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss);
++		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int interpolation);
+ 		void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
+ 
+ 		int  NumberofNodes(void);
++		int  NumberofNodes(int interpolation);
+ 		int  NumberofNodesVelocity(void);
+ 		int  NumberofNodesPressure(void);
+ 		int  VelocityInterpolation(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16363)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16364)
+@@ -247,12 +247,13 @@
+ 		void           PVectorGLSstabilization(ElementVector* pe);
+ 		ElementVector* CreatePVectorStressbalanceFSShelf(void);
+ 		ElementMatrix* CreateJacobianStressbalanceSSA(void);
+-		void	  GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution);
+-		void	  GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution);
+-		void	  GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution);
+-		void	  InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solution);
+-		void	  InputUpdateFromSolutionStressbalanceFS( IssmDouble* solution);
+-		void	  InputUpdateFromSolutionStressbalanceSIA( IssmDouble* solution);
++		void	         GetSolutionFromInputsStressbalanceFS(Vector<IssmDouble>* solution);
++		void	         GetSolutionFromInputsStressbalanceHoriz(Vector<IssmDouble>* solution);
++		void	         GetSolutionFromInputsStressbalanceSIA(Vector<IssmDouble>* solution);
++		IssmDouble     GetYcoord(GaussTria* gauss);
++		void	         InputUpdateFromSolutionStressbalanceHoriz( IssmDouble* solution);
++		void	         InputUpdateFromSolutionStressbalanceFS( IssmDouble* solution);
++		void	         InputUpdateFromSolutionStressbalanceSIA( IssmDouble* solution);
+ 		#endif
+ 
+ 		#ifdef _HAVE_CONTROL_
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16363)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16364)
+@@ -532,13 +532,22 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetNodalFunctions{{{*/
++/*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss){{{*/
+ void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+ 
+ 	_assert_(basis);
++	GetNodalFunctions(basis,gauss,this->element_type);
+ 
+-	switch(this->element_type){
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){{{*/
++void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	_assert_(basis);
++
++	switch(interpolation){
+ 		case P1Enum: case P1DGEnum:
+ 			basis[0]=gauss->coord1;
+ 			basis[1]=gauss->coord2;
+@@ -866,18 +875,24 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetInputValue{{{*/
++/*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss){{{*/
+ void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss){
+ 
++	GetInputValue(p,plist,gauss,this->element_type);
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){{{*/
++void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){
++
+ 	/*Output*/
+ 	IssmDouble value =0.;
+ 
+ 	/*Fetch number of nodes for this finite element*/
+-	int numnodes = this->NumberofNodes();
++	int numnodes = this->NumberofNodes(interpolation);
+ 
+ 	/*Get nodal functions*/
+ 	IssmDouble* basis=xNew<IssmDouble>(numnodes);
+-	GetNodalFunctions(basis, gauss);
++	GetNodalFunctions(basis, gauss,interpolation);
+ 
+ 	/*Calculate parameter for this Gauss point*/
+ 	for(int i=0;i<numnodes;i++) value += basis[i]*plist[i];
+@@ -887,10 +902,16 @@
+ 	*p = value;
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::NumberofNodes{{{*/
++/*FUNCTION TriaRef::NumberofNodes(){{{*/
+ int TriaRef::NumberofNodes(void){
+ 
+-	switch(this->element_type){
++	return this->NumberofNodes(this->element_type);
++}
++/*}}}*/
++/*FUNCTION TriaRef::NumberofNodes(int interpolation){{{*/
++int TriaRef::NumberofNodes(int interpolation){
++
++	switch(interpolation){
+ 		case P1Enum:                return NUMNODESP1;
+ 		case P1DGEnum:              return NUMNODESP1;
+ 		case P1bubbleEnum:          return NUMNODESP1b;
Index: issm/oecreview/Archive/16133-16554/ISSM-16364-16365.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16364-16365.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16364-16365.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16364)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16365)
+@@ -3639,10 +3639,8 @@
+ 		}
+ 	}
+ 
+-	pe->CheckConsistency();
+ 	/*Transform coordinate system*/
+ 	TransformLoadVectorCoord(pe,nodes,(vnumnodes+pnumnodes),cs_list);
+-	pe->CheckConsistency();
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
Index: issm/oecreview/Archive/16133-16554/ISSM-16365-16366.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16365-16366.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16365-16366.diff	(revision 16556)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/src/m/contrib/dassflow/exportgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/dassflow/exportgmsh.m	(revision 0)
++++ ../trunk-jpl/src/m/contrib/dassflow/exportgmsh.m	(revision 16366)
+@@ -0,0 +1,52 @@
++function exportgmsh(mesh,groundedice_levelset,filename),
++%EXPORTGMSH - export mesh to gmsh format
++%
++%   http://www.geuz.org/gmsh/doc/texinfo/#MSH-ASCII-file-format
++%
++%   Usage:
++%      exportgmsh(mesh,groundedice_levelset,filename)
++%
++%   Example:
++%      exportgmsh(md.mesh,md.mask.groundedice_levelset,'temp.msh')
++
++fid=fopen(filename,'w');
++
++%Header
++fprintf(fid,'$MeshFormat\n');
++fprintf(fid,'2.2 0 8\n');
++fprintf(fid,'$EndMeshFormat\n');
++
++%Vertices
++nbv = mesh.numberofvertices;
++fprintf(fid,'$Nodes\n');
++fprintf(fid,'%i\n',nbv);
++fprintf(fid,'%i %8g %8g %8g\n',[[1:nbv]' mesh.x mesh.y zeros(nbv,1)]');
++fprintf(fid,'$EndNodes\n');
++
++%Boundary Elements first
++nbe     = mesh.numberofelements;
++nbs     = size(mesh.segments,1);
++segment = 1;
++tria    = 2;
++
++%Create flags
++grounded = sum(groundedice_levelset(mesh.segments(:,1:2))>0,2);
++A = zeros(nbs,2);
++pos = find(mesh.segmentmarkers==4);
++A(pos,:)=repmat([1,4],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==1 &  grounded);
++A(pos,:)=repmat([2,1],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==1 & ~grounded);
++A(pos,:)=repmat([3,5],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==2);
++A(pos,:)=repmat([4,2],[numel(pos) 1]);
++pos = find(mesh.segmentmarkers==3);
++A(pos,:)=repmat([5,3],[numel(pos) 1]);
++
++fprintf(fid,'$Elements\n');
++fprintf(fid,'%i\n',nbe+nbs);
++fprintf(fid,'%i %i %i %i %i %i %i\n',[[1    :nbs    ]' segment*ones(nbs,1) 2*ones(nbs,1) A mesh.segments(:,1:2)]');
++fprintf(fid,'%i %i %i %i %i %i %i %i\n',[[nbs+1:nbs+nbe]' tria*ones(nbe,1) 2*ones(nbe,1) 7*ones(nbe,1) 6*ones(nbe,1) mesh.elements]');
++fprintf(fid,'$EndElements\n');
++
++fclose(fid);
+Index: ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m	(revision 16365)
++++ ../trunk-jpl/src/m/contrib/bamg/exportgmsh.m	(revision 16366)
+@@ -1,52 +0,0 @@
+-function exportgmsh(mesh,groundedice_levelset,filename),
+-%EXPORTGMSH - export mesh to gmsh format
+-%
+-%   http://www.geuz.org/gmsh/doc/texinfo/#MSH-ASCII-file-format
+-%
+-%   Usage:
+-%      exportgmsh(mesh,groundedice_levelset,filename)
+-%
+-%   Example:
+-%      exportgmsh(md.mesh,md.mask.groundedice_levelset,'temp.gmsh')
+-
+-fid=fopen(filename,'w');
+-
+-%Header
+-fprintf(fid,'$MeshFormat\n');
+-fprintf(fid,'2.2 0 8\n');
+-fprintf(fid,'$EndMeshFormat\n');
+-
+-%Vertices
+-nbv = mesh.numberofvertices;
+-fprintf(fid,'$Nodes\n');
+-fprintf(fid,'%i\n',nbv);
+-fprintf(fid,'%i %8g %8g %8g\n',[[1:nbv]' mesh.x mesh.y zeros(nbv,1)]');
+-fprintf(fid,'$EndNodes\n');
+-
+-%Boundary Elements first
+-nbe     = mesh.numberofelements;
+-nbs     = size(mesh.segments,1);
+-segment = 1;
+-tria    = 2;
+-
+-%Create flags
+-grounded = sum(groundedice_levelset(mesh.segments(:,1:2))>0,2);
+-A = zeros(nbs,2);
+-pos = find(mesh.segmentmarkers==4);
+-A(pos,:)=repmat([1,4],[numel(pos) 1]);
+-pos = find(mesh.segmentmarkers==1 &  grounded);
+-A(pos,:)=repmat([2,1],[numel(pos) 1]);
+-pos = find(mesh.segmentmarkers==1 & ~grounded);
+-A(pos,:)=repmat([3,5],[numel(pos) 1]);
+-pos = find(mesh.segmentmarkers==2);
+-A(pos,:)=repmat([4,2],[numel(pos) 1]);
+-pos = find(mesh.segmentmarkers==3);
+-A(pos,:)=repmat([5,3],[numel(pos) 1]);
+-
+-fprintf(fid,'$Elements\n');
+-fprintf(fid,'%i\n',nbe+nbs);
+-fprintf(fid,'%i %i %i %i %i %i %i\n',[[1    :nbs    ]' segment*ones(nbs,1) 2*ones(nbs,1) A mesh.segments(:,1:2)]');
+-fprintf(fid,'%i %i %i %i %i %i %i %i\n',[[nbs+1:nbs+nbe]' tria*ones(nbe,1) 2*ones(nbe,1) 7*ones(nbe,1) 6*ones(nbe,1) mesh.elements]');
+-fprintf(fid,'$EndElements\n');
+-
+-fclose(fid);
Index: issm/oecreview/Archive/16133-16554/ISSM-16366-16367.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16366-16367.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16366-16367.diff	(revision 16556)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/shared/Enum/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16366)
++++ ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16367)
+@@ -72,7 +72,7 @@
+ #include "./Enum.h"
+ #include "../Exceptions/exceptions.h"
+ 
+-int  StringToEnumx(const char* name){
++int  StringToEnumx(const char* name,bool notfounderror){
+ 
+    int  stage=1;
+ 
+@@ -96,7 +96,10 @@
+ #footer
+ cat <<END >> $ISSM_DIR/src/c/shared/Enum/StringToEnumx.cpp
+ 	/*If we reach this point, the string provided has not been found*/
+-	_error_("Enum " << name << " not found");
++	if(notfounderror)
++		_error_("Enum " << name << " not found");
++	else
++		return -1;
+ }
+ END
+ #}}}
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16366)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16367)
+@@ -11,7 +11,7 @@
+ #include "./Enum.h"
+ #include "../Exceptions/exceptions.h"
+ 
+-int  StringToEnumx(const char* name){
++int  StringToEnumx(const char* name,bool notfounderror){
+ 
+    int  stage=1;
+ 
+@@ -618,5 +618,8 @@
+          else stage=6;
+    }
+ 	/*If we reach this point, the string provided has not been found*/
+-	_error_("Enum " << name << " not found");
++	if(notfounderror)
++		_error_("Enum " << name << " not found");
++	else
++		return -1;
+ }
+Index: ../trunk-jpl/src/c/shared/Enum/Enum.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/Enum.h	(revision 16366)
++++ ../trunk-jpl/src/c/shared/Enum/Enum.h	(revision 16367)
+@@ -5,6 +5,6 @@
+ #include "./EnumDefinitions.h"
+ const char* EnumToStringx(int enum_in);
+ void        EnumToStringx(char** string,int enum_in);
+-int         StringToEnumx(const char* string_in);
++int         StringToEnumx(const char* string_in,bool notfounderror=true);
+ 
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16367-16368.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16367-16368.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16367-16368.diff	(revision 16556)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 16367)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 16368)
+@@ -44,7 +44,9 @@
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgia','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isdamage','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'transient.requested_outputs','size',[1 NaN]);
++			if ~isempty(md.transient.requested_outputs),
++				md = checkfield(md,'transient.requested_outputs','size',[1 NaN]);
++			end
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16367)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16368)
+@@ -44,6 +44,7 @@
+ 		qmu              = 0;
+ 
+ 		results          = 0;
++		outputdefinition = 0;
+ 		radaroverlay     = 0;
+ 		miscellaneous    = 0;
+ 		private          = 0;
+@@ -1077,6 +1078,7 @@
+ 			md.qmu              = qmu();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
++			md.outputdefinition = outputdefinition();
+ 			md.miscellaneous    = miscellaneous();
+ 			md.private          = private();
+ 		end
+@@ -1113,6 +1115,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+ 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
++			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(obj.outputdefinition) ']'],'output definition'));
+ 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+ 			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+ 			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
Index: issm/oecreview/Archive/16133-16554/ISSM-16368-16369.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16368-16369.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16368-16369.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16368)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16369)
+@@ -44,7 +44,6 @@
+ 		qmu              = 0;
+ 
+ 		results          = 0;
+-		outputdefinition = 0;
+ 		radaroverlay     = 0;
+ 		miscellaneous    = 0;
+ 		private          = 0;
+@@ -1078,7 +1077,6 @@
+ 			md.qmu              = qmu();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
+-			md.outputdefinition = outputdefinition();
+ 			md.miscellaneous    = miscellaneous();
+ 			md.private          = private();
+ 		end
+@@ -1115,7 +1113,6 @@
+ 			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+ 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
+-			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(obj.outputdefinition) ']'],'output definition'));
+ 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+ 			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+ 			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
Index: issm/oecreview/Archive/16133-16554/ISSM-16369-16370.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16369-16370.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16369-16370.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16369)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16370)
+@@ -55,6 +55,7 @@
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
++		if not md.transient.requested_outputs:
+ 		md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16370-16371.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16370-16371.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16370-16371.diff	(revision 16556)
@@ -0,0 +1,624 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16370)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16371)
+@@ -1765,6 +1765,24 @@
+ 	AM_CONDITIONAL([SLOPE], [test x$HAVE_SLOPE = xyes])
+ 	AC_MSG_RESULT($HAVE_SLOPE)
+ 	dnl }}}
++	dnl with-meshdeformation{{{
++		AC_ARG_WITH([meshdeformation],
++					AS_HELP_STRING([--with-meshdeformation = YES], [compile with meshdeformation capabilities (default is yes)]),
++					[MESHDEFORMATION=$withval],[MESHDEFORMATION=yes]) 
++		  AC_MSG_CHECKING(for meshdeformation capability compilation)
++
++		  if test "x$MESHDEFORMATION" = "xyes"; then
++
++			dnl defaults
++			  HAVE_MESHDEFORMATION=yes
++
++			  AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with meshdeformation capability])
++		  else
++				HAVE_MESHDEFORMATION=no
++		  fi
++	  AM_CONDITIONAL([MESHDEFORMATION], [test x$HAVE_MESHDEFORMATION = xyes])
++	  AC_MSG_RESULT($HAVE_MESHDEFORMATION)
++	  dnl }}}
+ 	dnl with-groundingline{{{
+ 	AC_ARG_WITH([groundingline],
+ 		AS_HELP_STRING([--with-groundingline = YES], [compile with groundingline capabilities (default is yes)]),
+Index: ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp	(revision 16371)
+@@ -0,0 +1,30 @@
++/*!\file: meshdeformation_core.cpp
++ * \brief: core of the slope solution 
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void meshdeformation_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	if(VerboseSolution()) _printf0_("computing mesh deformation (elasticity)...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(MeshdeformationAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("saving results:\n");
++	}
++
++}
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16370)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16371)
+@@ -25,6 +25,7 @@
+ void enthalpy_core(FemModel* femmodel);
+ void surfaceslope_core(FemModel* femmodel);
+ void bedslope_core(FemModel* femmodel);
++void meshdeformation_core(FemModel* femmodel);
+ void control_core(FemModel* femmodel);
+ void controltao_core(FemModel* femmodel);
+ void masstransport_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16370)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16371)
+@@ -331,6 +331,8 @@
+ 	TransientSolutionEnum,
+ 	GiaSolutionEnum,
+ 	GiaAnalysisEnum,
++	MeshdeformationSolutionEnum,
++	MeshdeformationAnalysisEnum,
+ 	/*}}}*/
+ 	/*Approximations {{{*/
+ 	ApproximationEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16370)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16371)
+@@ -337,6 +337,8 @@
+ 		case TransientSolutionEnum : return "TransientSolution";
+ 		case GiaSolutionEnum : return "GiaSolution";
+ 		case GiaAnalysisEnum : return "GiaAnalysis";
++		case MeshdeformationSolutionEnum : return "MeshdeformationSolution";
++		case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis";
+ 		case ApproximationEnum : return "Approximation";
+ 		case NoneApproximationEnum : return "NoneApproximation";
+ 		case SIAApproximationEnum : return "SIAApproximation";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16370)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16371)
+@@ -343,6 +343,8 @@
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
+ 	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
++	      else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum;
++	      else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
+@@ -380,12 +382,12 @@
+ 	      else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+-	      else if (strcmp(name,"Input")==0) return InputEnum;
+-	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
++	      if (strcmp(name,"Input")==0) return InputEnum;
++	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
++	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+@@ -503,12 +505,12 @@
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+ 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+ 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+-	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+-	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
++	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp	(revision 16371)
+@@ -0,0 +1,13 @@
++/*
++ * CreateConstraintsMeshDeformation.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsMeshDeformation(Constraints** pconstraints, IoModel* iomodel){
++
++	/*No constraints*/
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp	(revision 16371)
+@@ -0,0 +1,16 @@
++/*
++ * CreateNodesMeshDeformation.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesMeshDeformation(Nodes** pnodes, IoModel* iomodel){
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	CreateNodes(pnodes,iomodel,MeshdeformationAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp	(revision 16371)
+@@ -0,0 +1,30 @@
++/*
++ * UpdateElementsMeshDeformation:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsMeshDeformation(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp	(revision 16371)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsMeshDeformation.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsMeshDeformation(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16370)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16371)
+@@ -527,6 +527,13 @@
+ 					  ./analyses/surfaceslope_core.cpp\
+ 					  ./analyses/bedslope_core.cpp
+ #}}}
++#MeshDeformation sources  {{{
++meshdeformation_sources =  ./modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp\
++					  ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \
++					  ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
++					  ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
++					  ./analyses/meshdeformation_core.cpp
++#}}}
+ #Gia sources  {{{
+ gia_sources =  ./analyses/gia_core.cpp\
+ 					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
+@@ -933,6 +940,10 @@
+ issm_sources  +=  $(slope_sources)
+ endif
+ 
++if MESHDEFORMATION
++issm_sources  +=  $(meshdeformation_sources)
++endif
++
+ if GROUNDINGLINE
+ issm_sources +=  $(groundingline_sources)
+ endif
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16370)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16371)
+@@ -3208,18 +3208,67 @@
+ 	/*Intermediaries */
+ 	int         i,j;
+ 	int         analysis_type,approximation;
+-	IssmDouble  alpha2,Jdet2d;
++	int         indices[2];
++	IssmDouble  alpha2,Jdet;
+ 	IssmDouble  FSreconditioning,viscosity;
+ 	IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_seg[NUMVERTICES1D][3];
+ 	Friction   *friction = NULL;
+-	GaussTria  *gauss    = NULL;
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+ 	if(IsFloating() || !HasEdgeOnBed()) return NULL;
+ 
+-	_error_("STOP");
++	/*Fetch number of nodes and dof for this finite element*/
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumnodes = this->NumberofNodesPressure();
++	int  numdof   = vnumnodes*NDOF2 + pnumnodes*NDOF1;
++
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
++	IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
++	IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++
++	/*Get vertex indices that lie on bed*/
++	this->EdgeOnBedIndices(&indices[0],&indices[1]);
++	for(i=0;i<NUMVERTICES1D;i++) for(j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j];
++
++	/*build friction object, used later on: */
++	friction=new Friction("1d",inputs,matpar,analysis_type);
++
++	/* Start looping on the number of gauss 1d (nodes on the bedrock) */
++	GaussTria* gauss=new GaussTria(indices[0],indices[1],2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
++
++		_error_("STOP");
++	}
++
++	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
++	//TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list);
++
++	/*Clean up and return*/
++	delete gauss;
++	delete friction;
++	xDelete<IssmDouble>(BFriction);
++	xDelete<IssmDouble>(D);
++	xDelete<int>(cs_list);
++	return Ke;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::CreateKMatrixStressbalanceSSA {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16370)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16371)
+@@ -37,22 +37,24 @@
+ 		void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
+-		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation);
++		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement);
+ 		void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss);
+ 		void GetNodalFunctionsPressure(IssmDouble* basis, GaussTria* gauss);
+ 		void GetSegmentNodalFunctions(IssmDouble* basis,GaussTria* gauss, int index1,int index2);
+ 		void GetSegmentBFlux(IssmDouble* B,GaussTria* gauss, int index1,int index2);
+ 		void GetSegmentBprimeFlux(IssmDouble* Bprime,GaussTria* gauss, int index1,int index2);
+ 		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss);
++		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement);
+ 		void GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss);
++		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement);
+ 		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss);
+-		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int interpolation);
++		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int finiteelement);
+ 		void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
+ 
+ 		int  NumberofNodes(void);
+-		int  NumberofNodes(int interpolation);
++		int  NumberofNodes(int finiteelement);
+ 		int  NumberofNodesVelocity(void);
+ 		int  NumberofNodesPressure(void);
+ 		int  VelocityInterpolation(void);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16370)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16371)
+@@ -56,7 +56,7 @@
+ 	 * by: 
+ 	 *       Bi=[ dN/dx ]
+ 	 *          [ dN/dy ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -86,7 +86,7 @@
+ 	 *       Bi=[ dN/dx           0    ]
+ 	 *          [   0           dN/dy  ]
+ 	 *          [ 1/2*dN/dy  1/2*dN/dx ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -121,7 +121,7 @@
+ 	 *       Bi=[   dN/dx         0     ]
+ 	 *          [       0       dN/dy   ]
+ 	 *          [  1/2*dN/dy  1/2*dN/dx ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -214,7 +214,7 @@
+ 	 *					[  0    ]
+ 	 *					[ phi_p ]
+ 	 *					[  0    ]
+-	 *	where phi is the interpolation function for node i.
++	 *	where phi is the finiteelement function for node i.
+ 	 *	Same thing for Bb except the last column that does not exist.
+ 	 */
+ 
+@@ -270,7 +270,7 @@
+ 	 *					[  0  ]
+ 	 *					[  0  ]
+ 	 *					[ phi ]
+-	 *	where phi is the interpolation function for node i.
++	 *	where phi is the finiteelement function for node i.
+ 	 */
+ 
+ 	/*Fetch number of nodes for this finite element*/
+@@ -316,7 +316,7 @@
+ 	 * by: 
+ 	 *       Bi=[ N ]
+ 	 *          [ N ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B_prog has been allocated already, of size: 2x(NDOF1*numnodes)
+ 	 */
+@@ -347,7 +347,7 @@
+ 	 *       Bi_prime=[ 2*dN/dx    dN/dy ]
+ 	 *                [   dN/dx  2*dN/dy ]
+ 	 *                [   dN/dy    dN/dx ]
+-	 * where hNis the interpolation function for node i.
++	 * where hNis the finiteelement function for node i.
+ 	 *
+ 	 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -382,7 +382,7 @@
+ 	 *               [    0    dN/dy ]
+ 	 *               [  dN/dy  dN/dx ]
+ 	 N               [  dN/dx  dN/dy ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume Bprime has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -417,7 +417,7 @@
+ 	 * by: 
+ 	 *       Bi_prime=[ dN/dx ]
+ 	 *                [ dN/dy ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
+ 	 */
+@@ -446,7 +446,7 @@
+ 	 * by: 
+ 	 *                 Bi=[ N   0 ]
+ 	 *                    [ 0   N ]
+-	 * where N is the interpolation function for node i.
++	 * where N is the finiteelement function for node i.
+ 	 *
+ 	 * We assume B has been allocated already, of size: 2 x (numdof*numnodes)
+ 	 */
+@@ -541,13 +541,13 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){{{*/
+-void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){
++/*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){{{*/
++void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+ 
+ 	_assert_(basis);
+ 
+-	switch(interpolation){
++	switch(finiteelement){
+ 		case P1Enum: case P1DGEnum:
+ 			basis[0]=gauss->coord1;
+ 			basis[1]=gauss->coord2;
+@@ -686,19 +686,26 @@
+ 	xDelete<IssmDouble>(triabasis);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetNodalFunctionsDerivatives{{{*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){{{*/
+ void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){
+ 
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss,this->element_type);
++
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){{{*/
++void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){
++
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * actual coordinate system): */
+ 	IssmDouble    Jinv[2][2];
+ 
+ 	/*Fetch number of nodes for this finite element*/
+-	int numnodes = this->NumberofNodes();
++	int numnodes = this->NumberofNodes(finiteelement);
+ 
+ 	/*Get nodal functions derivatives in reference triangle*/
+ 	IssmDouble* dbasis_ref=xNew<IssmDouble>(2*numnodes);
+-	GetNodalFunctionsDerivativesReference(dbasis_ref,gauss); 
++	GetNodalFunctionsDerivativesReference(dbasis_ref,gauss,finiteelement); 
+ 
+ 	/*Get Jacobian invert: */
+ 	GetJacobianInvert(&Jinv[0][0], xyz_list, gauss);
+@@ -783,14 +790,23 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference{{{*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){{{*/
+ void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){
+ 	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
+ 	 * natural coordinate system) at the gaussian point. */
+ 
++	GetNodalFunctionsDerivativesReference(dbasis,gauss,this->element_type);
++
++}
++/*}}}*/
++/*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){{{*/
++void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){
++	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
++	 * natural coordinate system) at the gaussian point. */
++
+ 	_assert_(dbasis && gauss);
+ 
+-	switch(this->element_type){
++	switch(finiteelement){
+ 		case P1Enum: case P1DGEnum:
+ 			/*Nodal function 1*/
+ 			dbasis[NUMNODESP1*0+0] = -0.5;
+@@ -881,18 +897,18 @@
+ 	GetInputValue(p,plist,gauss,this->element_type);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){{{*/
+-void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){
++/*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){{{*/
++void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){
+ 
+ 	/*Output*/
+ 	IssmDouble value =0.;
+ 
+ 	/*Fetch number of nodes for this finite element*/
+-	int numnodes = this->NumberofNodes(interpolation);
++	int numnodes = this->NumberofNodes(finiteelement);
+ 
+ 	/*Get nodal functions*/
+ 	IssmDouble* basis=xNew<IssmDouble>(numnodes);
+-	GetNodalFunctions(basis, gauss,interpolation);
++	GetNodalFunctions(basis, gauss,finiteelement);
+ 
+ 	/*Calculate parameter for this Gauss point*/
+ 	for(int i=0;i<numnodes;i++) value += basis[i]*plist[i];
+@@ -908,10 +924,10 @@
+ 	return this->NumberofNodes(this->element_type);
+ }
+ /*}}}*/
+-/*FUNCTION TriaRef::NumberofNodes(int interpolation){{{*/
+-int TriaRef::NumberofNodes(int interpolation){
++/*FUNCTION TriaRef::NumberofNodes(int finiteelement){{{*/
++int TriaRef::NumberofNodes(int finiteelement){
+ 
+-	switch(interpolation){
++	switch(finiteelement){
+ 		case P1Enum:                return NUMNODESP1;
+ 		case P1DGEnum:              return NUMNODESP1;
+ 		case P1bubbleEnum:          return NUMNODESP1b;
+Index: ../trunk-jpl/src/m/enum/MeshdeformationSolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshdeformationSolutionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MeshdeformationSolutionEnum.m	(revision 16371)
+@@ -0,0 +1,11 @@
++function macro=MeshdeformationSolutionEnum()
++%MESHDEFORMATIONSOLUTIONENUM - Enum of MeshdeformationSolution
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MeshdeformationSolutionEnum()
++
++macro=StringToEnum('MeshdeformationSolution');
+Index: ../trunk-jpl/src/m/enum/MeshdeformationAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MeshdeformationAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MeshdeformationAnalysisEnum.m	(revision 16371)
+@@ -0,0 +1,11 @@
++function macro=MeshdeformationAnalysisEnum()
++%MESHDEFORMATIONANALYSISENUM - Enum of MeshdeformationAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MeshdeformationAnalysisEnum()
++
++macro=StringToEnum('MeshdeformationAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16370)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16371)
+@@ -329,6 +329,8 @@
+ def TransientSolutionEnum(): return StringToEnum("TransientSolution")[0]
+ def GiaSolutionEnum(): return StringToEnum("GiaSolution")[0]
+ def GiaAnalysisEnum(): return StringToEnum("GiaAnalysis")[0]
++def MeshdeformationSolutionEnum(): return StringToEnum("MeshdeformationSolution")[0]
++def MeshdeformationAnalysisEnum(): return StringToEnum("MeshdeformationAnalysis")[0]
+ def ApproximationEnum(): return StringToEnum("Approximation")[0]
+ def NoneApproximationEnum(): return StringToEnum("NoneApproximation")[0]
+ def SIAApproximationEnum(): return StringToEnum("SIAApproximation")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16371-16372.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16371-16372.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16371-16372.diff	(revision 16556)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/scripts/tai
+===================================================================
+--- ../trunk-jpl/scripts/tai	(revision 16371)
++++ ../trunk-jpl/scripts/tai	(revision 16372)
+@@ -5,5 +5,5 @@
+ fi
+ 
+ DIR=$(ls -rtd1 $EXECUTION_DIR/* | tail -n1)
+-echo "Execution idrectory: $DIR"
++echo "Execution directory: $DIR"
+ tail -f $DIR/*.outlog
Index: issm/oecreview/Archive/16133-16554/ISSM-16372-16373.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16372-16373.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16372-16373.diff	(revision 16556)
@@ -0,0 +1,163 @@
+Index: ../trunk-jpl/src/c/classes/Loads/Friction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 16372)
++++ ../trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 16373)
+@@ -90,8 +90,12 @@
+ 	  replace it by Neff=0 (ie, equival it to an ice shelf)*/
+ 	if (Neff<0)Neff=0;
+ 
+-	if(strcmp(element_type,"2d")==0){
++	if(strcmp(element_type,"1d")==0){
+ 		this->GetInputValue(&vx, gauss,vxenum);
++		vmag=sqrt(vx*vx);
++	}
++	else if(strcmp(element_type,"2d")==0){
++		this->GetInputValue(&vx, gauss,vxenum);
+ 		this->GetInputValue(&vy, gauss,vyenum);
+ 		vmag=sqrt(pow(vx,2)+pow(vy,2));
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16372)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16373)
+@@ -3207,11 +3207,9 @@
+ 
+ 	/*Intermediaries */
+ 	int         i,j;
+-	int         analysis_type,approximation;
++	int         analysis_type;
+ 	int         indices[2];
+ 	IssmDouble  alpha2,Jdet;
+-	IssmDouble  FSreconditioning,viscosity;
+-	IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_seg[NUMVERTICES1D][3];
+ 	Friction   *friction = NULL;
+@@ -3231,13 +3229,12 @@
+ 
+ 	/*Initialize Element matrix and vectors*/
+ 	ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
+-	IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
+-	IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
++	IssmDouble*    BFriction = xNew<IssmDouble>(1*numdof);
++	IssmDouble     D;
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 
+@@ -3255,8 +3252,15 @@
+ 		gauss->GaussPoint(ig);
+ 
+ 		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
++		GetLFS(BFriction,gauss);
+ 
+-		_error_("STOP");
++		friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
++		D = +alpha2*gauss->weight*Jdet; //taub_x = -alpha2 vx
++
++		TripleMultiply(BFriction,1,numdof,1,
++					&D,1,1,0,
++					BFriction,1,numdof,0,
++					Ke->values,1);
+ 	}
+ 
+ 	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
+@@ -3266,7 +3270,6 @@
+ 	delete gauss;
+ 	delete friction;
+ 	xDelete<IssmDouble>(BFriction);
+-	xDelete<IssmDouble>(D);
+ 	xDelete<int>(cs_list);
+ 	return Ke;
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16372)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16373)
+@@ -36,6 +36,7 @@
+ 		void GetSegmentJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
+ 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
++		void GetLFS(IssmDouble* LFS, GaussTria* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement);
+ 		void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16372)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16373)
+@@ -8185,8 +8185,6 @@
+ 	int         i,j;
+ 	int         analysis_type,approximation;
+ 	IssmDouble  alpha2,Jdet2d;
+-	IssmDouble  FSreconditioning,viscosity;
+-	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
+ 	Friction   *friction = NULL;
+@@ -8212,7 +8210,6 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
+ 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
+@@ -8230,9 +8227,6 @@
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
+ 		GetLFS(BFriction,gauss);
+ 
+-		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+-		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
+-
+ 		friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
+ 
+ 		D[0*2+0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16372)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16373)
+@@ -470,6 +470,39 @@
+ 	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::GetLFS{{{*/
++void TriaRef::GetLFS(IssmDouble* LFS, GaussTria* gauss){
++	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
++	 * For node i, Li can be expressed in the actual coordinate system
++	 * by: 
++	 *       Li=[ h 0 0 ]
++	 * where h is the interpolation function for node i.
++	 */
++
++	/*Fetch number of nodes for this finite element*/
++	int pnumnodes = this->NumberofNodesPressure();
++	int vnumnodes = this->NumberofNodesVelocity();
++	int pnumdof   = pnumnodes;
++	int vnumdof   = vnumnodes*NDOF2;
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* vbasis=xNew<IssmDouble>(vnumnodes);
++	GetNodalFunctionsVelocity(vbasis,gauss);
++
++	/*Build LFS: */
++	for(int i=0;i<vnumnodes;i++){
++		LFS[2*i+0] = vbasis[i];
++		LFS[2*i+1] = 0.;
++	}
++
++	for(int i=0;i<pnumnodes;i++){
++		LFS[i+vnumdof+0] = 0.;
++	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(vbasis);
++}
++/*}}}*/
+ /*FUNCTION TriaRef::GetJacobian{{{*/
+ void TriaRef::GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussTria* gauss){
+ 	/*The Jacobian is constant over the element, discard the gaussian points. 
Index: issm/oecreview/Archive/16133-16554/ISSM-16373-16374.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16373-16374.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16373-16374.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16373)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16374)
+@@ -489,8 +489,11 @@
+ 			if (strcmp(output_string,"IceVolume")==0){
+ 				Responsex(&output_value,output_string);
+ 				results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+-
+ 			}
++			else if (strcmp(output_string,"IceVolumeAboveFloatation")==0){
++				Responsex(&output_value,output_string);
++				results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeAboveFloatationEnum,reCast<IssmPDouble>(output_value),step,time));
++			}
+ 			else if (strcmp(output_string,"TotalSmb")==0){
+ 				Responsex(&output_value,output_string);
+ 				results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
Index: issm/oecreview/Archive/16133-16554/ISSM-16374-16375.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16374-16375.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16374-16375.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16374)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16375)
+@@ -56,7 +56,7 @@
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+ 		if not md.transient.requested_outputs:
+-		md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
++			md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
+ 
+ 
+ 		return md
Index: issm/oecreview/Archive/16133-16554/ISSM-16375-16376.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16375-16376.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16375-16376.diff	(revision 16556)
@@ -0,0 +1,146 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16376)
+@@ -0,0 +1,90 @@
++/*!\file GaussSeg.c
++ * \brief: implementation of the GaussSeg object
++ */
++
++#include "./GaussSeg.h"
++#include "../../shared/io/Print/Print.h"
++#include "../../shared/Exceptions/exceptions.h"
++#include "../../shared/MemOps/MemOps.h"
++#include "../../shared/Enum/Enum.h"
++#include "../../shared/Numerics/GaussPoints.h"
++#include "../../shared/Numerics/constants.h"
++
++/*GaussSeg constructors and destructors:*/
++/*FUNCTION GaussSeg::GaussSeg(int order) {{{*/
++GaussSeg::GaussSeg(int order){
++
++	/*Get gauss points*/
++	this->numgauss = order;
++	GaussLegendreLinear(&this->coords1,&this->weights,order);
++
++	/*Initialize static fields as undefinite*/
++	weight=UNDEF;
++	coord1=UNDEF;
++}
++/*}}}*/
++/*FUNCTION GaussSeg::~GaussSeg(){{{*/
++GaussSeg::~GaussSeg(){
++	xDelete<IssmDouble>(weights);
++	xDelete<IssmDouble>(coords1);
++}
++/*}}}*/
++
++/*Methods*/
++/*FUNCTION GaussSeg::Echo{{{*/
++void GaussSeg::Echo(void){
++
++	_printf_("GaussSeg:\n");
++	_printf_("   numgauss: " << numgauss << "\n");
++
++	if (weights){
++	 _printf_("   weights = ["); 
++	 for(int i=0;i<numgauss;i++) _printf_(" " << weights[i] << "\n");
++	 _printf_("]\n");
++	}
++	else _printf_("weights = NULL\n");
++	if (coords1){
++	 _printf_("   coords1 = ["); 
++	 for(int i=0;i<numgauss;i++) _printf_(" " << coords1[i] << "\n");
++	 _printf_("]\n");
++	}
++	_printf_("   weight = " << weight << "\n");
++	_printf_("   coord1 = " << coord1 << "\n");
++
++}
++/*}}}*/
++/*FUNCTION GaussSeg::GaussPoint{{{*/
++void GaussSeg::GaussPoint(int ig){
++
++	/*Check input in debugging mode*/
++	 _assert_(ig>=0 && ig< numgauss);
++
++	 /*update static arrays*/
++	 weight=weights[ig];
++	 coord1=coords1[ig];
++}
++/*}}}*/
++/*FUNCTION GaussSeg::begin{{{*/
++int GaussSeg::begin(void){
++
++	/*Check that this has been initialized*/
++	_assert_(numgauss>0);
++	_assert_(weights);
++	_assert_(coords1);
++
++	/*return first gauss index*/
++	return 0;
++}
++/*}}}*/
++/*FUNCTION GaussSeg::end{{{*/
++int GaussSeg::end(void){
++
++	/*Check that this has been initialized*/
++	_assert_(numgauss>0);
++	_assert_(weights);
++	_assert_(coords1);
++
++	/*return last gauss index +1*/
++	return numgauss;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/gauss/gaussobjects.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/gaussobjects.h	(revision 16375)
++++ ../trunk-jpl/src/c/classes/gauss/gaussobjects.h	(revision 16376)
+@@ -5,6 +5,7 @@
+ #ifndef ALL_GAUSS_OBJECTS_H_
+ #define ALL_GAUSS_OBJECTS_H_
+ 
++#include "./GaussSeg.h"
+ #include "./GaussTria.h"
+ #include "./GaussPenta.h"
+ 
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.h	(revision 16376)
+@@ -0,0 +1,34 @@
++/*!\file GaussSeg.h
++ * \brief: header file for node object
++ */
++
++#ifndef _GAUSSSEG_H_
++#define _GAUSSSEG_H_
++
++/*Headers:*/
++#include "../../shared/Numerics/types.h"
++
++class GaussSeg{
++
++	private:
++		int numgauss;
++		IssmDouble* weights;
++		IssmDouble* coords1;
++
++	public:
++		IssmDouble weight;
++		IssmDouble coord1;
++
++	public:
++
++		/*GaussSeg constructors, destructors*/
++		GaussSeg(int order);
++		~GaussSeg();
++
++		/*Methods*/
++		int  begin(void);
++		int  end(void);
++		void Echo(void);
++		void GaussPoint(int ig);
++};
++#endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16376-16377.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16376-16377.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16376-16377.diff	(revision 16556)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16376)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16377)
+@@ -47,4 +47,58 @@
+ /*}}}*/
+ 
+ /*Reference Element numerics*/
++/*FUNCTION SegRef::GetNodalFunctions{{{*/
++void SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+ 
++	_assert_(basis);
++
++	switch(this->element_type){
++		case P1Enum: case P1DGEnum:
++			basis[0]=(1.-gauss->coord1)/2.;
++			basis[1]=(1.+gauss->coord1)/2.;
++			return;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION SegRef::GetJacobian{{{*/
++void SegRef::GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussSeg* gauss){
++	/*The Jacobian is constant over the element, discard the gaussian points. 
++	 * J is assumed to have been allocated of size 1*/
++
++	IssmDouble x1=xyz_list[3*0+0];
++	IssmDouble y1=xyz_list[3*0+1];
++	IssmDouble z1=xyz_list[3*0+2];
++	IssmDouble x2=xyz_list[3*1+0];
++	IssmDouble y2=xyz_list[3*1+1];
++	IssmDouble z2=xyz_list[3*1+2];
++
++	*Jdet=.5*sqrt(pow(x2-x1,2) + pow(y2-y1,2) + pow(z2-z1,2));
++	if(*Jdet<0) _error_("negative jacobian determinant!");
++}
++/*}}}*/
++/*FUNCTION SegRef::GetJacobianDeterminant{{{*/
++void SegRef::GetJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussSeg* gauss){
++	/*The Jacobian determinant is constant over the element, discard the gaussian points. 
++	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
++
++	/*Call Jacobian routine to get the jacobian:*/
++	GetJacobian(&Jdet, xyz_list, gauss);
++
++}
++/*}}}*/
++/*FUNCTION SegRef::GetJacobianInvert {{{*/
++void SegRef::GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussSeg* gauss){
++
++	/*Jacobian*/
++	IssmDouble J;
++
++	/*Call Jacobian routine to get the jacobian:*/
++	GetJacobian(&J, xyz_list, gauss);
++
++	/*Invert Jacobian matrix: */
++	*Jinv = 1./J;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16376)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16377)
+@@ -21,5 +21,9 @@
+ 
+ 		/*Management*/
+ 		void SetElementType(int type,int type_counter);
++		void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussSeg* gauss);
++		void GetJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussSeg* gauss);
++		void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussSeg* gauss);
++		void GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss);
+ };
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16377-16378.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16377-16378.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16377-16378.diff	(revision 16556)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16377)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16378)
+@@ -24,6 +24,8 @@
+ 					./datastructures/Object.h\
+ 					./datastructures/datastructures.h\
+ 					./classes/classes.h\
++					./classes/gauss/GaussSeg.h\
++					./classes/gauss/GaussSeg.cpp\
+ 					./classes/gauss/GaussTria.h\
+ 					./classes/gauss/GaussTria.cpp\
+ 					./classes/Update.h\
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16377)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16378)
+@@ -75,8 +75,7 @@
+ 	IssmDouble y2=xyz_list[3*1+1];
+ 	IssmDouble z2=xyz_list[3*1+2];
+ 
+-	*Jdet=.5*sqrt(pow(x2-x1,2) + pow(y2-y1,2) + pow(z2-z1,2));
+-	if(*Jdet<0) _error_("negative jacobian determinant!");
++	*J=.5*sqrt(pow(x2-x1,2) + pow(y2-y1,2) + pow(z2-z1,2));
+ }
+ /*}}}*/
+ /*FUNCTION SegRef::GetJacobianDeterminant{{{*/
+@@ -85,7 +84,8 @@
+ 	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
+ 
+ 	/*Call Jacobian routine to get the jacobian:*/
+-	GetJacobian(&Jdet, xyz_list, gauss);
++	GetJacobian(Jdet, xyz_list, gauss);
++	if(*Jdet<0) _error_("negative jacobian determinant!");
+ 
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16378-16379.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16378-16379.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16378-16379.diff	(revision 16556)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 16378)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 16379)
+@@ -63,16 +63,22 @@
+ 
+ 	%Check that file exists
+ 	domainfile=getfieldvalue(options,'domain');
+-	if ~exist(domainfile,'file') error(['bamg error message: file ' domainfile ' not found']); end
+-	
+-	%read domain according to its extension: 
+-	[path,name,ext]=fileparts(domainfile);
+-	if strcmp(ext,'.exp'),
+-		domain=expread(domainfile);
+-	elseif strcmp(ext,'.shp'),
+-		domain=shpread(domainfile);
++	if ischar(domainfile),
++		if ~exist(domainfile,'file') error(['bamg error message: file ' domainfile ' not found']); end
++
++		%read domain according to its extension: 
++		[path,name,ext]=fileparts(domainfile);
++		if strcmp(ext,'.exp'),
++			domain=expread(domainfile);
++		elseif strcmp(ext,'.shp'),
++			domain=shpread(domainfile);
++		else
++			error(['bamg error message: file ' domainfile ' format not supported (.shp or .exp)']);
++		end
++	elseif isstruct(domainfile),
++		domain = domainfile;
+ 	else
+-		error(['bamg error message: file ' domainfile ' format not supported (.shp or .exp)']);
++		error('''domain'' type not supported yet');
+ 	end
+ 
+ 	%Build geometry 
+Index: ../trunk-jpl/src/m/mesh/bamgflowband.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamgflowband.m	(revision 0)
++++ ../trunk-jpl/src/m/mesh/bamgflowband.m	(revision 16379)
+@@ -0,0 +1,34 @@
++function md=bamgflowband(md,x,surf,base,varargin);
++%BAMGFLOWBAND - create flowband mesh with bamg
++%
++%   Usage:
++%      md=bamgflowband(md,x,surf,base,OPTIONS)
++%
++%      surf and bed are the surface elevation and base for each x provided
++%      x must be increasing
++%      OPTIONS are bamg options
++%
++%   Example:
++%      x =[1:100:3000];
++%      h=linspace(1000,300,numel(x));
++%      b=-917/1023*h;
++%      md=bamgflowband(model,b+h,b,'hmax',80,'vertical',1,'Markers',m);
++
++%Write expfile with domain outline
++A=struct();
++A.x=[x;flipud(x);x(1)];
++A.y=[base;flipud(surf);base(1)];
++A.nods = numel(A.x);
++
++%markers:
++m                          = ones(numel(A.x)-1,1); % base        = 1
++m(numel(x))                = 2;                    % right side  = 2
++m(numel(x)+1:2*numel(x)-1) = 3;                    % top surface = 3
++m(2*numel(x))              = 4;                    % left side   = 4
++
++%mesh domain
++md=bamg(model(),'domain',A,'vertical',1,'Markers',m,varargin{:});
++
++%Deal with vertices on bed
++md.mesh.vertexonbed=zeros(md.mesh.numberofvertices,1);
++md.mesh.vertexonbed(find(vertexflags(md.mesh,1)))=1;
Index: issm/oecreview/Archive/16133-16554/ISSM-16379-16380.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16379-16380.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16379-16380.diff	(revision 16556)
@@ -0,0 +1,90 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16379)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16380)
+@@ -169,6 +169,7 @@
+ 	case 611, name='79NorthCMBalThic2dCG';
+ 	case 612, name='79NorthCMBalThic2dDG';
+ 	case 613, name='79NorthCMBalThicVxVy';
++	case 701, name='FlowbandFSshelf';
+ 	case 1101, name='ISMIPAHO';
+ 	case 1102, name='ISMIPAFS';
+ 	case 1103, name='ISMIPBHO';
+Index: ../trunk-jpl/test/NightlyRun/test701.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test701.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test701.m	(revision 16380)
+@@ -0,0 +1,58 @@
++x =[1:100:3000]';
++h=linspace(1000,300,numel(x))';
++b=-917/1023*h;
++
++md=bamgflowband(model(),x,b+h,b,'hmax',80);
++
++%Geometry
++md.geometry.surface   = interp1(x,b+h,md.mesh.x);
++md.geometry.bed       = interp1(x,b,md.mesh.x);
++md.geometry.thickness = md.geometry.surface-md.geometry.bed;
++
++%mask
++md.mask.ice_levelset  = ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(vertexflags(md.mesh,2))) = 0;
++md.mask.groundedice_levelset = double(md.mesh.x<0)-.5;
++
++%materials
++md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_B=paterson(md.initialization.temperature);
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN(md.mesh.numberofvertices,1);
++
++%friction
++md.friction.coefficient=zeros(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(vertexflags(md.mesh,1)))=20;
++md.friction.p=ones(md.mesh.numberofelements,1);
++md.friction.q=ones(md.mesh.numberofelements,1);
++
++%Boundary conditions
++md.stressbalance.referential  = NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce = 0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.spcvx = NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy = NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz = NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvx(find(vertexflags(md.mesh,4)))=0;
++md.stressbalance.spcvy(find(vertexflags(md.mesh,4)))=0;
++%md.stressbalance.spcvx(find(vertexflags(md.mesh,4) | vertexflags(md.mesh,2)))=0;
++%md.stressbalance.spcvy(find(vertexflags(md.mesh,4) | vertexflags(md.mesh,2)))=0;
++
++%Misc
++md=setflowequation(md,'FS','all');
++md.flowequation.fe_FS='TaylorHood';
++md.stressbalance.abstol=NaN;
++md.miscellaneous.name = 'flowline';
++
++%Go solve
++md.cluster=generic('np',2);
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure)};
+Index: ../trunk-jpl/test/Archives/Archive701.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive701.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive701.nc	(revision 16379)
++++ ../trunk-jpl/test/Archives/Archive701.nc	(revision 16380)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive701.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16380-16381.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16380-16381.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16380-16381.diff	(revision 16556)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16380)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16381)
+@@ -443,6 +443,7 @@
+ syn keyword cType GaussianVariogram
+ syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
++syn keyword cType GaussSeg
+ syn keyword cType GaussTria
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+@@ -489,7 +490,9 @@
+ syn keyword cType Results
+ syn keyword cType Riftfront
+ syn keyword cType RiftStruct
++syn keyword cType Seg
+ syn keyword cType Segment
++syn keyword cType SegRef
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+ syn keyword cType SpcTransient
+@@ -830,6 +833,8 @@
+ syn keyword cConstant TransientSolutionEnum
+ syn keyword cConstant GiaSolutionEnum
+ syn keyword cConstant GiaAnalysisEnum
++syn keyword cConstant MeshdeformationSolutionEnum
++syn keyword cConstant MeshdeformationAnalysisEnum
+ syn keyword cConstant ApproximationEnum
+ syn keyword cConstant NoneApproximationEnum
+ syn keyword cConstant SIAApproximationEnum
+@@ -895,6 +900,8 @@
+ syn keyword cConstant SpcTransientEnum
+ syn keyword cConstant StringArrayParamEnum
+ syn keyword cConstant StringParamEnum
++syn keyword cConstant SegEnum
++syn keyword cConstant SegInputEnum
+ syn keyword cConstant TriaEnum
+ syn keyword cConstant TriaInputEnum
+ syn keyword cConstant VertexEnum
+@@ -1079,7 +1086,6 @@
+ syn keyword cConstant BilinearInterpEnum
+ syn keyword cConstant NearestInterpEnum
+ syn keyword cConstant XYEnum
+-syn keyword cConstant XZEnum
+ syn keyword cConstant XYZEnum
+ syn keyword cConstant DenseEnum
+ syn keyword cConstant MpiDenseEnum
Index: issm/oecreview/Archive/16133-16554/ISSM-16381-16382.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16381-16382.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16381-16382.diff	(revision 16556)
@@ -0,0 +1,1319 @@
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16382)
+@@ -48,7 +48,7 @@
+ 
+ 	/*Compute slopes: */
+ 	if(isSIA) surfaceslope_core(femmodel);
+-	if(isFS && meshtype==Mesh3DEnum){
++	if(isFS){
+ 		bedslope_core(femmodel);
+ 		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+ 		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16382)
+@@ -13,22 +13,26 @@
+ 
+ 	/*parameters: */
+ 	bool save_results;
++	int  meshtype;
+ 
+ 	/*Recover some parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 
+ 	if(VerboseSolution()) _printf0_("   computing slope\n");
+ 
+ 	/*Call on core computations: */
+ 	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeXAnalysisEnum);
+ 	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
+-	solutionsequence_linear(femmodel);
++	if(meshtype!=Mesh2DverticalEnum){
++		femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		InputToResultx(femmodel,BedSlopeXEnum);
+-		InputToResultx(femmodel,BedSlopeYEnum);
++		if(meshtype!=Mesh2DverticalEnum) InputToResultx(femmodel,BedSlopeYEnum);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16382)
+@@ -10,7 +10,12 @@
+ 
+ void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchData(1,MeshVertexonbedEnum);
++	}
+ 	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16382)
+@@ -27,4 +27,7 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16382)
+@@ -10,7 +10,12 @@
+ 
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchData(1,MeshVertexonbedEnum);
++	}
+ 	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16381)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16382)
+@@ -91,6 +91,8 @@
+ 					./classes/Inputs/Inputs.cpp\
+ 					./classes/Inputs/Input.h\
+ 					./classes/Inputs/InputLocal.h\
++					./classes/Inputs/SegInput.h\
++					./classes/Inputs/SegInput.cpp\
+ 					./classes/Inputs/TriaInput.h\
+ 					./classes/Inputs/TriaInput.cpp\
+ 					./classes/Inputs/BoolInput.h\
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16382)
+@@ -58,6 +58,7 @@
+ #include "./Inputs/IntInput.h"
+ #include "./Inputs/PentaInput.h"
+ #include "./Inputs/TriaInput.h"
++#include "./Inputs/SegInput.h"
+ #include "./Inputs/ControlInput.h"
+ #include "./Inputs/DatasetInput.h"
+ #include "./Inputs/TransientInput.h"
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16382)
+@@ -245,7 +245,14 @@
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+-			return CreateMassMatrix();
++			int meshtype;
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			if(meshtype==Mesh2DverticalEnum){
++				return CreateBasalMassMatrix();
++			}
++			else{
++				return CreateMassMatrix();
++			}
+ 			break;
+ 		#ifdef _HAVE_MASSTRANSPORT_
+ 		case MasstransportAnalysisEnum:
+@@ -329,6 +336,22 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateBasalMassMatrix{{{*/
++ElementMatrix* Tria::CreateBasalMassMatrix(void){
++
++	if(!HasEdgeOnBed()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnBedIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementMatrix* Ke=seg->CreateMassMatrix();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreateDVector {{{*/
+ void  Tria::CreateDVector(Vector<IssmDouble>* df){
+ 
+@@ -412,7 +435,14 @@
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+-			return CreatePVectorSlope();
++			int meshtype;
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			if(meshtype==Mesh2DverticalEnum){
++				return CreateBasalPVectorSlope();
++			}
++			else{
++				return CreatePVectorSlope();
++			}
+ 			break;
+ 	 	#ifdef _HAVE_MASSTRANSPORT_
+ 		case MasstransportAnalysisEnum:
+@@ -460,6 +490,22 @@
+ 	return NULL;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateBasalPVectorSlope{{{*/
++ElementVector* Tria::CreateBasalPVectorSlope(void){
++
++	if(!HasEdgeOnBed()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnBedIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementVector* pe=seg->CreatePVectorSlope();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorSlope {{{*/
+ ElementVector* Tria::CreatePVectorSlope(void){
+ 
+@@ -2460,6 +2506,36 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Tria::SpawnSeg {{{*/
++Seg*  Tria::SpawnSeg(int index1,int index2){
++
++	int analysis_counter;
++
++	/*go into parameters and get the analysis_counter: */
++	this->parameters->FindParam(&analysis_counter,AnalysisCounterEnum);
++
++	/*Create Seg*/
++	Seg* seg=new Seg();
++	seg->id=this->id;
++	seg->inputs=(Inputs*)this->inputs->SpawnSegInputs(index1,index2);
++	seg->parameters=this->parameters;
++	seg->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
++	this->SpawnSegHook(dynamic_cast<ElementHook*>(seg),index1,index2);
++
++	/*Spawn material*/
++	seg->material=(Material*)this->material->copy();
++	delete seg->material->inputs;
++	seg->material->inputs=(Inputs*)this->material->inputs->SpawnSegInputs(index1,index2);
++
++	/*recover nodes, material and matpar: */
++	seg->nodes    = (Node**)seg->hnodes[analysis_counter]->deliverp();
++	seg->vertices = (Vertex**)seg->hvertices->deliverp();
++	seg->matpar   = (Matpar*)seg->hmatpar->delivers();
++
++	/*Return new Seg*/
++	return seg;
++}
++/*}}}*/
+ /*FUNCTION Tria::SurfaceArea {{{*/
+ IssmDouble Tria::SurfaceArea(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16382)
+@@ -17,6 +17,7 @@
+ class Node;
+ class Material;
+ class Matpar;
++class Seg;
+ class ElementMatrix;
+ class ElementVector;
+ class Vertex;
+@@ -189,6 +190,7 @@
+ 		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
+ 		ElementMatrix* CreateMassMatrix(void);
++		ElementMatrix* CreateBasalMassMatrix(void);
+ 		ElementVector* CreatePVector(void);
+ 		ElementVector* CreatePVectorBalancethickness(void);
+ 		ElementVector* CreatePVectorBalancethickness_DG(void);
+@@ -202,6 +204,7 @@
+ 		ElementVector* CreatePVectorFreeSurfaceTop(void);
+ 		ElementVector* CreatePVectorFreeSurfaceBase(void);
+ 		ElementVector* CreatePVectorSlope(void);
++		ElementVector* CreateBasalPVectorSlope(void);
+ 		IssmDouble     GetArea(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+ 		int            GetElementType(void);
+@@ -227,6 +230,7 @@
+ 		void	         InputUpdateFromSolutionMasstransport(IssmDouble* solution);
+ 		bool	         IsInput(int name);
+ 		void	         SetClone(int* minranks);
++		Seg*	         SpawnSeg(int index1,int index2);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+ 
+ 		#ifdef _HAVE_STRESSBALANCE_
+Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 16382)
+@@ -127,3 +127,30 @@
+ 	triahook->hmatpar=(Hook*)this->hmatpar->copy();
+ }
+ /*}}}*/
++/*FUNCTION ElementHook::SpawnSegHook{{{*/
++void ElementHook::SpawnSegHook(ElementHook* triahook,int index1,int index2){
++
++	triahook->numanalyses=this->numanalyses;
++
++	int indices[2];
++	indices[0]=index1;
++	indices[1]=index2;
++
++	/*Spawn nodes hook*/
++	triahook->hnodes=new Hook*[this->numanalyses];
++	for(int i=0;i<this->numanalyses;i++){
++		/*Do not do anything if Hook is empty*/
++		if (!this->hnodes[i] || this->hnodes[i]->GetNum()==0){
++			triahook->hnodes[i]=NULL;
++		}
++		else{
++			triahook->hnodes[i]=this->hnodes[i]->Spawn(indices,2);
++		}
++	}
++
++	/*do not spawn hmaterial. material will be taken care of by Tria*/
++	triahook->hmaterial=NULL;
++	triahook->hvertices=(Hook*)this->hvertices->Spawn(indices,2);
++	triahook->hmatpar=(Hook*)this->hmatpar->copy();
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16382)
+@@ -47,22 +47,152 @@
+ /*}}}*/
+ 
+ /*Reference Element numerics*/
+-/*FUNCTION SegRef::GetNodalFunctions{{{*/
++/*FUNCTION SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss){{{*/
+ void SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+ 
+ 	_assert_(basis);
+ 
+-	switch(this->element_type){
++	GetNodalFunctions(basis,gauss,this->element_type);
++}
++/*}}}*/
++/*FUNCTION SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss,int finiteelement){{{*/
++void SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss,int finiteelement){
++	/*This routine returns the values of the nodal functions  at the gaussian point.*/
++
++	_assert_(basis);
++
++	switch(element_type){
+ 		case P1Enum: case P1DGEnum:
+ 			basis[0]=(1.-gauss->coord1)/2.;
+ 			basis[1]=(1.+gauss->coord1)/2.;
+ 			return;
+ 		default:
++			_error_("Element type "<<EnumToStringx(element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION SegRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss){{{*/
++void SegRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss){
++
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss,this->element_type);
++
++}
++/*}}}*/
++/*FUNCTION SegRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss,int finiteelement){{{*/
++void SegRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss,int finiteelement){
++
++	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
++	 * actual coordinate system): */
++	IssmDouble    Jinv;
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes(finiteelement);
++
++	/*Get nodal functions derivatives in reference triangle*/
++	IssmDouble* dbasis_ref=xNew<IssmDouble>(numnodes);
++	GetNodalFunctionsDerivativesReference(dbasis_ref,gauss,finiteelement); 
++
++	/*Get Jacobian invert: */
++	GetJacobianInvert(&Jinv, xyz_list, gauss);
++
++	/*Build dbasis: 
++	 * [dhi/dx]= Jinv*[dhi/dr]
++	 */
++	for(int i=0;i<numnodes;i++){
++		dbasis[i] = Jinv*dbasis_ref[i];
++	}
++
++	/*Clean up*/
++	xDelete<IssmDouble>(dbasis_ref);
++
++}
++/*}}}*/
++/*FUNCTION SegRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss){{{*/
++void SegRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss){
++	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
++	 * natural coordinate system) at the gaussian point. */
++
++	GetNodalFunctionsDerivativesReference(dbasis,gauss,this->element_type);
++
++}
++/*}}}*/
++/*FUNCTION SegRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss,int finiteelement){{{*/
++void SegRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss,int finiteelement){
++	/*This routine returns the values of the nodal functions derivatives  (with respect to the 
++	 * natural coordinate system) at the gaussian point. */
++
++	_assert_(dbasis && gauss);
++
++	switch(finiteelement){
++		case P1Enum: case P1DGEnum:
++			/*Nodal function 1*/
++			dbasis[0] = -0.5;
++			/*Nodal function 2*/
++			dbasis[1] = 0.5;
++			return;
++		default:
+ 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+ 	}
++
+ }
+ /*}}}*/
++/*FUNCTION SegRef::GetInputDerivativeValue{{{*/
++void SegRef::GetInputDerivativeValue(IssmDouble* p, IssmDouble* plist,IssmDouble* xyz_list, GaussSeg* gauss){
++
++	/*From node values of parameter p (plist[0],plist[1]), return parameter derivative value at gaussian 
++	 * point specified by gauss_basis:
++	 *   dp/dx=plist[0]*dh1/dx+plist[1]*dh2/dx
++	 *
++	 * p is a vector already allocated.
++	 */
++
++	/*Output*/
++	IssmDouble dpx;
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(1*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
++	/*Calculate parameter for this Gauss point*/
++	for(int i=0;i<numnodes;i++) dpx += dbasis[i]*plist[i];
++
++	/*Assign values*/
++	xDelete<IssmDouble>(dbasis);
++	*p=dpx;
++
++}
++/*}}}*/
++/*FUNCTION SegRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss){{{*/
++void SegRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss){
++
++	GetInputValue(p,plist,gauss,this->element_type);
++}
++/*}}}*/
++/*FUNCTION SegRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss,int finiteelement){{{*/
++void SegRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss,int finiteelement){
++
++	/*Output*/
++	IssmDouble value =0.;
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes(finiteelement);
++
++	/*Get nodal functions*/
++	IssmDouble* basis=xNew<IssmDouble>(numnodes);
++	GetNodalFunctions(basis, gauss,finiteelement);
++
++	/*Calculate parameter for this Gauss point*/
++	for(int i=0;i<numnodes;i++) value += basis[i]*plist[i];
++
++	/*Assign output pointer*/
++	xDelete<IssmDouble>(basis);
++	*p = value;
++}
++/*}}}*/
+ /*FUNCTION SegRef::GetJacobian{{{*/
+ void SegRef::GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussSeg* gauss){
+ 	/*The Jacobian is constant over the element, discard the gaussian points. 
+@@ -102,3 +232,21 @@
+ 	*Jinv = 1./J;
+ }
+ /*}}}*/
++/*FUNCTION SegRef::NumberofNodes(){{{*/
++int SegRef::NumberofNodes(void){
++
++	return this->NumberofNodes(this->element_type);
++}
++/*}}}*/
++/*FUNCTION SegRef::NumberofNodes(int finiteelement){{{*/
++int SegRef::NumberofNodes(int finiteelement){
++
++	switch(finiteelement){
++		case P1Enum:                return NUMNODESP1;
++		case P1DGEnum:              return NUMNODESP1;
++		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	return -1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16382)
+@@ -138,3 +138,93 @@
+ 
+ }
+ /*}}}*/
++
++/*FUNCTION Seg::CreateMassMatrix {{{*/
++ElementMatrix* Seg::CreateMassMatrix(void){
++
++	/* Intermediaries */
++	IssmDouble  D,Jdet;
++	IssmDouble  xyz_list[NUMVERTICES][2];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke    = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/* Start looping on the number of gaussian points: */
++	GaussSeg* gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetNodalFunctions(basis,gauss);
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		D=gauss->weight*Jdet;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++	}
++
++	/*Clean up and return*/
++	delete gauss;
++	xDelete<IssmDouble>(basis);
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Seg::CreatePVectorSlope {{{*/
++ElementVector* Seg::CreatePVectorSlope(void){
++
++	/*Intermediaries */
++	int        i,analysis_type;
++	IssmDouble Jdet;
++	IssmDouble xyz_list[NUMVERTICES][2];
++	IssmDouble slope;
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	Input* slope_input=NULL;
++	if(analysis_type==SurfaceSlopeXAnalysisEnum){
++		slope_input=inputs->GetInput(SurfaceEnum); _assert_(slope_input);
++	}
++	else if(analysis_type==BedSlopeXAnalysisEnum){
++		slope_input=inputs->GetInput(BedEnum);     _assert_(slope_input);
++	}
++	else{
++		_error_("Analysis "<<EnumToStringx(analysis_type)<<" not inplemented yet");
++	}
++
++	/* Start  looping on the number of gaussian points: */
++	GaussSeg* gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		slope_input->GetInputDerivativeValue(&slope,&xyz_list[0][0],gauss);
++
++		for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*slope*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/ElementHook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/ElementHook.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/ElementHook.h	(revision 16382)
+@@ -25,6 +25,7 @@
+ 
+ 		void SetHookNodes(int* node_ids,int numnodes,int analysis_counter);
+ 		void SpawnTriaHook(ElementHook* triahook,int location); //3d only
++		void SpawnSegHook(ElementHook* triahook,int ndex1,int index2); //2d only
+ 		void InitHookNeighbors(int* element_ids);               //3d only
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16382)
+@@ -25,5 +25,16 @@
+ 		void GetJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussSeg* gauss);
+ 		void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussSeg* gauss);
+ 		void GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss);
++		void GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss,int finiteelement);
++		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss);
++		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussSeg* gauss,int finiteelement);
++		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss);
++		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussSeg* gauss,int finiteelement);
++		void GetInputDerivativeValue(IssmDouble* p, IssmDouble* plist,IssmDouble* xyz_list, GaussSeg* gauss);
++		void GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss);
++		void GetInputValue(IssmDouble* p, IssmDouble* plist, GaussSeg* gauss,int finiteelement);
++
++		int  NumberofNodes(void);
++		int  NumberofNodes(int finiteelement);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16382)
+@@ -75,6 +75,7 @@
+ 		void        CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){_error_("not implemented yet");};
+ 		void        CreateDVector(Vector<IssmDouble>* df){_error_("not implemented yet");};
+ 		void        CreatePVector(Vector<IssmDouble>* pf){_error_("not implemented yet");};
++		ElementVector* CreatePVectorSlope(void);
+ 		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("not implemented yet");};
+ 		void        Delta18oParameterization(void){_error_("not implemented yet");};
+ 		int         GetNodeIndex(Node* node){_error_("not implemented yet");};
+@@ -86,6 +87,21 @@
+ 		bool        IsFloating(){_error_("not implemented yet");};
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");};
+ 		bool        NoIceInElement(){_error_("not implemented yet");};
++		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype){_error_("not implemented yet");};
++		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){_error_("not implemented yet");};
++		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
++		void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
++		#ifdef _HAVE_THERMAL_
++		void UpdateBasalConstraintsEnthalpy(void){_error_("not implemented yet");};
++		void ComputeBasalMeltingrate(void){_error_("not implemented yet");};
++		void DrainWaterfraction(void){_error_("not implemented yet");};
++		#endif
++		#ifdef _HAVE_HYDROLOGY_
++		void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){_error_("not implemented yet");};
++		void    GetHydrologyTransfer(Vector<IssmDouble>* transfer){_error_("not implemented yet");};
++		void    HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){_error_("not implemented yet");};
++		void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask){_error_("not implemented yet");};
++		#endif
+ 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution){_error_("not implemented yet");};
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
+ 		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp){_error_("not implemented yet");};
+@@ -172,5 +188,7 @@
+ 		int    UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf){_error_("not implemented yet");};
+ #endif
+ 		/*}}}*/
++		/*Seg specific routines:*/
++		ElementMatrix* CreateMassMatrix(void);
+ };
+ #endif  /* _SEG_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 16382)
+@@ -0,0 +1,106 @@
++/*!\file SegInput.c
++ * \brief: implementation of the SegInput object
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../classes.h"
++#include "../../shared/shared.h"
++
++/*SegInput constructors and destructor*/
++/*FUNCTION SegInput::SegInput(){{{*/
++SegInput::SegInput(){
++	values = NULL;
++}
++/*}}}*/
++/*FUNCTION SegInput::SegInput(int in_enum_type,IssmDouble* invalues,element_type_in){{{*/
++SegInput::SegInput(int in_enum_type,IssmDouble* in_values,int element_type_in)
++	:SegRef(1)
++{
++
++	/*Set SegRef*/
++	this->SetElementType(element_type_in,0);
++	this->element_type=element_type_in;
++
++	/*Set Enum*/
++	enum_type=in_enum_type;
++
++	/*Set values*/
++	this->values=xNew<IssmDouble>(this->NumberofNodes());
++	for(int i=0;i<this->NumberofNodes();i++) values[i]=in_values[i];
++}
++/*}}}*/
++/*FUNCTION SegInput::~SegInput(){{{*/
++SegInput::~SegInput(){
++	xDelete<IssmDouble>(this->values);
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++/*FUNCTION SegInput::Echo {{{*/
++void SegInput::Echo(void){
++	this->DeepEcho();
++}
++/*}}}*/
++/*FUNCTION SegInput::DeepEcho{{{*/
++void SegInput::DeepEcho(void){
++
++	_printf_("SegInput:\n");
++	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++	_printf_("   values: [");
++	for(int i=0;i<this->NumberofNodes();i++) _printf_(" "<<this->values[i]);
++	_printf_("]\n");
++}
++/*}}}*/
++/*FUNCTION SegInput::Id{{{*/
++int    SegInput::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION SegInput::ObjectEnum{{{*/
++int SegInput::ObjectEnum(void){
++
++	return SegInputEnum;
++
++}
++/*}}}*/
++/*FUNCTION SegInput::copy{{{*/
++Object* SegInput::copy() {
++
++	return new SegInput(this->enum_type,this->values,this->element_type);
++
++}
++/*}}}*/
++
++/*SegInput management*/
++/*FUNCTION SegInput::InstanceEnum{{{*/
++int SegInput::InstanceEnum(void){
++
++	return this->enum_type;
++
++}
++/*}}}*/
++
++/*Object functions*/
++/*FUNCTION SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){{{*/
++void SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){
++
++	/*Call SegRef function*/
++	SegRef::GetInputValue(pvalue,&values[0],gauss);
++
++}
++/*}}}*/
++/*FUNCTION SegInput::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussSeg* gauss){{{*/
++void SegInput::GetInputDerivativeValue(IssmDouble* p, IssmDouble* xyz_list, GaussSeg* gauss){
++
++	/*Call SegRef function*/
++	SegRef::GetInputDerivativeValue(p,&values[0],xyz_list,gauss);
++}
++/*}}}*/
++/*FUNCTION SegInput::Configure{{{*/
++void SegInput::Configure(Parameters* parameters){
++	/*do nothing: */
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16382)
+@@ -33,6 +33,7 @@
+ 		/*DoubleInput management: {{{*/
+ 		int   InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+@@ -50,6 +51,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputAverage(IssmDouble* pvalue);
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16382)
+@@ -185,6 +185,10 @@
+ Input* ControlInput::SpawnTriaInput(int location){
+ 	return values->SpawnTriaInput(location);
+ }/*}}}*/
++/*FUNCTION ControlInput::SpawnSegInput{{{*/
++Input* ControlInput::SpawnSegInput(int index1,int index2){
++	return values->SpawnSegInput(index1,index2);
++}/*}}}*/
+ /*FUNCTION ControlInput::SpawnGradient{{{*/
+ ElementResult* ControlInput::SpawnGradient(int step, IssmDouble time){
+ 	_assert_(gradient);
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16382)
+@@ -0,0 +1,87 @@
++/*! \file SegInput.h 
++ *  \brief: header file for SegInput object
++ */
++
++#ifndef _SEGINPUT_H_
++#define _SEGINPUT_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Input.h"
++#include "../Elements/SegRef.h"
++class GaussSeg;
++class GaussPenta;
++/*}}}*/
++
++class SegInput: public Input,public SegRef{
++
++	public:
++		int         enum_type;
++		IssmDouble* values;
++
++		/*SegInput constructors, destructors*/
++		SegInput();
++		SegInput(int enum_type,IssmDouble* values,int element_type_in);
++		~SegInput();
++
++		/*Object virtual functions definitions*/
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
++
++		/*SegInput management:*/
++		int    InstanceEnum();
++		Input* SpawnTriaInput(int location){_error_("not supported yet");};
++		Input* SpawnSegInput(int index1,int index2){_error_("not implemented yet");};
++		Input* PointwiseDivide(Input* inputB){_error_("not supported yet");};
++		Input* PointwiseMin(Input* inputB){_error_("not supported yet");};
++		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
++		ElementResult* SpawnResult(int step, IssmDouble time){_error_("not supported yet");};
++		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
++		void   Configure(Parameters* parameters);
++
++		/*numerics*/
++		void GetInputValue(bool* pvalue){_error_("not implemented yet");}
++		void GetInputValue(int* pvalue){_error_("not implemented yet");}
++		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");}
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss);
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss);
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
++		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
++		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate2d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
++		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
++
++		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
++		void ConstrainMin(IssmDouble minimum){_error_("not implemented yet");};
++		void Set(IssmDouble setvalue){_error_("not implemented yet");};
++		void Scale(IssmDouble scale_factor){_error_("not implemented yet");};
++		void AXPY(Input* xinput,IssmDouble scalar){_error_("not implemented yet");};
++		void Constrain(IssmDouble cm_min, IssmDouble cm_max){_error_("not implemented yet");};
++		IssmDouble InfinityNorm(void){_error_("not implemented yet");};
++		IssmDouble Max(void){_error_("not implemented yet");};
++		IssmDouble MaxAbs(void){_error_("not implemented yet");};
++		IssmDouble Min(void){_error_("not implemented yet");};
++		IssmDouble MinAbs(void){_error_("not implemented yet");};
++		void Extrude(void){_error_("not supported yet");};
++		void VerticallyIntegrate(Input* thickness_input){_error_("not supported yet");};
++		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
++
++};
++#endif  /* _SEGINPUT_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16382)
+@@ -12,6 +12,7 @@
+ class Node;
+ class ElementResult;
+ class GaussTria;
++class GaussSeg;
+ class Parameters;
+ class GaussPenta;
+ template <class doubletype> class Vector;
+@@ -33,6 +34,7 @@
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index)=0;
++		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss)=0;
+ 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss)=0;
+ 		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss)=0;
+ 		virtual void GetInputAverage(IssmDouble* pvalue)=0;
+@@ -64,6 +66,7 @@
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
+ 
+ 		virtual Input* SpawnTriaInput(int location)=0;
++		virtual Input* SpawnSegInput(int index1,int index2)=0;
+ 		virtual Input* PointwiseDivide(Input* inputB)=0;
+ 		virtual Input* PointwiseMax(Input* inputmax)=0;
+ 		virtual Input* PointwiseMin(Input* inputmin)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16382)
+@@ -38,6 +38,7 @@
+ 		/*ControlInput management: {{{*/
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+@@ -56,6 +57,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputAverage(IssmDouble* pvalue);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 16382)
+@@ -95,7 +95,25 @@
+ 	return outinput;
+ }
+ /*}}}*/
++/*FUNCTION DatasetInput::SpawnSegInput{{{*/
++Input* DatasetInput::SpawnSegInput(int index1,int index2){
+ 
++	/*output*/
++	DatasetInput* outinput=NULL;
++
++	/*Create new Datasetinput (copy of current input)*/
++	outinput=new DatasetInput();
++	outinput->enum_type=this->enum_type;
++	outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnSegInputs(index1,index2));
++	outinput->numids=this->numids;
++	outinput->ids=xNew<int>(this->numids);
++	xMemCpy(outinput->ids,this->ids,this->numids);
++
++	/*Assign output*/
++	return outinput;
++}
++/*}}}*/
++
+ /*DatasetInput management*/
+ /*FUNCTION DatasetInput::AddInput{{{*/
+ void DatasetInput::AddInput(Input* input,int id){
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16382)
+@@ -36,6 +36,7 @@
+ 		void   AddInput(Input* input,int id);
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+@@ -53,6 +54,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index);
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16382)
+@@ -84,6 +84,20 @@
+ 	return outinput;
+ }
+ /*}}}*/
++/*FUNCTION IntInput::SpawnSegInput{{{*/
++Input* IntInput::SpawnSegInput(int index1,int index2){
++
++	/*output*/
++	IntInput* outinput=new IntInput();
++
++	/*only copy current value*/
++	outinput->enum_type=this->enum_type;
++	outinput->value=this->value;
++
++	/*Assign output*/
++	return outinput;
++}
++/*}}}*/
+ /*FUNCTION IntInput::SpawnResult{{{*/
+ ElementResult* IntInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16382)
+@@ -85,6 +85,21 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION BoolInput::SpawnSegInput{{{*/
++Input* BoolInput::SpawnSegInput(int index1,int index2){
++
++		/*output*/
++		BoolInput* outinput=new BoolInput();
++
++		/*only copy current value*/
++		outinput->enum_type=this->enum_type;
++		outinput->value=this->value;
++
++		/*Assign output*/
++		return outinput;
++
++}
++/*}}}*/
+ /*FUNCTION BoolInput::SpawnResult{{{*/
+ ElementResult* BoolInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16382)
+@@ -96,6 +96,26 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION SegInput::SpawnSegInput{{{*/
++Input* TriaInput::SpawnSegInput(int index1,int index2){
++
++	/*output*/
++	SegInput* outinput=NULL;
++	IssmDouble newvalues[2]; //Assume P1 interpolation only for now
++
++	/*Create arrow of indices depending on location (0=base 1=surface)*/
++
++	newvalues[0]=this->values[index1];
++	newvalues[1]=this->values[index2];
++
++	/*Create new Seg input*/
++	outinput=new SegInput(this->enum_type,&newvalues[0],P1Enum);
++
++	/*Assign output*/
++	return outinput;
++
++}
++/*}}}*/
+ /*FUNCTION TriaInput::SpawnResult{{{*/
+ ElementResult* TriaInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16382)
+@@ -34,6 +34,7 @@
+ 		/*IntInput management: {{{*/
+ 		int   InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+@@ -51,6 +52,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16382)
+@@ -34,6 +34,7 @@
+ 		/*BoolInput management: {{{*/
+ 		int   InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+@@ -51,6 +52,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 16382)
+@@ -394,6 +394,32 @@
+ 	return newinputs;
+ }
+ /*}}}*/
++/*FUNCTION Inputs::SpawnSegInputs{{{*/
++Inputs* Inputs::SpawnSegInputs(int index1,int index2){
++
++	/*Intermediary*/
++	vector<Object*>::iterator object;
++	Input* inputin=NULL;
++	Input* inputout=NULL;
++
++	/*Output*/
++	Inputs* newinputs=new Inputs();
++
++	/*Go through inputs and call Spawn function*/
++	for ( object=objects.begin() ; object < objects.end(); object++ ){
++
++		/*Create new input*/
++		inputin=dynamic_cast<Input*>(*object);
++		inputout=inputin->SpawnSegInput(index1,index2);
++
++		/*Add input to new inputs*/
++		newinputs->AddObject(inputout);
++	}
++
++	/*Assign output pointer*/
++	return newinputs;
++}
++/*}}}*/
+ /*FUNCTION Inputs::AXPY{{{*/
+ void  Inputs::AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16382)
+@@ -34,6 +34,7 @@
+ 		/*TriaInput management:*/
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+@@ -51,6 +52,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputAverage(IssmDouble* pvalue);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16382)
+@@ -123,6 +123,12 @@
+ 	return outinput;
+ }
+ /*}}}*/
++/*FUNCTION PentaInput::SpawnSegInput{{{*/
++Input* PentaInput::SpawnSegInput(int index1,int index2){
++
++	_error_("not supported");
++}
++/*}}}*/
+ /*FUNCTION PentaInput::SpawnResult{{{*/
+ ElementResult* PentaInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 16382)
+@@ -28,6 +28,8 @@
+ 		void        DuplicateInput(int original_enum,int new_enum);
+ 		Input*      GetInput(int enum_name);
+ 		Inputs*     SpawnTriaInputs(int position);
++		Inputs*     SpawnSegInputs(int index1,int index2);
++		Inputs*     SpawnSegInputs(int position);
+ 		void        AXPY(int inputy_enum, IssmDouble scalar, int inputx_enum);
+ 		IssmDouble  InfinityNorm(int enumtype);
+ 		IssmDouble  Max(int enumtype);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16382)
+@@ -126,6 +126,26 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION TransientInput::SpawnSegInput{{{*/
++Input* TransientInput::SpawnSegInput(int index1,int index2){
++
++	/*output*/
++	TransientInput* outinput=NULL;
++
++	/*Create new Transientinput (copy of current input)*/
++	outinput=new TransientInput();
++	outinput->enum_type=this->enum_type;
++	outinput->numtimesteps=this->numtimesteps;
++	outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
++	xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
++	outinput->inputs=(Inputs*)this->inputs->SpawnSegInputs(index1,index2);
++	outinput->parameters=this->parameters;
++
++	/*Assign output*/
++	return outinput;
++
++}
++/*}}}*/
+ /*FUNCTION TransientInput::SpawnResult{{{*/
+ ElementResult* TransientInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16382)
+@@ -85,6 +85,21 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION DoubleInput::SpawnSegInput{{{*/
++Input* DoubleInput::SpawnSegInput(int index1,int index2){
++
++	/*output*/
++	DoubleInput* outinput=new DoubleInput();
++
++	/*only copy current value*/
++	outinput->enum_type=this->enum_type;
++	outinput->value=this->value;
++
++	/*Assign output*/
++	return outinput;
++
++}
++/*}}}*/
+ /*FUNCTION DoubleInput::SpawnResult{{{*/
+ ElementResult* DoubleInput::SpawnResult(int step, IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16382)
+@@ -34,6 +34,7 @@
+ 		/*PentaInput management*/
+ 		int   InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+@@ -50,6 +51,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss);
+ 		void GetInputAverage(IssmDouble* pvalue);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16382)
+@@ -38,6 +38,7 @@
+ 		/*TransientInput management: {{{*/
+ 		int    InstanceEnum();
+ 		Input* SpawnTriaInput(int location);
++		Input* SpawnSegInput(int index1,int index2);
+ 		Input* PointwiseDivide(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
+@@ -54,6 +55,7 @@
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss,IssmDouble time);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss ,int index){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss ,int index){_error_("not implemented yet");};
++		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputAverage(IssmDouble* pvalue);
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16381)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16382)
+@@ -94,7 +94,7 @@
+ 				analysis_type==DamageEvolutionAnalysisEnum || 
+ 				analysis_type==HydrologyDCEfficientAnalysisEnum
+ 				){
+-		if(iomodel->meshtype==Mesh3DEnum){
++		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum));
+ 			if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
Index: issm/oecreview/Archive/16133-16554/ISSM-16382-16383.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16382-16383.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16382-16383.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16382)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16383)
+@@ -55,7 +55,7 @@
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+-		if not md.transient.requested_outputs:
++		if md.transient.requested_outputs:
+ 			md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
+ 
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16383-16384.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16383-16384.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16383-16384.diff	(revision 16556)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16383)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16384)
+@@ -144,7 +144,7 @@
+ 
+ 	/* Intermediaries */
+ 	IssmDouble  D,Jdet;
+-	IssmDouble  xyz_list[NUMVERTICES][2];
++	IssmDouble  xyz_list[NUMVERTICES][3];
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -184,7 +184,7 @@
+ 	/*Intermediaries */
+ 	int        i,analysis_type;
+ 	IssmDouble Jdet;
+-	IssmDouble xyz_list[NUMVERTICES][2];
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble slope;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16384-16385.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16384-16385.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16384-16385.diff	(revision 16556)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16384)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16385)
+@@ -56,9 +56,8 @@
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+ 		if md.transient.requested_outputs:
+-			md = checkfield(md,'transient.requested_outputs','size',[1, float('NaN')])
++			md = checkfield(md,'transient.requested_outputs','size',[1, float('nan')])
+ 
+-
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 16384)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 16385)
+@@ -64,7 +64,7 @@
+ 		md = checkfield(md,'masstransport.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
+-		if not md.masstransport.requested_outputs:
++		if md.masstransport.requested_outputs:
+ 			md = checkfield(md,'masstransport.requested_outputs','size',[1, float('NaN')])
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16384)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16385)
+@@ -122,7 +122,7 @@
+ 		md = checkfield(md,'stressbalance.maxiter','size',[1],'>=',1)
+ 		md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+-		if not md.stressbalance.requested_outputs:
++		if md.stressbalance.requested_outputs:
+ 			md = checkfield(md,'stressbalance.requested_outputs','size',[1, float('NaN')])
+ 
+ 		#singular solution
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16384)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16385)
+@@ -50,6 +50,9 @@
+ 		if numpy.isnan(md.stressbalance.reltol):
+ 			md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
+ 
++		if md.steadystate.requested_outputs:
++			md = checkfield(md,'steadystate.requested_outputs','size',[1, float('nan')])
++
+ 		return md
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
Index: issm/oecreview/Archive/16133-16554/ISSM-16385-16386.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16385-16386.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16385-16386.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16385)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16386)
+@@ -148,7 +148,7 @@
+ 	 */
+ 
+ 	/*Output*/
+-	IssmDouble dpx;
++	IssmDouble dpx = 0.;
+ 
+ 	/*Fetch number of nodes for this finite element*/
+ 	int numnodes = this->NumberofNodes();
Index: issm/oecreview/Archive/16133-16554/ISSM-16386-16387.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16386-16387.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16386-16387.diff	(revision 16556)
@@ -0,0 +1,182 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16386)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16387)
+@@ -2181,6 +2181,25 @@
+ 	_error_("Could not find 2 vertices on bed");
+ }
+ /*}}}*/
++/*FUNCTION Tria::EdgeOnBedIndex{{{*/
++int Tria::EdgeOnBedIndex(void){
++
++	IssmDouble values[NUMVERTICES];
++	int        indices[3][2] = {{1,2},{2,0},{0,1}};
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonbedEnum);
++
++	for(int i=0;i<3;i++){
++		if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1.){
++			return i;
++		}
++	}
++
++	_printf_("list of vertices on bed: "<<values[0]<<" "<<values[1]<<" "<<values[2]);
++	_error_("Could not find 2 vertices on bed");
++}
++/*}}}*/
+ /*FUNCTION Tria::IsFloating {{{*/
+ bool   Tria::IsFloating(){
+ 
+@@ -2410,6 +2429,50 @@
+ 	delete gauss;
+ }
+ /*}}}*/
++/*FUNCTION Tria::ResetCoordinateSystem{{{*/
++void  Tria::ResetCoordinateSystem(void){
++
++	int        approximation;
++	int        numindices;
++	int       *indices = NULL;
++	IssmDouble slope;
++	IssmDouble xz_plane[6];
++
++	/*For FS only: we want the CS to be tangential to the bedrock*/
++	inputs->GetInputValue(&approximation,ApproximationEnum);
++	if(IsFloating() || !HasEdgeOnBed() || approximation!=FSApproximationEnum) return;
++
++	/*Get number of nodes for velocity only and base*/
++	int index = this->EdgeOnBedIndex();
++	NodeOnEdgeIndices(&numindices,&indices,index,this->VelocityInterpolation());
++
++	/*Get inputs*/
++	Input* slope_input=inputs->GetInput(BedSlopeXEnum); _assert_(slope_input);
++
++	/*Loop over basal nodes and update their CS*/
++	GaussTria* gauss = new GaussTria();
++	for(int i=0;i<numindices;i++){//FIXME
++
++
++		gauss->GaussNode(this->VelocityInterpolation(),indices[i]);
++
++		slope_input->GetInputValue(&slope,gauss);
++
++		IssmDouble theta = atan(slope);
++
++		/*New X axis                  New Z axis*/
++		xz_plane[0]=cos(theta);       xz_plane[3]=0.;  
++		xz_plane[1]=sin(theta);       xz_plane[4]=0.;  
++		xz_plane[2]=0.;               xz_plane[5]=1.;          
++
++		XZvectorsToCoordinateSystem(&this->nodes[indices[i]]->coord_system[0][0],&xz_plane[0]);
++	}
++
++	/*cleanup*/
++	xDelete<int>(indices);
++	delete gauss;
++}
++/*}}}*/
+ /*FUNCTION Tria::RequestedOutput{{{*/
+ void Tria::RequestedOutput(int output_enum,int step,IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16386)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16387)
+@@ -54,6 +54,7 @@
+ 		void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int finiteelement);
+ 		void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss);
+ 
++		void NodeOnEdgeIndices(int* pnumindices,int** pindices,int index,int finiteelement);
+ 		int  NumberofNodes(void);
+ 		int  NumberofNodes(int finiteelement);
+ 		int  NumberofNodesVelocity(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16386)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16387)
+@@ -86,6 +86,7 @@
+ 		bool        IsOnBed();
+ 		bool        HasEdgeOnBed();
+ 		void        EdgeOnBedIndices(int* pindex1,int* pindex);
++		int         EdgeOnBedIndex();
+ 		bool        IsFloating();
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool        NoIceInElement();
+@@ -105,7 +106,7 @@
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void        PatchFill(int* pcount, Patch* patch);
+ 		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+-		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
++		void        ResetCoordinateSystem(void);
+ 		void	      SmbGradients();
+ 		IssmDouble  SurfaceArea(void);
+ 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16386)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16387)
+@@ -1037,3 +1037,63 @@
+ 	return -1;
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::NodeOnEdgeIndices{{{*/
++void TriaRef::NodeOnEdgeIndices(int* pnumindices,int** pindices,int index,int finiteelement){
++
++	/*Output*/
++	int  numindices;
++	int* indices = NULL;
++
++	switch(finiteelement){
++		case P1Enum: case P1DGEnum: case P1bubbleEnum: case P1bubblecondensedEnum:
++			numindices = 2;
++			indices    = xNew<int>(numindices);
++			switch(index){
++				case 0:
++					indices[0] = 1;
++					indices[1] = 2;
++					break;
++				case 1:
++					indices[0] = 2;
++					indices[1] = 0;
++					break;
++				case 2:
++					indices[0] = 0;
++					indices[1] = 1;
++					break;
++				default:
++					_error_("Edge index provided ("<<index<<") is not between 0 and 2");
++			}
++			break;
++		case P2Enum:
++			numindices = 3;
++			indices    = xNew<int>(numindices);
++			switch(index){
++				case 0:
++					indices[0] = 1;
++					indices[1] = 2;
++					indices[2] = 5;
++					break;
++				case 1:
++					indices[0] = 2;
++					indices[1] = 0;
++					indices[2] = 3;
++					break;
++				case 2:
++					indices[0] = 0;
++					indices[1] = 1;
++					indices[2] = 4;
++					break;
++				default:
++					_error_("Edge index provided ("<<index<<") is not between 0 and 2");
++			}
++			break;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++
++	/*Assign output pointer*/
++	*pnumindices = numindices;
++	*pindices    = indices;
++}
++/*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16387-16388.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16387-16388.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16387-16388.diff	(revision 16556)
@@ -0,0 +1,1841 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16388)
+@@ -1,5 +1,6 @@
+ import numpy
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
++from massfluxatgate import massfluxatgate
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -48,3 +49,13 @@
+ md.thermal.stabilization=0
+ md.timestepping.final_time=500.
+ md.timestepping.time_step=1
++
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16388)
+@@ -6,6 +6,7 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
++from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -87,3 +88,13 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
++	
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 16388)
+@@ -42,3 +42,13 @@
+ md.thermal.spctemperature(:)=md.initialization.temperature;
+ md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1); 
+ md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.))=1.*10^-3; %1 mW/m^2
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 16388)
+@@ -56,3 +56,13 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16388)
+@@ -6,6 +6,7 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
++from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -72,3 +73,12 @@
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+ 
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 16388)
+@@ -1,6 +1,7 @@
+ import numpy
+ from paterson import paterson
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
++from massfluxatgate import massfluxatgate
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -46,3 +47,13 @@
+ md.thermal.spctemperature[:]=md.initialization.temperature
+ md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1)) 
+ md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)[0]]=1.*10**-3    #1 mW/m^2
++
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16388)
+@@ -56,3 +56,13 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16388)
+@@ -63,3 +63,13 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16388)
+@@ -60,3 +60,13 @@
+ %Change name so that no tests have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16388)
+@@ -6,6 +6,7 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson 
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
++from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ 
+@@ -74,3 +75,13 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
++	
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16388)
+@@ -65,3 +65,13 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16388)
+@@ -6,6 +6,7 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
++from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -87,3 +88,13 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
++	
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16388)
+@@ -6,6 +6,7 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceSheetBC import SetIceSheetBC
++from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ 
+@@ -76,3 +77,12 @@
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+ 
++#output definitions: 
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++	]
+Index: ../trunk-jpl/test/Par/SquareEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16387)
++++ ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16388)
+@@ -45,3 +45,13 @@
+ md.thermal.stabilization=0;
+ md.timestepping.final_time=500.;
+ md.timestepping.time_step=1;
++
++%output definitions: 
++md.outputdefinition.definitions={...
++		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
++		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
++		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
++		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
++		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
++		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
++	};
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16387)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16388)
+@@ -545,6 +545,13 @@
+ 	TriaP1ElementResultEnum,
+ 	WaterColumnOldEnum,
+ 	/*}}}*/
++	/*Output Definitions{{{*/
++	OutputdefinitionEnum,
++	OutputdefinitionEnumsEnum,
++	MassfluxatgateEnum,
++	MassfluxatgateNameEnum,
++	MassfluxatgateSegmentsEnum,
++	/*}}}*/
+ 	/*Responses{{{*/
+ 	MinVelEnum,
+ 	MaxVelEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16388)
+@@ -534,6 +534,11 @@
+ 		case TimeEnum : return "Time";
+ 		case TriaP1ElementResultEnum : return "TriaP1ElementResult";
+ 		case WaterColumnOldEnum : return "WaterColumnOld";
++		case OutputdefinitionEnum : return "Outputdefinition";
++		case OutputdefinitionEnumsEnum : return "OutputdefinitionEnums";
++		case MassfluxatgateEnum : return "Massfluxatgate";
++		case MassfluxatgateNameEnum : return "MassfluxatgateName";
++		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
+ 		case MinVelEnum : return "MinVel";
+ 		case MaxVelEnum : return "MaxVel";
+ 		case MinVxEnum : return "MinVx";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16388)
+@@ -546,6 +546,11 @@
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+ 	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
++	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
++	      else if (strcmp(name,"OutputdefinitionEnums")==0) return OutputdefinitionEnumsEnum;
++	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
++	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
++	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
+ 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
+ 	      else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
+ 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 16388)
+@@ -0,0 +1,35 @@
++/*!\file OutputDefinitionsResponsex
++ * \brief retrieve vector from inputs in elements
++ */
++
++#include "./OutputDefinitionsResponsex.h"
++#include "../../shared/shared.h"
++#include "../../toolkits/toolkits.h"
++#include "../../classes/classes.h"
++
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,char* output_string){
++
++	int i;
++	Definition* definition=NULL;
++	DataSet* output_definitions=NULL;
++	IssmDouble return_value;
++
++	/*Ok, go find the output definitions dataset in the parameters, where our responses are hiding: */
++	femmodel->parameters->FindParam(&output_definitions,OutputdefinitionEnum); _assert_(output_definitions);
++
++	/*Now, go through the output definitions, and retrieve the object which corresponds to our requested response, output_string: */
++	for (i=0;i<output_definitions->Size();i++){
++		
++		definition=dynamic_cast<Definition*>(output_definitions->GetObjectByOffset(i));
++
++		if (strcmp(definition->Name(),output_string)==0){
++			/*This is the object that we have been chasing for. compute the response and return: */
++			return_value=definition->Response(femmodel);
++			delete output_definitions;
++			return return_value;
++		}
++	}
++	/*If we are here, did not find the definition for this response, not good!: */
++	_error_("Could not find the response for output definition " << output_string << " because could not find the definition itself!");
++
++}
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h	(revision 16388)
+@@ -0,0 +1,12 @@
++/*!\file:  OutputDefinitionsResponsexx.h
++*/ 
++
++#ifndef _OUTPUTDEFINITIONSRESPONSEXX_H
++#define _OUTPUTDEFINITIONSRESPONSEXX_H
++
++#include "../../classes/classes.h"
++
++/* local prototypes: */
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,char* output_string);
++
++#endif  /* _OUTPUTDEFINITIONSRESPONSEXX_H */
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex	(revision 16387)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex	(revision 16388)
+
+Property changes on: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16387)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16388)
+@@ -71,6 +71,7 @@
+ #include "./NodeConnectivityx/NodeConnectivityx.h"
+ #include "./NodesDofx/NodesDofx.h"
+ #include "./Orthx/Orthx.h"
++#include "./OutputDefinitionsResponsex/OutputDefinitionsResponsex.h"
+ #include "./OutputResultsx/OutputResultsx.h"
+ #include "./ConstraintsStatex/ConstraintsStatex.h"
+ #include "./PointCloudFindNeighborsx/PointCloudFindNeighborsx.h"
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16387)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16388)
+@@ -22,6 +22,7 @@
+ void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
++void CreateOutputDefinitions(Parameters** pparameters,IoModel* iomodel);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
+ void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation	(revision 16387)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation	(revision 16388)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16388)
+@@ -0,0 +1,64 @@
++/*!\file: CreateParametersOutputDefinitions.cpp
++ * \brief driver for creating output definitions dataset, and including it into the parameters dataset
++ */ 
++
++#include "../../toolkits/toolkits.h"
++#include "../../classes/classes.h"
++#include "../../shared/shared.h"
++#include "./ModelProcessorx.h"
++
++void CreateOutputDefinitions(Parameters** pparameters,IoModel* iomodel){
++
++	int i,j;
++	
++	Parameters *parameters = NULL;
++	DataSet* output_definitions=NULL;
++	int*     output_definition_enums;
++	int      num_output_definitions;
++	int      numgates;
++	char**   gatenames=NULL;
++	IssmDouble** gatesegments=NULL;
++	int*         gatesegments_M=NULL;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*Create output_definitions dataset: */
++	output_definitions=new DataSet();
++	
++	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionEnumsEnum); 
++	if(num_output_definitions){
++		for (i=0;i<num_output_definitions;i++){
++
++			if (output_definition_enums[i]==MassfluxatgateEnum){
++				/*Deal with mass flux gates:{{{ */
++
++				/*Fetch segments and names: */
++				iomodel->FetchMultipleData(&gatenames,&numgates,MassfluxatgateNameEnum);
++				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,NULL,&numgates,MassfluxatgateSegmentsEnum);
++
++				for(j=0;j<numgates;j++){
++					output_definitions->AddObject(new Massfluxatgate<IssmDouble>(gatenames[j],gatesegments_M[j],gatesegments[j]));
++				}
++				/*Free ressources:*/
++				for(j=0;j<numgates;j++){
++					char* string=gatenames[j]; xDelete<char>(string);
++					IssmDouble* gate=gatesegments[j]; xDelete<IssmDouble>(gate);
++				}
++				xDelete<char*>(gatenames);
++				xDelete<IssmDouble*>(gatesegments);
++				xDelete<int>(gatesegments_M);
++				/*}}}*/
++			}
++			else _error_("output definition enum " << output_definition_enums[i] << "not supported yet!");
++		}
++	}
++	parameters->AddObject(new DataSetParam(OutputdefinitionEnum,output_definitions));
++
++	/*Free ressources:*/
++	delete output_definitions;
++	xDelete<int>(output_definition_enums);
++
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16388)
+@@ -213,6 +213,9 @@
+ 	}
+ 	/*}}}*/
+ 
++	/*Output definitions dataset: */
++	CreateOutputDefinitions(&parameters,iomodel);
++
+ 	/*Solution specific parameters*/
+ 	#ifdef _HAVE_HYDROLOGY_
+ 	CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16387)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16388)
+@@ -575,6 +575,12 @@
+ 				    ./classes/Loads/Riftfront.h\
+ 				    ./modules/ConstraintsStatex/RiftConstraintsState.cpp
+ #}}}
++#Responses sources  {{{
++responses_sources= ./classes/Massfluxatgate.h \
++				   ./modules/ModelProcessorx/CreateOutputDefinitions.cpp\
++				   ./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h\
++				   ./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp
++#}}}
+ #Android sources  {{{
+ android_sources = 
+ #}}}
+@@ -956,6 +962,10 @@
+ issm_sources +=  $(rifts_sources)
+ endif
+ 
++if RESPONSES
++issm_sources +=  $(responses_sources)
++endif
++
+ if ANDROID
+ issm_sources +=  $(android_sources)
+ endif
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16388)
+@@ -16,6 +16,7 @@
+ #include "./DependentObject.h"
+ #include "./IndependentObject.h"
+ #include "./Segment.h"
++#include "./Massfluxatgate.h"
+ 
+ /*Constraints: */
+ #include "./Constraints/Constraints.h"
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16388)
+@@ -22,7 +22,8 @@
+ 
+ 	private: 
+ 		int        id;
+-		int        enum_type;
++		int        enum_type; //in case we have an identifiable enum for this result
++		char*      enum_string;  //in case this result is only identifiable by a unique string, though arbitrary.
+ 		ResultType value;
+ 		int        M;
+ 		int        N;
+@@ -33,7 +34,8 @@
+ 		/*Diverse: must be in front, as it is used in what follows*/
+ 		void GenericEcho(void){/*{{{*/
+ 			_printf_("   id: " << this->id << "\n");
+-			_printf_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++			if(this->enum_type!=-1)_printf_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
++			else _printf_("   string identified:  " << this->enum_string );
+ 			_printf_("   step: " << this->step << "\n");
+ 			_printf_("   time: " << this->time << "\n");
+ 		}
+@@ -45,7 +47,10 @@
+ 			char*   name = NULL;
+ 
+ 			/*First write enum: */
+-			EnumToStringx(&name,this->enum_type);
++			if(this->enum_type!=-1)EnumToStringx(&name,this->enum_type);
++			else{
++				name=xNew<char>(strlen(this->enum_string)+1); xMemCpy<char>(name,enum_string,strlen(this->enum_string)+1);
++			}
+ 			length=(strlen(name)+1)*sizeof(char);
+ 			fwrite(&length,sizeof(int),1,fid);
+ 			fwrite(name,length,1,fid);
+@@ -60,7 +65,8 @@
+ 		/*GenericExternalResult constructors and  destructors*/
+ 		GenericExternalResult(){ /*{{{*/
+ 			id        = 0;
+-			enum_type = NoneEnum;
++			enum_type = -1;
++			enum_string= NULL;
+ 			M         = 0;
+ 			N         = 0;
+ 			step      = 0;
+@@ -68,7 +74,8 @@
+ 		} /*}}}*/
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+ 			id        = 0;
+-			enum_type = NoneEnum;
++			enum_type = -1;
++			enum_string=NULL;
+ 			M         = 0;
+ 			N         = 0;
+ 			step      = 0;
+@@ -79,12 +86,23 @@
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+ 			id        = in_id;
+ 			enum_type = in_enum_type;
++			enum_string = NULL;
+ 			value     = in_value;
+ 			step      = in_step;
+ 			time      = in_time;
+ 		}
+ 		/*}}}*/
++		GenericExternalResult(int in_id, char* in_enum_string,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
++			id        = in_id;
++			enum_type = -1;
++			enum_string = xNew<char>(strlen(in_enum_string)+1); xMemCpy<char>(enum_string,in_enum_string,strlen(in_enum_string)+1);
++			value     = in_value;
++			step      = in_step;
++			time      = in_time;
++		}
++		/*}}}*/
+ 		~GenericExternalResult(){ /*{{{*/
++			if(enum_string)xDelete<char>(enum_string);
+ 		} /*}}}*/
+ 
+ 		/*Object virtual functions definitions:*/
+@@ -103,7 +121,8 @@
+ 			_error_("template ObjectEnum not implemented for this ResultType\n");
+ 		} /*}}}*/
+ 		Object* copy(void) { /*{{{*/
+-			return new GenericExternalResult<ResultType>(this->id,this->enum_type,this->value,this->step,this->time);
++			if(enum_type!=-1) return new GenericExternalResult<ResultType>(this->id,this->enum_type,this->value,this->step,this->time);
++			else              return new GenericExternalResult<ResultType>(this->id,this->enum_string,this->value,this->step,this->time);
+ 		} /*}}}*/
+ 
+ 		/*GenericExternalResult management: */
+@@ -135,7 +154,11 @@
+ 
+ } /*}}}*/
+ void GetResultName(char** pname){ /*{{{*/
+-	EnumToStringx(pname,this->enum_type);
++	if(this->enum_type!=-1)EnumToStringx(pname,this->enum_type);
++	else{
++		char* name=xNew<char>(strlen(enum_string)+1); xMemCpy<char>(name,enum_string,strlen(enum_string)+1);
++		*pname=name;
++	}
+ } /*}}}*/
+ int GetStep(void){ /*{{{*/
+ 	return this->step;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16388)
+@@ -12,6 +12,7 @@
+ #include "../analyses/analyses.h"
+ #include "../shared/io/io.h"
+ #include "./classes.h"
++#include "./modules/modules.h"
+ #include "../shared/Enum/Enum.h"
+ 
+ /*module includes: {{{*/
+@@ -502,6 +503,11 @@
+ 				Responsex(&output_value,output_string);
+ 				results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
+ 			}
++			else if (StringToEnumx(output_string,false)==-1){
++				/*This response can only be computed by going into the output definitions: */
++				output_value=OutputDefinitionsResponsex(this,output_string);
++				results->AddObject(new GenericExternalResult<double>(results->Size()+1,output_string,reCast<IssmPDouble>(output_value),step,time));
++			}
+ 			else{
+ 				/*create this output in the element inputs, and then transfer to results:*/
+ 				for(int j=0;j<elements->Size();j++){
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16388)
+@@ -93,6 +93,7 @@
+ 		virtual void   MaxVz(IssmDouble* pmaxvz)=0;
+ 		virtual void   MaxAbsVz(IssmDouble* pmaxabsvz)=0;
+ 		virtual IssmDouble MassFlux(IssmDouble* segment)=0;
++		virtual IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id)=0;
+ 		virtual void   ElementResponse(IssmDouble* presponse,int response_enum)=0;
+ 		virtual IssmDouble IceVolume(void)=0;
+ 		virtual IssmDouble IceVolumeAboveFloatation(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16388)
+@@ -2891,6 +2891,70 @@
+ }
+ /*}}}*/
+ /*FUNCTION Tria::MassFlux {{{*/
++IssmDouble Tria::MassFlux( IssmDouble x1, IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id){
++
++	int        meshtype;
++	IssmDouble mass_flux=0.;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble normal[2];
++	IssmDouble length,rho_ice;
++	IssmDouble h1,h2;
++	IssmDouble vx1,vx2,vy1,vy2;
++	GaussTria* gauss_1=NULL;
++	GaussTria* gauss_2=NULL;
++
++	/*Get material parameters :*/
++	rho_ice=matpar->GetRhoIce();
++
++	/*First off, check that this segment belongs to this element: */
++	if (segment_id!=this->id)_error_("error message: segment with id " << segment_id << " does not belong to element with id:" << this->id);
++
++	/*Get xyz list: */
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/*get area coordinates of 0 and 1 locations: */
++	gauss_1=new GaussTria();
++	gauss_1->GaussFromCoords(x1,y1,&xyz_list[0][0]);
++	gauss_2=new GaussTria();
++	gauss_2->GaussFromCoords(x2,y2,&xyz_list[0][0]);
++
++	normal[0]=cos(atan2(x1-x2,y2-y1));
++	normal[1]=sin(atan2(x1-x2,y2-y1));
++
++	length=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
++
++	Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
++	this->parameters->FindParam(&meshtype,MeshTypeEnum);
++	Input* vx_input=NULL;
++	Input* vy_input=NULL;
++	if(meshtype==Mesh2DhorizontalEnum){
++		vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++		vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
++	}
++	else{
++		vx_input=inputs->GetInput(VxAverageEnum); _assert_(vx_input);
++		vy_input=inputs->GetInput(VyAverageEnum); _assert_(vy_input);
++	}
++
++	thickness_input->GetInputValue(&h1, gauss_1);
++	thickness_input->GetInputValue(&h2, gauss_2);
++	vx_input->GetInputValue(&vx1,gauss_1);
++	vx_input->GetInputValue(&vx2,gauss_2);
++	vy_input->GetInputValue(&vy1,gauss_1);
++	vy_input->GetInputValue(&vy2,gauss_2);
++
++	mass_flux= rho_ice*length*(  
++				(ONETHIRD*(h1-h2)*(vx1-vx2)+0.5*h2*(vx1-vx2)+0.5*(h1-h2)*vx2+h2*vx2)*normal[0]+
++				(ONETHIRD*(h1-h2)*(vy1-vy2)+0.5*h2*(vy1-vy2)+0.5*(h1-h2)*vy2+h2*vy2)*normal[1]
++				);
++
++	/*clean up and return:*/
++	delete gauss_1;
++	delete gauss_2;
++	return mass_flux;
++}
++/*}}}*/
++/*FUNCTION Tria::MassFlux {{{*/
+ IssmDouble Tria::MassFlux( IssmDouble* segment){
+ 
+ 	int        meshtype;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16388)
+@@ -122,6 +122,7 @@
+ 		void       MinVy(IssmDouble* pminvy);
+ 		void       MinVz(IssmDouble* pminvz);
+ 		IssmDouble MassFlux(IssmDouble* segment);
++		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id);
+ 		void       MaxAbsVx(IssmDouble* pmaxabsvx);
+ 		void       MaxAbsVy(IssmDouble* pmaxabsvy);
+ 		void       MaxAbsVz(IssmDouble* pmaxabsvz);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16388)
+@@ -3748,6 +3748,30 @@
+ 	return mass_flux;
+ }
+ /*}}}*/
++/*FUNCTION Penta::MassFlux {{{*/
++IssmDouble Penta::MassFlux( IssmDouble x1, IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id){
++
++	IssmDouble mass_flux=0;
++
++	if(!IsOnBed()) return mass_flux;
++
++	/*Depth Averaging Vx and Vy*/
++	this->InputDepthAverageAtBase(VxEnum,VxAverageEnum);
++	this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
++
++	/*Spawn Tria element from the base of the Penta: */
++	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
++	mass_flux=tria->MassFlux(x1,y1,x2,y2,segment_id);
++	delete tria->material; delete tria;
++
++	/*Delete Vx and Vy averaged*/
++	this->inputs->DeleteInput(VxAverageEnum);
++	this->inputs->DeleteInput(VyAverageEnum);
++
++	/*clean up and return*/
++	return mass_flux;
++}
++/*}}}*/
+ /*FUNCTION Penta::MaxAbsVx{{{*/
+ void  Penta::MaxAbsVx(IssmDouble* pmaxabsvx){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16388)
+@@ -121,6 +121,7 @@
+ 		void   MinVy(IssmDouble* pminvy);
+ 		void   MinVz(IssmDouble* pminvz);
+ 		IssmDouble MassFlux(IssmDouble* segment);
++		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id);
+ 		void   MaxAbsVx(IssmDouble* pmaxabsvx);
+ 		void   MaxAbsVy(IssmDouble* pmaxabsvy);
+ 		void   MaxAbsVz(IssmDouble* pmaxabsvz);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16388)
+@@ -134,6 +134,7 @@
+ 		void       MinVy(IssmDouble* pminvy){_error_("not implemented yet");};
+ 		void       MinVz(IssmDouble* pminvz){_error_("not implemented yet");};
+ 		IssmDouble MassFlux(IssmDouble* segment){_error_("not implemented yet");};
++		IssmDouble MassFlux(IssmDouble x1,IssmDouble y1, IssmDouble x2, IssmDouble y2,int segment_id){_error_("not implemented yet");}
+ 		void       MaxAbsVx(IssmDouble* pmaxabsvx){_error_("not implemented yet");};
+ 		void       MaxAbsVy(IssmDouble* pmaxabsvy){_error_("not implemented yet");};
+ 		void       MaxAbsVz(IssmDouble* pmaxabsvz){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 16387)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 16388)
+@@ -76,12 +76,15 @@
+ 		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
+ 		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
+ 		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
++		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,int data_enum);
++		void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+ 		void        FetchData(Option **poption,int data_enum);
+ 		void        FetchData(int num,...);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum);
+ 		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value);
+ 		void        LastIndex(int *pindex);
+ 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
++		fpos_t*     SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum);
+ 		void        DeclareIndependents(void);
+ 		void        StartTrace(void);
+ 		void        FetchIndependent(int dependent_enum);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16387)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16388)
+@@ -1079,6 +1079,175 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION IoModel::FetchMultipleData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
++void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,int data_enum){
++
++	int my_rank;
++
++	int i;
++	int num_instances;
++	int* codes=NULL;
++
++	/*output: */
++	int   numstrings=0;
++	char** strings=NULL;
++
++	/*intermediary: */
++	char* string=NULL;
++	int   string_size;
++	int*   code=NULL;
++	fpos_t* file_positions=NULL;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Get file pointers to beginning of the data (multiple instances of it): */
++	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
++
++	if(num_instances){
++
++		strings=xNew<char*>(num_instances);
++
++
++		for(i=0;i<num_instances;i++){
++
++			fsetpos(fid,file_positions+i);
++
++			/*check we are indeed finding a string, not something else: */
++			if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
++
++			/*We have to read a string from disk. First read the dimensions of the string, then the string: */
++			if(my_rank==0){  
++				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
++			}
++
++
++			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++			/*Now allocate string: */
++			if(string_size){
++				string=xNew<char>((string_size+1));
++				string[string_size]='\0';
++
++				/*Read string on node 0, then broadcast: */
++				if(my_rank==0){  
++					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
++				}
++				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
++			}
++			else{
++				string=xNew<char>(1);
++				string[0]='\0';
++			}
++			strings[i]=string;
++		}
++
++	}
++	/*Free ressources:*/
++	xDelete<int>(codes);
++	
++	/*Assign output pointers: */
++	*pstrings=strings;
++	*pnumstrings=num_instances;
++}
++/*}}}*/
++/*FUNCTION IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
++void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
++
++	int i;
++	int num_instances;
++	int my_rank;
++	
++	fpos_t* file_positions=NULL;
++
++	/*output: */
++	IssmDouble** matrices=NULL;
++	int*     mdims=NULL;
++	int*     ndims=NULL;
++
++	/*intermediary: */
++	int     M, N;
++	IssmPDouble *pmatrix = NULL;
++	IssmDouble *matrix = NULL;
++	int*    codes=NULL;
++	int     code;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	
++	/*Get file pointers to beginning of the data (multiple instances of it): */
++	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
++
++	if(num_instances){
++
++		/*Allocate matrices :*/
++		matrices=xNew<IssmDouble*>(num_instances);
++		mdims=xNew<int>(num_instances);
++		ndims=xNew<int>(num_instances);
++
++		for(i=0;i<num_instances;i++){
++
++			fsetpos(fid,file_positions+i);
++			code=codes[i];
++
++			if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
++			
++			/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
++			/*numberofelements: */
++			if(my_rank==0){  
++				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
++			}
++			ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++			if(my_rank==0){  
++				if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
++			}
++			ISSM_MPI_Bcast(&N,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++
++			/*Now allocate matrix: */
++			if(M*N){
++				pmatrix=xNew<IssmPDouble>(M*N);
++
++				/*Read matrix on node 0, then broadcast: */
++				if(my_rank==0){  
++					if(fread(pmatrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
++				}
++				ISSM_MPI_Bcast(pmatrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
++
++				_assert_(this->independents);
++				if (this->independents[data_enum]){
++					/*this data has already been checked out! So cancel all that we've done here, and return 
++					 * the data[data_enum] directly: */
++					matrix=this->data[data_enum];
++				}
++				else{
++					matrix=xNew<IssmDouble>(M*N);
++					for (int i=0;i<M*N;++i) matrix[i]=pmatrix[i];
++				}
++				xDelete<IssmPDouble>(pmatrix);
++			}
++			else
++				matrix=NULL;
++			
++			
++			/*Assign: */
++			mdims[i]=M;
++			matrices[i]=matrix;
++			ndims[i]=N;
++		}
++	}
++			
++	/*Free ressources:*/
++	xDelete<int>(codes);
++
++	/*Assign output pointers: */
++	*pmatrices=matrices;
++	if(pmdims)*pmdims=mdims;
++	if(pndims)*pndims=ndims;
++	*pnumrecords=num_instances;
++}
++/*}}}*/
+ /*FUNCTION IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){{{*/
+ void IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){
+ 
+@@ -1271,7 +1440,6 @@
+ 	/*Broadcast code and vector type: */
+ 	ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 	ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	if(record_code==5) ISSM_MPI_Bcast(&vector_type,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pcode=record_code;
+@@ -1280,3 +1448,106 @@
+ 	return fid;
+ }
+ /*}}}*/
++/*FUNCTION IoModel::SetFilePointersToData{{{*/
++fpos_t* IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum){
++
++	int  my_rank;
++	int  found         = 0;
++	int  record_enum;
++	int  record_length;
++	int  record_code;       //1 to 7 number
++	int  vector_type;       //1 to 7 number
++	int* vector_types   = NULL;
++	int* codes= NULL;
++	int  num_instances  = 0;
++	int  counter;
++	fpos_t* file_positions=NULL;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Go find in the binary file, the data we want to fetch and count the number of 
++	 * instances it appears: */
++	if(my_rank==0){
++
++		/*First set FILE* position to the beginning of the file: */
++		fseek(fid,0,SEEK_SET);
++
++		/*Now march through file looking for the correct data identifier: */
++		for(;;){
++			/*Read enum for this size of first string name: */
++			if(fread(&record_enum,sizeof(int),1,fid)==0){
++				/*Ok, we have reached the end of the file. break: */
++				break;
++			}
++
++			/*Is this the record sought for? : */
++			if (data_enum==record_enum) num_instances++;
++
++			/*Read the record length, and use it to skip the record: */
++			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
++			fseek(fid,record_length,SEEK_CUR);
++		}
++
++		/*Ok, initialize the number of file handles we are going to return: */
++		if(num_instances){
++			file_positions = xNew<fpos_t>(num_instances);
++			codes = xNew<int>(num_instances);
++			vector_types = xNew<int>(num_instances);
++		}
++
++	
++		/*Reset FILE* position to the beginning of the file, and start again, this time saving the data information 
++		 * as we find it: */
++		counter=0;
++		fseek(fid,0,SEEK_SET);
++
++		for(;;){
++			/*Read enum for this size of first string name: */
++			if(fread(&record_enum,sizeof(int),1,fid)==0){
++				/*Ok, we have reached the end of the file. break: */
++				break;
++			}
++
++			/*Is this the record sought for? : */
++			if (data_enum==record_enum){
++				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
++				fseek(fid,sizeof(int),SEEK_CUR);
++				if(fread(&record_code,sizeof(int),1,fid)!=1) _error_("Could not read record_code");
++
++				/*if record_code points to a vector, get its type (nodal or elementary): */
++				if(5<=record_code && record_code<=7){
++					if(fread(&vector_type,sizeof(int),1,fid)!=1) _error_("Could not read vector_type");
++				}
++				codes[counter]=record_code;
++				vector_types[counter]=vector_type;
++				fgetpos(fid,file_positions+counter);
++				
++				/*backup and skip over the record, as we have more work to do: */
++				if(5<=record_code && record_code<=7) fseek(fid,-sizeof(int),SEEK_CUR);
++				fseek(fid,-sizeof(int),SEEK_CUR);
++				fseek(fid,-sizeof(int),SEEK_CUR);
++				
++				/*increment counter: */
++				counter++;
++			}
++
++			/*Read the record length, and use it to skip this record, as it has already been processed: */
++			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
++			/*skip: */
++			fseek(fid,record_length,SEEK_CUR);
++		}
++	}
++
++	/*Broadcast data: */
++	ISSM_MPI_Bcast(&num_instances,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(codes,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	ISSM_MPI_Bcast(vector_types,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++	/*Assign output pointers:*/
++	*pcodes=codes;
++	*pnum_instances=num_instances;
++	if(pvector_types)*pvector_types=vector_types;
++	return file_positions;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Massfluxatgate.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16388)
+@@ -0,0 +1,166 @@
++/*!\file Massfluxatgate.h
++ * \brief: header file for Massfluxatgate object
++ */
++
++#ifndef _MASSFLUXATGATE_H_
++#define _MASSFLUXATGATE_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Definition.h"
++#include "../datastructures/datastructures.h"
++#include "./Elements/Element.h"
++#include "./Elements/Elements.h"
++#include "./FemModel.h"
++/*}}}*/
++
++template <class doubletype> 
++class Massfluxatgate: public Object, public Definition{
++
++	public: 
++
++		char*       name;
++		int         numsegments;
++		doubletype *x1;
++		doubletype *y1;
++		doubletype *x2;
++		doubletype *y2;
++		int*        elements;
++
++		/*Massfluxatgate constructors, destructors :*/
++		/*FUNCTION Massfluxatgate() {{{*/
++		Massfluxatgate(){
++			this->name     = 0;
++			this->numsegments     = 0;
++			this->segments   = 0;
++		}
++		/*}}}*/
++		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* segments) {{{*/
++		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_segments) {
++			
++			int i;
++
++			this->name   = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->numsegments=in_numsegments;
++
++			if(this->numsegments){
++				this->x1=xNew<doubletype>(this->numsegments);
++				this->x2=xNew<doubletype>(this->numsegments);
++				this->y1=xNew<doubletype>(this->numsegments);
++				this->y2=xNew<doubletype>(this->numsegments);
++				this->elements=xNew<int>(this->numsegments);
++
++				for(i=0;i<this->numsegments;i++){
++					this->x1[i]=in_segments[5*i+0];
++					this->y1[i]=in_segments[5*i+1];
++					this->x2[i]=in_segments[5*i+2];
++					this->y2[i]=in_segments[5*i+3];
++					this->elements[i]=reCast<int,doubletype>(in_segments[5*i+4]);
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION Massfluxatgate(char* name, int numsegments, doubletype* x1, doubletype* y1, doubletype* x2, doubletype* y2,int* elements) {{{*/
++		Massfluxatgate(char* in_name, int in_numsegments, doubletype* in_x1, doubletype* in_y1, doubletype* in_x2, doubletype* in_y2,int* in_elements){
++
++			this->name   = xNew<char>(strlen(in_name)+1);
++			xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
++
++			this->numsegments=in_numsegments;
++
++			if(this->numsegments){
++				this->x1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x1,in_x1,this->numsegments);
++				this->y1=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y1,in_y1,this->numsegments);
++				this->x2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->x2,in_x2,this->numsegments);
++				this->y2=xNew<doubletype>(this->numsegments); xMemCpy<doubletype>(this->y2,in_y2,this->numsegments);
++				this->elements=xNew<int>(this->numsegments); xMemCpy<int>(this->elements,in_elements,this->numsegments);
++				
++			}
++		}
++		/*}}}*/
++		/*FUNCTION ~Massfluxatgate() {{{*/
++		~Massfluxatgate(){
++			xDelete<doubletype>(this->x1);
++			xDelete<doubletype>(this->y1);
++			xDelete<doubletype>(this->x2);
++			xDelete<doubletype>(this->y2);
++			xDelete<int>(this->elements);
++			xDelete<char>(this->name);
++		}
++		/*}}}*/
++
++		/*Object virtual function resolutoin: */
++		/*FUNCTION Echo(){{{*/
++		void Echo(void){
++			_printf_(" Massfluxatgate: " << name << "\n");
++			_printf_("    numsegments: " << numsegments << "\n");
++			if(numsegments){
++				_printf_("   element: x1, y1, x2, y2:\n");
++				for(int i=0;i<numsegments;i++){
++					_printf_(elements[i] << " " << x1[i] << " " << y1[i] << " " << x2[i] << " " << y2[i] << "\n");
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION DeepEcho(){{{*/
++		void DeepEcho(void){
++			this->Echo();
++		}
++		/*}}}*/
++		/*FUNCTION Id(){{{*/
++		int Id(void){
++			return -1;
++		}
++		/*}}}*/
++		/*FUNCTION ObjectEnum{{{*/
++		int ObjectEnum(void){
++			return MassfluxatgateEnum;
++		}
++		/*}}}*/
++		/*FUNCTION copy {{{*/
++		Object* copy() {
++			return new Massfluxatgate(this->name,this->numsegments,this->x1,this->y1,this->x2,this->y2,this->elements); 
++		}
++		/*}}}*/
++		/*Definition virtual function resolutoin: */
++		/*FUNCTION char* Name() {{{*/
++		char*  Name(){
++			char* name2=NULL;
++
++			name2=xNew<char>(strlen(this->name)+1);
++			xMemCpy(name2,this->name,strlen(this->name)+1);
++
++			return name2;
++		}
++		/*}}}*/
++		/*FUNCTION doubletype* Response(FemModel* femmodel) {{{*/
++		 IssmDouble Response(FemModel* femmodel){
++
++			int          i,j;
++			Element     *element       = NULL;
++			IssmDouble mass_flux     = 0;
++			IssmDouble all_mass_flux = 0;
++
++			/*Go through segments, and then elements, and figure out which elements belong to a segment. 
++			 * When we find one, use the element to compute the mass flux on the segment: */
++			for(i=0;i<numsegments;i++){
++				for(j=0;j<femmodel->elements->Size();j++){
++					element=(Element*)femmodel->elements->GetObjectByOffset(j);
++					if (element->Id()==this->elements[i]){
++						/*We found the element which owns this segment, use it to compute the mass flux: */
++						mass_flux+=element->MassFlux(x1[i],y1[i],x2[i],y2[i],elements[i]);
++						break;
++					}
++				}
++			}
++
++			ISSM_MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
++			mass_flux=all_mass_flux;
++			return mass_flux;
++		}
++			/*}}}*/
++};
++
++#endif  /* _MASSFLUXATGATE_H_ */
+Index: ../trunk-jpl/src/c/classes/Definition.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Definition.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/Definition.h	(revision 16388)
+@@ -0,0 +1,19 @@
++/*!\file: Definition.h: abstract class used by some objects to behave like response objects 
++ * that can be called according to a string (the output definition)
++ */ 
++
++#ifndef _DEFINITION_H_
++#define  _DEFINITION_H_
++
++/*Headers:*/
++class FemModel;
++class Definition {
++
++	public:
++		virtual       ~Definition(){};
++		virtual char*  Name()=0;
++		virtual IssmDouble  Response(FemModel*)=0;
++
++};
++
++#endif //ifndef _DEFINITION_H_
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 16388)
+@@ -0,0 +1,55 @@
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from checkfield import *
++from WriteData import *
++from MeshProfileIntersection import *
++import os
++
++class massfluxatgate(object):
++	"""
++	MASSFLUXATEGATE class definition
++
++	   Usage:
++		  massfluxatgate=massfluxatgate('GateName','PathToExpFile')
++	"""
++
++	def __init__(self,name,profilename): # {{{
++		self.name           = name
++		self.profilename    = profilename
++		self.segments       = float('NaN')
++
++		#}}}
++	def __repr__(self): # {{{
++
++		string="   Massfluxatgate:"
++		string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this massfluxatgate response'))
++		string="%s\n%s"%(string,fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)'))
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		return self
++	#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		
++		if  not isinstance(self.name, basestring):
++			raise RuntimeError("massfluxatgate error message: 'name' field should be a string!")
++			
++		if  not isinstance(self.profilename, basestring):
++			raise RuntimeError("massfluxatgate error message: 'profilename' field should be a string!") 
++		
++		#check the profilename points to a file!: 
++		if not os.path.isfile(self.profilename):
++			raise RuntimeError("massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!")
++
++		return md
++	# }}}
++	def marshall(self,md,fid):    # {{{
++		
++		#before marshalling, we need to create the segments out of the profilename: 
++		self.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,self.profilename)
++
++		#ok, marshall name and segments: 
++		WriteData(fid,'object',self,'fieldname','name','format','String')
++		WriteData(fid,'object',self,'fieldname','segments','format','DoubleMat','mattype',1)
++
++	# }}}
+
+Property changes on: ../trunk-jpl/src/m/classes/massfluxatgate.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16387)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16388)
+@@ -56,7 +56,7 @@
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+ 		if md.transient.requested_outputs:
+-			md = checkfield(md,'transient.requested_outputs','size',[1, float('nan')])
++			md = checkfield(md,'transient.requested_outputs','cell',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.m	(revision 16388)
+@@ -0,0 +1,64 @@
++%MASSFLUXATGATE class definition
++%
++%   Usage:
++%      massfluxatgate=massfluxatgate();
++%      massfluxatgate=massfluxatgate('GateName','PathToExpFile');
++
++classdef massfluxatgate
++	properties (SetAccess=public)  
++		%massfluxatgate 
++		name                = '';
++		profilename            = ''; 
++	end
++	properties (SetAccess=private)  
++		segments            = NaN;
++	end
++	methods
++		function obj = massfluxatgate(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				case 1
++					obj.name=varargin{1};
++				case 2
++					obj.name=varargin{1};
++					obj.profilename=varargin{2};
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			
++			if ~ischar(obj.name),
++				error('massfluxatgate error message: ''name'' field should be a string!');
++			end
++			if ~ischar(obj.profilename),
++				error('massfluxatgate error message: ''profilename'' field should be a string!');
++			end
++
++			%check the profilename points to a file!: 
++			if exist(obj.profilename,'file')~=2,
++				error('massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!');
++			end
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   Massfluxatgate:\n'));
++
++			fielddisplay(obj,'name','identifier for this massfluxatgate response');
++			fielddisplay(obj,'profilename','name of file (shapefile or argus file) defining a profile (or gate)');
++			
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++
++		%before marshalling, we need to create the segments out of the profilename: 
++		obj.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,obj.profilename);
++
++		%ok, marshall name and segments: 
++		WriteData(fid,'object',obj,'fieldname','name','format','String');
++		WriteData(fid,'object',obj,'fieldname','segments','format','DoubleMat','mattype',1);
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.py	(revision 16387)
++++ ../trunk-jpl/src/m/classes/model.py	(revision 16388)
+@@ -32,6 +32,7 @@
+ from autodiff import autodiff
+ from flaim import flaim
+ from inversion import inversion
++from outputdefinition import outputdefinition
+ from qmu import qmu
+ from results import results
+ from radaroverlay import radaroverlay
+@@ -87,6 +88,7 @@
+ 		self.qmu              = qmu()
+ 
+ 		self.results          = results()
++		self.outputdefinition = outputdefinition()
+ 		self.radaroverlay     = radaroverlay()
+ 		self.miscellaneous    = miscellaneous()
+ 		self.private          = private()
+@@ -124,6 +126,7 @@
+ 		        'flaim',\
+ 		        'inversion',\
+ 		        'qmu',\
++		        'outputdefinition',\
+ 		        'results',\
+ 		        'radaroverlay',\
+ 		        'miscellaneous',\
+@@ -161,6 +164,7 @@
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flaim","[%s,%s]" % ("1x1",obj.flaim.__class__.__name__),"flaim parameters"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("inversion","[%s,%s]" % ("1x1",obj.inversion.__class__.__name__),"parameters for inverse methods"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("qmu","[%s,%s]" % ("1x1",obj.qmu.__class__.__name__),"dakota properties"))
++		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("outputdefinition","[%s,%s]" % ("1x1",obj.outputdefinition.__class__.__name__),"output definition"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("results","[%s,%s]" % ("1x1",obj.results.__class__.__name__),"model results"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("radaroverlay","[%s,%s]" % ("1x1",obj.radaroverlay.__class__.__name__),"radar image for plot overlay"))
+ 		string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("miscellaneous","[%s,%s]" % ("1x1",obj.miscellaneous.__class__.__name__),"miscellaneous fields"))
+Index: ../trunk-jpl/src/m/classes/outputdefinition.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 16388)
+@@ -0,0 +1,51 @@
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from StringToEnum import StringToEnum
++from checkfield import *
++from WriteData import *
++import numpy as npy
++
++class outputdefinition(object):
++	"""
++	OUTPUTDEFINITION class definition
++
++	   Usage:
++	      outputdefinition=outputdefinition();
++	"""
++
++	def __init__(self): # {{{
++		self.definitions                   = []
++		self.enums                         = float('NaN')
++		#}}}
++	def __repr__(self): # {{{
++		string="   Outputdefinitions:"
++
++		string="%s\n%s"%(string,fielddisplay(self,"definitions","list of potential outputs that can be requested, but which need additional data to be defined"))
++
++		return string
++		#}}}
++	def setdefaultparameters(self): # {{{
++		return self
++		#}}}
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		
++		md = checkfield(md,'outputdefinition.definitions','cell',1)
++		for definition in self.definitions:
++			definition.checkconsistency(md,solution,analyses);
++
++	# }}}
++	def marshall(self,md,fid):    # {{{
++		
++		self.enums=npy.zeros(len(self.definitions),)
++		
++		for i in range(len(self.definitions)):
++			self.definitions[i].marshall(md,fid);
++			classdefinition=self.definitions[i].__class__.__name__
++			classdefinition=classdefinition[0].upper()+classdefinition[1:]
++			self.enums[i]=StringToEnum(classdefinition)[0]
++		
++		self.enums=npy.unique(self.enums);
++		
++		WriteData(fid,'object',self,'fieldname','enums','format','DoubleMat','mattype',1)
++
++	# }}}
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16388)
+@@ -0,0 +1,56 @@
++%CONSTANTS class definition
++%
++%   Usage:
++%      outputdefinition=outputdefinition();
++
++classdef outputdefinition
++	properties (SetAccess=public) 
++		definitions                 = {};
++	end
++	properties (SetAccess=private) 
++		enums                 = {};
++	end
++	methods
++		function obj = outputdefinition(varargin) % {{{
++			switch nargin
++				case 0
++					obj=setdefaultparameters(obj);
++				otherwise
++					error('constructor not supported');
++			end
++		end % }}}
++		function obj = setdefaultparameters(obj) % {{{
++
++			obj.definitions={};
++			obj.enums=NaN;
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++
++			md = checkfield(md,'outputdefinition.definitions','cell',1);
++
++			for i=1:length(obj.definitions),
++				md=checkconsistency(obj.definitions{i},md,solution,analyses);
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   outputdefinition:'));
++			fielddisplay(obj,'definitions','list of potential outputs that can be requested, but which need additional data to be defined');
++
++		end % }}}
++		function marshall(obj,md,fid) % {{{
++
++		enums=zeros(length(obj.definitions),1);
++		for i=1:length(obj.definitions),
++			obj.definitions{i}.marshall(md,fid);
++			classdefinition=class(obj.definitions{i});
++			classdefinition(1)=upper(classdefinition(1)); %so it matches our enums definitions.
++			obj.enums(i)=StringToEnum(classdefinition);
++		end
++		obj.enums=unique(obj.enums);
++		
++		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1);
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 16387)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 16388)
+@@ -65,7 +65,7 @@
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
+ 		if md.masstransport.requested_outputs:
+-			md = checkfield(md,'masstransport.requested_outputs','size',[1, float('NaN')])
++			md = checkfield(md,'masstransport.requested_outputs','cell',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16387)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16388)
+@@ -123,7 +123,7 @@
+ 		md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+ 		if md.stressbalance.requested_outputs:
+-			md = checkfield(md,'stressbalance.requested_outputs','size',[1, float('NaN')])
++			md = checkfield(md,'stressbalance.requested_outputs','cell',1);
+ 
+ 		#singular solution
+ #		if ~any((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy))==2),
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16387)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16388)
+@@ -51,7 +51,7 @@
+ 			md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
+ 
+ 		if md.steadystate.requested_outputs:
+-			md = checkfield(md,'steadystate.requested_outputs','size',[1, float('nan')])
++			md = checkfield(md,'steadystate.requested_outputs','cell',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model.m	(revision 16387)
++++ ../trunk-jpl/src/m/classes/model.m	(revision 16388)
+@@ -44,6 +44,7 @@
+ 		qmu              = 0;
+ 
+ 		results          = 0;
++		outputdefinition = 0;
+ 		radaroverlay     = 0;
+ 		miscellaneous    = 0;
+ 		private          = 0;
+@@ -1077,6 +1078,7 @@
+ 			md.qmu              = qmu();
+ 			md.radaroverlay     = radaroverlay();
+ 			md.results          = struct();
++			md.outputdefinition = outputdefinition();
+ 			md.miscellaneous    = miscellaneous();
+ 			md.private          = private();
+ 		end
+@@ -1113,6 +1115,7 @@
+ 			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+ 			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+ 			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
++			disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(obj.outputdefinition) ']'],'output definition'));
+ 			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+ 			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+ 			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnum.m	(revision 16388)
+@@ -0,0 +1,11 @@
++function macro=OutputdefinitionEnum()
++%OUTPUTDEFINITIONENUM - Enum of Outputdefinition
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=OutputdefinitionEnum()
++
++macro=StringToEnum('Outputdefinition');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m	(revision 16388)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateSegmentsEnum()
++%MASSFLUXATGATESEGMENTSENUM - Enum of MassfluxatgateSegments
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateSegmentsEnum()
++
++macro=StringToEnum('MassfluxatgateSegments');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateEnum.m	(revision 16388)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateEnum()
++%MASSFLUXATGATEENUM - Enum of Massfluxatgate
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateEnum()
++
++macro=StringToEnum('Massfluxatgate');
+Index: ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m	(revision 16388)
+@@ -0,0 +1,11 @@
++function macro=MassfluxatgateNameEnum()
++%MASSFLUXATGATENAMEENUM - Enum of MassfluxatgateName
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MassfluxatgateNameEnum()
++
++macro=StringToEnum('MassfluxatgateName');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16387)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16388)
+@@ -526,6 +526,11 @@
+ def TimeEnum(): return StringToEnum("Time")[0]
+ def TriaP1ElementResultEnum(): return StringToEnum("TriaP1ElementResult")[0]
+ def WaterColumnOldEnum(): return StringToEnum("WaterColumnOld")[0]
++def OutputdefinitionEnum(): return StringToEnum("Outputdefinition")[0]
++def OutputdefinitionEnumsEnum(): return StringToEnum("OutputdefinitionEnums")[0]
++def MassfluxatgateEnum(): return StringToEnum("Massfluxatgate")[0]
++def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
++def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
+ def MinVelEnum(): return StringToEnum("MinVel")[0]
+ def MaxVelEnum(): return StringToEnum("MaxVel")[0]
+ def MinVxEnum(): return StringToEnum("MinVx")[0]
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16388)
+@@ -0,0 +1,11 @@
++function macro=OutputdefinitionEnumsEnum()
++%OUTPUTDEFINITIONENUMSENUM - Enum of Outputdefinitions
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=OutputdefinitionEnumsEnum()
++
++macro=StringToEnum('Outputdefinitions');
Index: issm/oecreview/Archive/16133-16554/ISSM-16388-16389.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16388-16389.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16388-16389.diff	(revision 16556)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 0)
++++ ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 16389)
+@@ -0,0 +1,86 @@
++function md = importgmsh(filename)
++
++%some checks
++if ~exist(filename),
++	error(['expread error message: file ' filename ' not found!']);
++end
++
++%open file
++fid=fopen(filename,'r');
++
++%Get Mesh format
++A=fscanf(fid,'%s',1);
++if ~strcmp(A,'$MeshFormat'), 
++	error(['Expecting $MeshFormat (' A ')']);
++end
++A=fscanf(fid,'%f %i %i',[1 3]);
++A=fscanf(fid,'%s',1);
++if ~strcmp(A,'$EndMeshFormat'), 
++	error(['Expecting $EndMeshFormat (' A ')']);
++end
++
++%Nodes
++A=fscanf(fid,'%s',1);
++if ~strcmp(A,'$Nodes'), 
++	error(['Expecting $Nodes (' A ')']);
++end
++nbv=fscanf(fid,'%i',1);
++disp(['Number of nodes: ' num2str(nbv) ]);
++A=fscanf(fid,'%i %f %f %f',[4 nbv]);
++x = A(2,:)';
++y = A(3,:)';
++A=fscanf(fid,'%s',1);
++if ~strcmp(A,'$EndNodes'), 
++	error(['Expecting $EndNodes (' A ')']);
++end
++
++%Elements
++A=fscanf(fid,'%s',1);
++if ~strcmp(A,'$Elements'), 
++	error(['Expecting $Elements (' A ')']);
++end
++nbt=fscanf(fid,'%i',1);
++disp(['Number of elements: ' num2str(nbt) ]);
++counter = 0;
++index   = zeros(0,3);
++segments       = zeros(0,2);
++segmentmarkers = zeros(0,1);
++while(counter<nbt);
++	id = fscanf(fid,'%i',1);
++	ty = fscanf(fid,'%i',1);
++	if(ty>2) error('Type not supported'); end
++	nbf = fscanf(fid,'%i',1);
++	flags = fscanf(fid,'%i',nbf);
++
++	if ty==1,
++		A=fscanf(fid,'%i %i',2);
++		segments(end+1,:)=A;
++		if(flags(1)==5 & flags(2)==3), segmentmarkers(end+1)=3; 
++		elseif(flags(1)==1 & flags(2)==4), segmentmarkers(end+1)=4;
++		elseif(flags(1)==2 & flags(2)==1), segmentmarkers(end+1)=1;
++		elseif(flags(1)==4 & flags(2)==2), segmentmarkers(end+1)=2;
++		else error(['flags ' num2str(flags') ' not supported']);
++		end
++	else
++		A=fscanf(fid,'%i %i %i',3);
++		index(end+1,:)=A;
++	end
++	counter = counter + 1;
++end
++
++%recreate segments
++nbs = size(segments,1);
++segments = [segments zeros(nbs,1)];
++for i=1:nbs,
++	E = find(sum(ismember(index,segments(i,:)),2)>1);
++	segments(i,3)=E;
++end
++
++%close file
++fclose(fid);
++
++%Create model
++md=meshconvert(model,index,x,y);
++md.mesh=mesh2dvertical(md.mesh);
++md.mesh.segmentmarkers=segmentmarkers;
++md.mesh.segments=segments;
Index: issm/oecreview/Archive/16133-16554/ISSM-16389-16390.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16389-16390.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16389-16390.diff	(revision 16556)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16389)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16390)
+@@ -31,6 +31,16 @@
+ 			switch nargin
+ 				case 0
+ 					obj=setdefaultparameters(obj);
++				case 1
++					inputstruct=varargin{1};
++					list1 = properties('mesh2dvertical');
++					list2 = fieldnames(inputstruct);
++					for i=1:length(list1)
++						fieldname = list1{i};
++						if ismember(fieldname,list2),
++							obj.(fieldname) = inputstruct.(fieldname);
++						end
++					end
+ 				otherwise
+ 					error('constructor not supported');
+ 			end
Index: issm/oecreview/Archive/16133-16554/ISSM-16390-16391.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16390-16391.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16390-16391.diff	(revision 16556)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16390)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16391)
+@@ -1108,20 +1108,18 @@
+ 
+ 		strings=xNew<char*>(num_instances);
+ 
+-
+ 		for(i=0;i<num_instances;i++){
+ 
+-			fsetpos(fid,file_positions+i);
+ 
+-			/*check we are indeed finding a string, not something else: */
+-			if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+-
+-			/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+-			if(my_rank==0){  
++			if(my_rank==0){
++				/*check we are indeed finding a string, not something else: */
++				if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
++		
++				/*We have to read a string from disk. First read the dimensions of the string, then the string: */
++				fsetpos(fid,file_positions+i);
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+ 
+-
+ 			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 			/*Now allocate string: */
+@@ -1130,7 +1128,7 @@
+ 				string[string_size]='\0';
+ 
+ 				/*Read string on node 0, then broadcast: */
+-				if(my_rank==0){  
++				if(my_rank==0){
+ 					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 				}
+ 				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+@@ -1187,14 +1185,14 @@
+ 
+ 		for(i=0;i<num_instances;i++){
+ 
+-			fsetpos(fid,file_positions+i);
+-			code=codes[i];
++			if(my_rank==0){
++				code=codes[i];
+ 
+-			if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+-			
+-			/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+-			/*numberofelements: */
+-			if(my_rank==0){  
++				if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
++
++				/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
++				/*numberofelements: */
++				fsetpos(fid,file_positions+i);
+ 				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 			}
+ 			ISSM_MPI_Bcast(&M,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+@@ -1541,8 +1539,6 @@
+ 
+ 	/*Broadcast data: */
+ 	ISSM_MPI_Bcast(&num_instances,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	ISSM_MPI_Bcast(codes,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	ISSM_MPI_Bcast(vector_types,num_instances,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pcodes=codes;
Index: issm/oecreview/Archive/16133-16554/ISSM-16391-16392.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16391-16392.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16391-16392.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16391)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16392)
+@@ -4,7 +4,6 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.stressbalance.requested_outputs={'StressTensor'};
+-md.verbose=verbose('11111111');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: issm/oecreview/Archive/16133-16554/ISSM-16392-16393.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16392-16393.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16392-16393.diff	(revision 16556)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16392)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16393)
+@@ -2,15 +2,16 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+-md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.cluster=generic('name',oshostname(),'np',2);
++md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+-	'StressTensorxx','StressTensoryy','StressTensorxy'};
++	'StressTensorxx','StressTensoryy','StressTensorxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13};
++	1e-13,1e-13,1e-13,...
++	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 };
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+@@ -19,4 +20,10 @@
+ 	(md.results.StressbalanceSolution.StressTensorxx),...
+ 	(md.results.StressbalanceSolution.StressTensoryy),...
+ 	(md.results.StressbalanceSolution.StressTensorxy),...
++	(md.results.StressbalanceSolution.MassFlux1),...
++	(md.results.StressbalanceSolution.MassFlux2),...
++	(md.results.StressbalanceSolution.MassFlux3),...
++	(md.results.StressbalanceSolution.MassFlux4),...
++	(md.results.StressbalanceSolution.MassFlux5),...
++	(md.results.StressbalanceSolution.MassFlux6)...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 16392)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 16393)
+@@ -12,14 +12,15 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=['StressTensor']
++md.stressbalance.requested_outputs=['StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure',\
+-	'StressTensorxx','StressTensoryy','StressTensorxy']
++	'StressTensorxx','StressTensoryy','StressTensorxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13]
++	1e-13,1e-13,1e-13,\
++	1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13 ]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
+@@ -28,4 +29,9 @@
+ 	md.results.StressbalanceSolution.StressTensorxx,\
+ 	md.results.StressbalanceSolution.StressTensoryy,\
+ 	md.results.StressbalanceSolution.StressTensorxy,\
+-	]
++	md.results.StressbalanceSolution.MassFlux1,\
++	md.results.StressbalanceSolution.MassFlux2,\
++	md.results.StressbalanceSolution.MassFlux3,\
++	md.results.StressbalanceSolution.MassFlux4,\
++	md.results.StressbalanceSolution.MassFlux5,\
++	md.results.StressbalanceSolution.MassFlux6 ]
Index: issm/oecreview/Archive/16133-16554/ISSM-16393-16394.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16393-16394.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16393-16394.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 16393)
++++ ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 16394)
+@@ -84,3 +84,5 @@
+ md.mesh=mesh2dvertical(md.mesh);
+ md.mesh.segmentmarkers=segmentmarkers;
+ md.mesh.segments=segments;
++md.mesh.vertexonbed=zeros(md.mesh.numberofvertices,1);
++md.mesh.vertexonbed(find(vertexflags(md.mesh,1)))=1;
Index: issm/oecreview/Archive/16133-16554/ISSM-16394-16395.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16394-16395.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16394-16395.diff	(revision 16556)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/m/mesh/bamgflowband.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamgflowband.m	(revision 16394)
++++ ../trunk-jpl/src/m/mesh/bamgflowband.m	(revision 16395)
+@@ -32,3 +32,5 @@
+ %Deal with vertices on bed
+ md.mesh.vertexonbed=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonbed(find(vertexflags(md.mesh,1)))=1;
++md.mesh.vertexonsurface=zeros(md.mesh.numberofvertices,1);
++md.mesh.vertexonsurface(find(vertexflags(md.mesh,3)))=1;
+Index: ../trunk-jpl/src/m/classes/mesh2dvertical.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16394)
++++ ../trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 16395)
+@@ -18,6 +18,7 @@
+ 
+ 		vertexonboundary            = NaN
+ 		vertexonbed                 = NaN
++		vertexonsurface             = NaN
+ 
+ 		edges                       = NaN
+ 		segments                    = NaN
+@@ -66,6 +67,7 @@
+ 			md = checkfield(md,'mesh.numberofelements','>',0);
+ 			md = checkfield(md,'mesh.numberofvertices','>',0);
+ 			md = checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]);
++			md = checkfield(md,'mesh.vertexonsurface','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+ 			md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
+ 
+ 			switch(solution),
+@@ -88,6 +90,7 @@
+ 			disp(sprintf('\n      Properties:'));
+ 			fielddisplay(obj,'vertexonboundary','vertices on the boundary of the domain flag list');
+ 			fielddisplay(obj,'vertexonbed','vertices on the bed of the domain flag list');
++			fielddisplay(obj,'vertexonsurface','vertices on the surface of the domain flag list');
+ 			fielddisplay(obj,'segments','edges on domain boundary (vertex1 vertex2 element)');
+ 			fielddisplay(obj,'segmentmarkers','number associated to each segment');
+ 			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
+@@ -108,6 +111,7 @@
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','vertexonbed','format','BooleanMat','mattype',1);
++			WriteData(fid,'object',obj,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+ 			WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+ 		end % }}}
+ 		function t = meshtype(obj) % {{{
+Index: ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 16394)
++++ ../trunk-jpl/src/m/contrib/dassflow/importgmsh.m	(revision 16395)
+@@ -86,3 +86,5 @@
+ md.mesh.segments=segments;
+ md.mesh.vertexonbed=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonbed(find(vertexflags(md.mesh,1)))=1;
++md.mesh.vertexonsurface=zeros(md.mesh.numberofvertices,1);
++md.mesh.vertexonsurface(find(vertexflags(md.mesh,3)))=1;
Index: issm/oecreview/Archive/16133-16554/ISSM-16395-16396.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16395-16396.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16395-16396.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/massfluxatgate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 16395)
++++ ../trunk-jpl/src/m/classes/massfluxatgate.py	(revision 16396)
+@@ -46,7 +46,7 @@
+ 	def marshall(self,md,fid):    # {{{
+ 		
+ 		#before marshalling, we need to create the segments out of the profilename: 
+-		self.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,self.profilename)
++		self.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,self.profilename)[0]
+ 
+ 		#ok, marshall name and segments: 
+ 		WriteData(fid,'object',self,'fieldname','name','format','String')
Index: issm/oecreview/Archive/16133-16554/ISSM-16396-16397.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16396-16397.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16396-16397.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive101.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16397-16398.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16397-16398.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16397-16398.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16397)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16398)
+@@ -14,10 +14,22 @@
+ /*FUNCTION GaussSeg::GaussSeg(int order) {{{*/
+ GaussSeg::GaussSeg(int order){
+ 
++	IssmPDouble* pcoords1=NULL;
++	IssmPDouble* pweights=NULL;
++
+ 	/*Get gauss points*/
+ 	this->numgauss = order;
+-	GaussLegendreLinear(&this->coords1,&this->weights,order);
++	GaussLegendreLinear(&pcoords1,&pweights,order);
++	
++	this->coords1=xNew<IssmDouble>(numgauss);
++	this->weights=xNew<IssmDouble>(numgauss);
+ 
++	/*cast : */
++	for(int i=0;i<numgauss;i++){
++		this->coords1[i]=pcoords1[i];
++		this->weights[i]=pweights[i];
++	}
++
+ 	/*Initialize static fields as undefinite*/
+ 	weight=UNDEF;
+ 	coord1=UNDEF;
Index: issm/oecreview/Archive/16133-16554/ISSM-16398-16399.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16398-16399.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16398-16399.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16398)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16399)
+@@ -1072,17 +1072,17 @@
+ 				case 0:
+ 					indices[0] = 1;
+ 					indices[1] = 2;
+-					indices[2] = 5;
++					indices[2] = 3;
+ 					break;
+ 				case 1:
+ 					indices[0] = 2;
+ 					indices[1] = 0;
+-					indices[2] = 3;
++					indices[2] = 4;
+ 					break;
+ 				case 2:
+ 					indices[0] = 0;
+ 					indices[1] = 1;
+-					indices[2] = 4;
++					indices[2] = 5;
+ 					break;
+ 				default:
+ 					_error_("Edge index provided ("<<index<<") is not between 0 and 2");
Index: issm/oecreview/Archive/16133-16554/ISSM-16399-16400.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16399-16400.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16399-16400.diff	(revision 16556)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16399)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16400)
+@@ -14,7 +14,7 @@
+ 	bool        autodiff_analysis;
+ 	int         num_dependent_objects;
+ 	int         num_dep=0;
+-	int*        names=NULL;
++	char**      names=NULL;
+ 	int*        types=NULL;
+ 	int         dummy;
+ 	char*       autodiff_driver=NULL;
+@@ -70,7 +70,7 @@
+ 		num_dep=0;
+ 
+ 		if(num_dependent_objects){
+-			iomodel->FetchData(&names,&dummy,&dummy,AutodiffDependentObjectNamesEnum);
++			iomodel->FetchData(&names,&dummy,AutodiffDependentObjectNamesEnum);
+ 			iomodel->FetchData(&types,&dummy,&dummy,AutodiffDependentObjectTypesEnum);
+ 			iomodel->FetchData(&indices,&dummy,&dummy,AutodiffDependentObjectIndicesEnum);
+ 
+Index: ../trunk-jpl/src/c/classes/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.h	(revision 16399)
++++ ../trunk-jpl/src/c/classes/DependentObject.h	(revision 16400)
+@@ -16,13 +16,13 @@
+ 
+ 	public:
+ 
+-		int name;
++		char* name;
+ 		int type;  /*0: scalar, 1: vertex*/
+ 		int index;  /*0: scalar, 1: vertex*/
+ 
+ 		/*DependentObject constructors, destructors {{{*/
+ 		DependentObject();
+-		DependentObject(int name, int type,int index);
++		DependentObject(char* name, int type,int index);
+ 		~DependentObject();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+Index: ../trunk-jpl/src/c/classes/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16399)
++++ ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16400)
+@@ -14,7 +14,7 @@
+ /*DependentObject constructors and destructor*/
+ /*FUNCTION DependentObject::DependentObject(){{{*/
+ DependentObject::DependentObject(){
+-	this->name=NoneEnum;
++	this->name=NulL;
+ 	this->type=0;
+ 	this->index=-1;
+ }
+@@ -22,7 +22,7 @@
+ /*FUNCTION DependentObject::DependentObject(int in_name, int in_type, int in_index){{{*/
+ DependentObject::DependentObject(int in_name, int in_type,int in_index){
+ 
+-	this->name=in_name;
++	this->name=xNew<char>(strlen(in_name)+1); xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+ 	this->type=in_type;
+ 	this->index=in_index;
+ 	if(in_type!=0 && in_type!=1)_error_("cannot create an DependentObject of type " << in_type);
+@@ -32,6 +32,7 @@
+ /*}}}*/
+ /*FUNCTION DependentObject::~DependentObject() {{{*/
+ DependentObject::~DependentObject(){ //destructor
++	xDelete<char>(this->name);
+ }
+ /*}}}*/
+ 
+@@ -40,7 +41,7 @@
+ void DependentObject::Echo(void){
+ 
+ 	_printf_("DependentObject:\n");
+-	_printf_("   name: " << EnumToStringx(this->name) << "\n");
++	_printf_("   name: " << this->name << "\n");
+ 	if(this->type==0)
+ 		_printf_("   type: scalar\n");
+ 	else if(this->type==1)
+@@ -87,13 +88,11 @@
+ /*FUNCTION DependentObject::Responsex{{{*/
+ void  DependentObject::Responsex(IssmDouble* poutput_value,FemModel* femmodel){
+ 
+-	if(this->name==MassFluxEnum){
+-
+-		/*to identify the mass flux that will be computed, we need the index of the profile: */
+-		femmodel->parameters->SetParam(this->index,IndexEnum);
++	/*Is this some special type of response for which we need to go in the output definitions? :*/
++	if (StringToEnumx(this->name,false)==-1){
++		*poutput_value=OutputDefinitionsResponsex(femmodel,this->name);
+ 	}
++	else femmodel->Responsex(poutput_value,this->name);
+ 
+-	femmodel->Responsex(poutput_value,this->name);
+-
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 16399)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 16400)
+@@ -102,16 +102,16 @@
+ 		WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer')
+ 
+ 		if num_dependent_objects:
+-			names=numpy.zeros(num_dependent_objects)
++			names=[]
+ 			types=numpy.zeros(num_dependent_objects)
+ 			indices=numpy.zeros(num_dependent_objects)
+ 
+ 			for i,dep in enumerate(self.dependents):
+-				names[i]=StringToEnum(dep.name)[0]
++				names[i]=dep.name
+ 				types[i]=dep.typetoscalar()
+ 				indices[i]=dep.index
+ 
+-			WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3)
++			WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray')
+ 			WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3)
+ 			WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3)
+ 		#}}}
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 16399)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 16400)
+@@ -100,18 +100,18 @@
+ 			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
+ 
+ 			if(num_dependent_objects),
+-				names=zeros(num_dependent_objects,1);
++				names={};
+ 				types=zeros(num_dependent_objects,1);
+ 				indices=zeros(num_dependent_objects,1);
+ 
+ 				for i=1:num_dependent_objects,
+ 					dep=obj.dependents{i};
+ 
+-					names(i)=StringToEnum(dep.name);
++					names{i}=dep.name;
+ 					types(i)=dep.typetoscalar();
+ 					indices(i)=dep.index;
+ 				end
+-				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3);
++				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray');
+ 				WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
+ 				WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3);
+ 			end
Index: issm/oecreview/Archive/16133-16554/ISSM-16400-16401.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16400-16401.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16400-16401.diff	(revision 16556)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16400)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16401)
+@@ -2455,9 +2455,7 @@
+ 
+ 
+ 		gauss->GaussNode(this->VelocityInterpolation(),indices[i]);
+-
+ 		slope_input->GetInputValue(&slope,gauss);
+-
+ 		IssmDouble theta = atan(slope);
+ 
+ 		/*New X axis                  New Z axis*/
+@@ -4403,6 +4401,7 @@
+ 	int pnumdof   = pnumnodes*NDOF1;
+ 
+ 	/*Initialize values*/
++	IssmDouble* values   = xNew<IssmDouble>(vnumdof+pnumdof);
+ 	IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
+ 	IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
+ 	IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
+@@ -4410,17 +4409,25 @@
+ 	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* pressure = xNew<IssmDouble>(pnumnodes);
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
+ 	/*Get dof list: */
+ 	GetDofListVelocity(&vdoflist,GsetEnum);
+ 	GetDofListPressure(&pdoflist,GsetEnum);
+ 
+-	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
+-	for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
++	for(i=0;i<vnumdof;i++) values[i]        =solution[vdoflist[i]];
++	for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYEnum);
++	TransformSolutionCoord(&values[0],nodes,vnumnodes+pnumdof,cs_list);
+ 
++	/*Use the dof list to index into the solution vector: */
++	for(i=0;i<vnumdof;i++) vvalues[i]=values[i];
++	for(i=0;i<pnumdof;i++) pvalues[i]=values[vnumnodes+i];
++
+ 	/*Ok, we have vx and vy in values, fill in all arrays: */
+ 	for(i=0;i<vnumnodes;i++){
+ 		vx[i] = vvalues[i*NDOF2+0];
+@@ -4455,10 +4462,12 @@
+ 	xDelete<IssmDouble>(vel);
+ 	xDelete<IssmDouble>(vy);
+ 	xDelete<IssmDouble>(vx);
++	xDelete<IssmDouble>(values);
+ 	xDelete<IssmDouble>(vvalues);
+ 	xDelete<IssmDouble>(pvalues);
+ 	xDelete<int>(vdoflist);
+ 	xDelete<int>(pdoflist);
++	xDelete<int>(cs_list);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionStressbalanceSIA {{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16401-16402.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16401-16402.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16401-16402.diff	(revision 16556)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16401)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16402)
+@@ -81,7 +81,10 @@
+ 			}
+ 
+ 			/*Free ressources:*/
+-			xDelete<int>(names);
++			for(i=0;i<num_dependent_objects;i++){
++				char* string=names[i]; xDelete<char>(string);
++			}
++			xDelete<char*>(names);
+ 			xDelete<int>(types);
+ 			xDelete<int>(indices);
+ 		}
+Index: ../trunk-jpl/src/c/classes/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16401)
++++ ../trunk-jpl/src/c/classes/DependentObject.cpp	(revision 16402)
+@@ -10,17 +10,18 @@
+ 
+ #include "./classes.h"
+ #include "shared/shared.h"
++#include "../modules/modules.h"
+ 
+ /*DependentObject constructors and destructor*/
+ /*FUNCTION DependentObject::DependentObject(){{{*/
+ DependentObject::DependentObject(){
+-	this->name=NulL;
++	this->name=NULL;
+ 	this->type=0;
+ 	this->index=-1;
+ }
+ /*}}}*/
+ /*FUNCTION DependentObject::DependentObject(int in_name, int in_type, int in_index){{{*/
+-DependentObject::DependentObject(int in_name, int in_type,int in_index){
++DependentObject::DependentObject(char* in_name, int in_type,int in_index){
+ 
+ 	this->name=xNew<char>(strlen(in_name)+1); xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+ 	this->type=in_type;
Index: issm/oecreview/Archive/16133-16554/ISSM-16402-16403.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16402-16403.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16402-16403.diff	(revision 16556)
@@ -0,0 +1,97 @@
+Index: ../trunk-jpl/test/Par/SquareShelf2.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16402)
++++ ../trunk-jpl/test/Par/SquareShelf2.py	(revision 16403)
+@@ -6,7 +6,6 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -88,13 +87,3 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
+-	
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareShelf2.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16402)
++++ ../trunk-jpl/test/Par/SquareShelf2.par	(revision 16403)
+@@ -56,13 +56,3 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16402)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16403)
+@@ -3,7 +3,18 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',2);
++
++%output
+ md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++md.outputdefinition.definitions={...
++	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
++	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
++	massfluxatgate('MassFlux3',['../Exp/MassFlux3.exp']),...
++	massfluxatgate('MassFlux4',['../Exp/MassFlux4.exp']),...
++	massfluxatgate('MassFlux5',['../Exp/MassFlux5.exp']),...
++	massfluxatgate('MassFlux6',['../Exp/MassFlux6.exp'])...
++	};
++
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 16402)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 16403)
+@@ -6,13 +6,25 @@
+ from EnumDefinitions import *
+ from solve import *
+ from MatlabFuncs import *
++from massfluxatgate import massfluxatgate
+ 
+ md=triangle(model(),'../Exp/Square.exp',50000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',3)
++
++#outputs
+ md.stressbalance.requested_outputs=['StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
++md.outputdefinition.definitions=[
++		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++		]
++
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
Index: issm/oecreview/Archive/16133-16554/ISSM-16403-16404.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16403-16404.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16403-16404.diff	(revision 16556)
@@ -0,0 +1,299 @@
+Index: ../trunk-jpl/test/Par/SquareEISMINT.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareEISMINT.py	(revision 16404)
+@@ -1,6 +1,5 @@
+ import numpy
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -49,13 +48,3 @@
+ md.thermal.stabilization=0
+ md.timestepping.final_time=500.
+ md.timestepping.time_step=1
+-
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareThermal.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareThermal.par	(revision 16404)
+@@ -42,13 +42,3 @@
+ md.thermal.spctemperature(:)=md.initialization.temperature;
+ md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1); 
+ md.basalforcings.geothermalflux(find(md.mask.groundedice_levelset>0.))=1.*10^-3; %1 mW/m^2
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/Par/SquareShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareShelf.par	(revision 16404)
+@@ -56,13 +56,3 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 16404)
+@@ -6,7 +6,6 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -72,13 +71,3 @@
+ #Change name so that no tests have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+-
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareThermal.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareThermal.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareThermal.py	(revision 16404)
+@@ -1,7 +1,6 @@
+ import numpy
+ from paterson import paterson
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Ok, start defining model parameters here
+ 
+@@ -47,13 +46,3 @@
+ md.thermal.spctemperature[:]=md.initialization.temperature
+ md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1)) 
+ md.basalforcings.geothermalflux[numpy.nonzero(md.mask.groundedice_levelset>0.)[0]]=1.*10**-3    #1 mW/m^2
+-
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 16404)
+@@ -63,13 +63,3 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16404)
+@@ -60,13 +60,3 @@
+ %Change name so that no tests have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 16404)
+@@ -6,7 +6,6 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson 
+ from SetMarineIceSheetBC import SetMarineIceSheetBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ 
+@@ -75,13 +74,3 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+-	
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 16404)
+@@ -65,13 +65,3 @@
+ %Change name so that no test have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 16404)
+@@ -6,7 +6,6 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceShelfBC import SetIceShelfBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ #Geometry
+@@ -88,13 +87,3 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
+-	
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 16404)
+@@ -6,7 +6,6 @@
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import paterson
+ from SetIceSheetBC import SetIceSheetBC
+-from massfluxatgate import massfluxatgate
+ 
+ #Start defining model parameters here
+ 
+@@ -76,13 +75,3 @@
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+-
+-#output definitions: 
+-md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
+-	]
+Index: ../trunk-jpl/test/Par/SquareEISMINT.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16403)
++++ ../trunk-jpl/test/Par/SquareEISMINT.par	(revision 16404)
+@@ -45,13 +45,3 @@
+ md.thermal.stabilization=0;
+ md.timestepping.final_time=500.;
+ md.timestepping.time_step=1;
+-
+-%output definitions: 
+-md.outputdefinition.definitions={...
+-		massfluxatgate('MassFlux1',[pwd '/../Exp/MassFlux1.exp']),...
+-		massfluxatgate('MassFlux2',[pwd '/../Exp/MassFlux2.exp']),...
+-		massfluxatgate('MassFlux3',[pwd '/../Exp/MassFlux3.exp']),...
+-		massfluxatgate('MassFlux4',[pwd '/../Exp/MassFlux4.exp']),...
+-		massfluxatgate('MassFlux5',[pwd '/../Exp/MassFlux5.exp']),...
+-		massfluxatgate('MassFlux6',[pwd '/../Exp/MassFlux6.exp'])...
+-	};
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 16403)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 16404)
+@@ -17,12 +17,12 @@
+ #outputs
+ md.stressbalance.requested_outputs=['StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
+ md.outputdefinition.definitions=[
+-		massfluxatgate('MassFlux1',os.getcwd() + '/../Exp/MassFlux1.exp'),
+-		massfluxatgate('MassFlux2',os.getcwd() + '/../Exp/MassFlux2.exp'),
+-		massfluxatgate('MassFlux3',os.getcwd() + '/../Exp/MassFlux3.exp'),
+-		massfluxatgate('MassFlux4',os.getcwd() + '/../Exp/MassFlux4.exp'),
+-		massfluxatgate('MassFlux5',os.getcwd() + '/../Exp/MassFlux5.exp'),
+-		massfluxatgate('MassFlux6',os.getcwd() + '/../Exp/MassFlux6.exp')
++		massfluxatgate('MassFlux1','../Exp/MassFlux1.exp'),
++		massfluxatgate('MassFlux2','../Exp/MassFlux2.exp'),
++		massfluxatgate('MassFlux3','../Exp/MassFlux3.exp'),
++		massfluxatgate('MassFlux4','../Exp/MassFlux4.exp'),
++		massfluxatgate('MassFlux5','../Exp/MassFlux5.exp'),
++		massfluxatgate('MassFlux6','../Exp/MassFlux6.exp')
+ 		]
+ 
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test701.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test701.m	(revision 16403)
++++ ../trunk-jpl/test/NightlyRun/test701.m	(revision 16404)
+@@ -50,7 +50,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-13,1e-13,1e-13,1e+4};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16404-16405.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16404-16405.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16404-16405.diff	(revision 16556)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/src/m/classes/outputdefinition.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 16404)
++++ ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 16405)
+@@ -15,7 +15,6 @@
+ 
+ 	def __init__(self): # {{{
+ 		self.definitions                   = []
+-		self.enums                         = float('NaN')
+ 		#}}}
+ 	def __repr__(self): # {{{
+ 		string="   Outputdefinitions:"
+@@ -36,16 +35,15 @@
+ 	# }}}
+ 	def marshall(self,md,fid):    # {{{
+ 		
+-		self.enums=npy.zeros(len(self.definitions),)
++		enums=npy.zeros(len(self.definitions),)
+ 		
+ 		for i in range(len(self.definitions)):
+ 			self.definitions[i].marshall(md,fid);
+ 			classdefinition=self.definitions[i].__class__.__name__
+ 			classdefinition=classdefinition[0].upper()+classdefinition[1:]
+-			self.enums[i]=StringToEnum(classdefinition)[0]
++			enums[i]=StringToEnum(classdefinition)[0]
+ 		
+-		self.enums=npy.unique(self.enums);
++		enums=npy.unique(enums);
+ 		
+-		WriteData(fid,'object',self,'fieldname','enums','format','DoubleMat','mattype',1)
+-
++		WriteData(fid,'data',enums,'enum',OutputdefinitionEnumsEnum(),'format','DoubleMat','mattype',1);
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16404)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16405)
+@@ -7,9 +7,6 @@
+ 	properties (SetAccess=public) 
+ 		definitions                 = {};
+ 	end
+-	properties (SetAccess=private) 
+-		enums                 = {};
+-	end
+ 	methods
+ 		function obj = outputdefinition(varargin) % {{{
+ 			switch nargin
+@@ -22,7 +19,6 @@
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+ 			obj.definitions={};
+-			obj.enums=NaN;
+ 
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+@@ -46,11 +42,11 @@
+ 			obj.definitions{i}.marshall(md,fid);
+ 			classdefinition=class(obj.definitions{i});
+ 			classdefinition(1)=upper(classdefinition(1)); %so it matches our enums definitions.
+-			obj.enums(i)=StringToEnum(classdefinition);
++			enums(i)=StringToEnum(classdefinition);
+ 		end
+-		obj.enums=unique(obj.enums);
++		enums=unique(enums);
+ 		
+-		WriteData(fid,'object',obj,'fieldname','enums','format','DoubleMat','mattype',1);
++		WriteData(fid,'data',enums,'enum',OutputdefinitionEnumsEnum(),'format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16405-16406.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16405-16406.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16405-16406.diff	(revision 16556)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/geometry/NowickiProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 0)
++++ ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16406)
+@@ -0,0 +1,39 @@
++function [b h] = NowickiProfile(x),
++%NOWICKIPROFILE - Create profile at the transition zone based on Sophie Nowicki's thesis
++%
++%   Usage:
++%      [b h] = NowickiProfile(x)
++%
++%      - h = ice thickness
++%      - b = ice base
++%      - x = along flow coordinate
++
++%Constant for theoretical profile
++delta = 0.1;          % ratio of water density and ice density -1
++hg    = 1;            % ice thickness at grounding line
++sea   = hg/(1+delta); % sea level
++lamda = 0.1;          % ration of deviatoric stress and water pressure
++beta  = 5;            % friction coefficient
++ms    = 0.005;        % surface accumulation rat
++mu    = 5;            % viscosity
++q     = 0.801;        % ice mass flux
++
++%mesh parameters
++b=zeros(numel(x),1);
++h=zeros(numel(x),1);
++
++%upstream of the GL
++for i = 1:ceil(numel(x)/2)
++	ss=roots([1,4*lamda*beta,0,0,6*lamda*ms*x(i)^2+12*lamda*q*x(i)-hg^4-4*lamda*beta*hg^3]);
++	for j=1:4
++		if (real(ss(j)) > 0) && (imag(ss(j)) == 0), s(i)=ss(j); end
++	end
++	h(i) = s(i);
++	b(i) = 0.;
++end
++
++%downstream of the GL
++for i = ceil(numel(x)/2):numel(x)
++	h(i) = (x(i)/(4*(delta+1)*q)+hg^(-2))^(-0.5); % ice thickness for ice shelf from (3.1)
++	b(i) = sea-h(i)*(1/(1+delta));
++end
Index: issm/oecreview/Archive/16133-16554/ISSM-16406-16407.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16406-16407.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16406-16407.diff	(revision 16556)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16406)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16407)
+@@ -547,7 +547,7 @@
+ 	/*}}}*/
+ 	/*Output Definitions{{{*/
+ 	OutputdefinitionEnum,
+-	OutputdefinitionEnumsEnum,
++	OutputdefinitionListEnum,
+ 	MassfluxatgateEnum,
+ 	MassfluxatgateNameEnum,
+ 	MassfluxatgateSegmentsEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16406)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16407)
+@@ -535,7 +535,7 @@
+ 		case TriaP1ElementResultEnum : return "TriaP1ElementResult";
+ 		case WaterColumnOldEnum : return "WaterColumnOld";
+ 		case OutputdefinitionEnum : return "Outputdefinition";
+-		case OutputdefinitionEnumsEnum : return "OutputdefinitionEnums";
++		case OutputdefinitionListEnum : return "OutputdefinitionList";
+ 		case MassfluxatgateEnum : return "Massfluxatgate";
+ 		case MassfluxatgateNameEnum : return "MassfluxatgateName";
+ 		case MassfluxatgateSegmentsEnum : return "MassfluxatgateSegments";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16406)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16407)
+@@ -547,7 +547,7 @@
+ 	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+-	      else if (strcmp(name,"OutputdefinitionEnums")==0) return OutputdefinitionEnumsEnum;
++	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+ 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
+ 	      else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum;
+ 	      else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum;
+Index: ../trunk-jpl/src/m/classes/outputdefinition.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 16406)
++++ ../trunk-jpl/src/m/classes/outputdefinition.py	(revision 16407)
+@@ -45,5 +45,5 @@
+ 		
+ 		enums=npy.unique(enums);
+ 		
+-		WriteData(fid,'data',enums,'enum',OutputdefinitionEnumsEnum(),'format','DoubleMat','mattype',1);
++		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/outputdefinition.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16406)
++++ ../trunk-jpl/src/m/classes/outputdefinition.m	(revision 16407)
+@@ -46,7 +46,7 @@
+ 		end
+ 		enums=unique(enums);
+ 		
+-		WriteData(fid,'data',enums,'enum',OutputdefinitionEnumsEnum(),'format','DoubleMat','mattype',1);
++		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16406)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m	(revision 16407)
+@@ -1,11 +0,0 @@
+-function macro=OutputdefinitionEnumsEnum()
+-%OUTPUTDEFINITIONENUMSENUM - Enum of Outputdefinitions
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=OutputdefinitionEnumsEnum()
+-
+-macro=StringToEnum('Outputdefinitions');
+Index: ../trunk-jpl/src/m/enum/OutputdefinitionListEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputdefinitionListEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/OutputdefinitionListEnum.m	(revision 16407)
+@@ -0,0 +1,11 @@
++function macro=OutputdefinitionListEnum()
++%OUTPUTDEFINITIONLISTENUM - Enum of OutputdefinitionList
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=OutputdefinitionListEnum()
++
++macro=StringToEnum('OutputdefinitionList');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16406)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16407)
+@@ -527,7 +527,7 @@
+ def TriaP1ElementResultEnum(): return StringToEnum("TriaP1ElementResult")[0]
+ def WaterColumnOldEnum(): return StringToEnum("WaterColumnOld")[0]
+ def OutputdefinitionEnum(): return StringToEnum("Outputdefinition")[0]
+-def OutputdefinitionEnumsEnum(): return StringToEnum("OutputdefinitionEnums")[0]
++def OutputdefinitionListEnum(): return StringToEnum("OutputdefinitionList")[0]
+ def MassfluxatgateEnum(): return StringToEnum("Massfluxatgate")[0]
+ def MassfluxatgateNameEnum(): return StringToEnum("MassfluxatgateName")[0]
+ def MassfluxatgateSegmentsEnum(): return StringToEnum("MassfluxatgateSegments")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16407-16408.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16407-16408.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16407-16408.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16407)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16408)
+@@ -26,7 +26,7 @@
+ 	/*Create output_definitions dataset: */
+ 	output_definitions=new DataSet();
+ 	
+-	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionEnumsEnum); 
++	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionListEnum);
+ 	if(num_output_definitions){
+ 		for (i=0;i<num_output_definitions;i++){
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16408-16409.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16408-16409.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16408-16409.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16408)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16409)
+@@ -4426,7 +4426,7 @@
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<vnumdof;i++) vvalues[i]=values[i];
+-	for(i=0;i<pnumdof;i++) pvalues[i]=values[vnumnodes+i];
++	for(i=0;i<pnumdof;i++) pvalues[i]=values[vnumdof+i];
+ 
+ 	/*Ok, we have vx and vy in values, fill in all arrays: */
+ 	for(i=0;i<vnumnodes;i++){
Index: issm/oecreview/Archive/16133-16554/ISSM-16409-16410.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16409-16410.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16409-16410.diff	(revision 16556)
@@ -0,0 +1,86 @@
+Index: ../trunk-jpl/test/NightlyRun/test701.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test701.m	(revision 16409)
++++ ../trunk-jpl/test/NightlyRun/test701.m	(revision 16410)
+@@ -50,7 +50,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e+4};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test702.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test702.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test702.m	(revision 16410)
+@@ -0,0 +1,53 @@
++%mesh parameters
++x =[-5:.5:5]';
++[b h sea]=NowickiProfile(x);
++x = x*10^3;
++h = h*10^3;
++b = (b-sea)*10^3;
++
++%mesh domain
++md=bamgflowband(model(),x,b+h,b,'hmax',150);
++
++%parameterize
++md.geometry.surface   = interp1(x,b+h,md.mesh.x);
++md.geometry.bed       = interp1(x,b,md.mesh.x);
++md.geometry.thickness = md.geometry.surface-md.geometry.bed;
++md.mask.ice_levelset = ones(md.mesh.numberofvertices,1);
++md.mask.ice_levelset(find(vertexflags(md.mesh,2))) = 0;
++md.mask.groundedice_levelset = double(md.mesh.x<0)-.5;
++
++md.initialization.temperature=(273.-20.)*ones(md.mesh.numberofvertices,1);
++md.materials.rheology_B=paterson(md.initialization.temperature);
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.damage.D=zeros(md.mesh.numberofvertices,1);
++md.damage.spcdamage=NaN(md.mesh.numberofvertices,1);
++md.friction.coefficient=zeros(md.mesh.numberofvertices,1);
++md.friction.coefficient(find(vertexflags(md.mesh,1)))=20;
++md.friction.p=ones(md.mesh.numberofelements,1);
++md.friction.q=ones(md.mesh.numberofelements,1);
++md.stressbalance.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++md.stressbalance.referential=NaN*ones(md.mesh.numberofvertices,6);
++md.stressbalance.loadingforce=0*ones(md.mesh.numberofvertices,3);
++md.stressbalance.spcvx(find(vertexflags(md.mesh,4)))=800;
++md.stressbalance.spcvy(find(vertexflags(md.mesh,4)))=0;
++
++%Misc
++md=setflowequation(md,'FS','all');
++md.flowequation.fe_FS='TaylorHood';
++md.stressbalance.abstol=NaN;
++md.miscellaneous.name = 'flowline';
++
++%Go solve
++md.cluster=generic('np',2);
++md=solve(md,StressbalanceSolutionEnum());
++
++%Fields and tolerances to track changes
++field_names     ={'Vx','Vy','Vel','Pressure'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_values={...
++	(md.results.StressbalanceSolution.Vx),...
++	(md.results.StressbalanceSolution.Vy),...
++	(md.results.StressbalanceSolution.Vel),...
++	(md.results.StressbalanceSolution.Pressure)};
+Index: ../trunk-jpl/test/Archives/Archive702.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive702.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive702.nc	(revision 16409)
++++ ../trunk-jpl/test/Archives/Archive702.nc	(revision 16410)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive702.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16410-16411.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16410-16411.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16410-16411.diff	(revision 16556)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16410)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16411)
+@@ -60,3 +60,15 @@
+ %Change name so that no tests have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
++
++%output
++md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++md.outputdefinition.definitions={...
++	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
++	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
++	massfluxatgate('MassFlux3',['../Exp/MassFlux3.exp']),...
++	massfluxatgate('MassFlux4',['../Exp/MassFlux4.exp']),...
++	massfluxatgate('MassFlux5',['../Exp/MassFlux5.exp']),...
++	massfluxatgate('MassFlux6',['../Exp/MassFlux6.exp'])...
++	};
++
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16410)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16411)
+@@ -3,18 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',2);
+-
+-%output
+ md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+-md.outputdefinition.definitions={...
+-	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
+-	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
+-	massfluxatgate('MassFlux3',['../Exp/MassFlux3.exp']),...
+-	massfluxatgate('MassFlux4',['../Exp/MassFlux4.exp']),...
+-	massfluxatgate('MassFlux5',['../Exp/MassFlux5.exp']),...
+-	massfluxatgate('MassFlux6',['../Exp/MassFlux6.exp'])...
+-	};
+-
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: issm/oecreview/Archive/16133-16554/ISSM-16411-16412.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16411-16412.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16411-16412.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/geometry/NowickiProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16411)
++++ ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16412)
+@@ -1,4 +1,4 @@
+-function [b h] = NowickiProfile(x),
++function [b h sea] = NowickiProfile(x),
+ %NOWICKIPROFILE - Create profile at the transition zone based on Sophie Nowicki's thesis
+ %
+ %   Usage:
Index: issm/oecreview/Archive/16133-16554/ISSM-16412-16413.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16412-16413.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16412-16413.diff	(revision 16556)
@@ -0,0 +1,982 @@
+Index: ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h	(revision 16412)
++++ ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.h	(revision 16413)
+@@ -1,27 +0,0 @@
+-/*!\file:  Shp2Expx.h
+- * \brief header file for shp to exp conversion routines.
+- */ 
+-
+-#ifndef _SHP2EXPX_H
+-#define _SHP2EXPX_H
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-
+-#include "shapefil.h"
+-
+-#endif
+-
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-int Shp2Expx(char* filshp,char* filexp);
+-int Shp2Expx(char* filshp,char* filexp, int sgn);
+-int Shp2Expx(char* filshp,char* filexp, int sgn,double cm,double sp);
+-
+-#endif  /* _SHP2EXPX_H */
+Index: ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 16412)
++++ ../trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 16413)
+@@ -1,613 +0,0 @@
+-/*!\file Shp2Expx
+- * \brief shp to exp conversion routines.
+- */
+-
+-#include "./Shp2Expx.h"
+-#include "../../shared/shared.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../kml/kmlobjects.h"
+-
+-int Shp2Expx(char* filshp,char* filexp){
+-
+-	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-
+-	return(Shp2Expx(filshp,filexp,0));
+-
+-	#else //ifdef _HAVE_SHAPELIB_
+-	return 0;
+-	#endif
+-}
+-
+-int Shp2Expx(char* filshp,char* filexp,int sgn){
+-
+-	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-
+-	double  cm,sp;
+-	Xy2lldef(&cm,&sp,sgn);
+-
+-	return(Shp2Expx(filshp,filexp,sgn,cm,sp));
+-
+-	#else //ifdef _HAVE_SHAPELIB_
+-	return 0;
+-	#endif
+-}
+-
+-int Shp2Expx(char* filshp,char* filexp,int sgn,double cm,double sp){
+-
+-	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-
+-	int     i,j,k,iret=0;
+-	int     lwidth=1;
+-	double  popac=0.50;
+-	int     nshape,ncoord;
+-	double  cpsum;
+-	int     *pstype = NULL, *pnpart=NULL,**ppstrt=NULL,**pptype=NULL,*pnvert=NULL;
+-	double **pshapx = NULL,**pshapy=NULL,**pshapz=NULL,**pshapm=NULL;
+-	double  *lat    = NULL, *lon=NULL;
+-
+-	SHPHandle   hSHP;
+-	int     nShapeType, nEntities, iPart, bValidate = 0,nInvalidCount=0;
+-	const char  *pszPlus;
+-	double  adfMinBound[4], adfMaxBound[4];
+-
+-	char    indent[81]="";
+-	KML_File          *kfile  = NULL;
+-	KML_Document      *kdoc   = NULL;
+-	KML_Style         *kstyle = NULL;
+-	KML_LineStyle     *klsty  = NULL;
+-	KML_PolyStyle     *kpsty  = NULL;
+-	KML_Folder        *kfold  = NULL;
+-	KML_Placemark     *kplace = NULL;
+-	KML_MultiGeometry *kmulti = NULL;
+-	KML_Polygon       *kpoly  = NULL;
+-	KML_LinearRing    *kring  = NULL;
+-	KML_LineString    *kline  = NULL;
+-	KML_Point         *kpoint = NULL;
+-	FILE              *fid    = NULL;
+-
+-	clock_t clock0,clock1;
+-	time_t  time0, time1;
+-
+-	clock0=clock();
+-	time0 =time(NULL);
+-	_printf0_("\nShp2Expx Module -- " << ctime(&time0));
+-
+-/*  note that much of the following code is taken from shpdump.c in shapelib.  */
+-
+-/*  open shp/shx files  */
+-
+-	hSHP = SHPOpen( filshp, "rb" );
+-	if (!hSHP) _error_("Error opening shp/shx files.");
+-
+-/*  read header and print out file bounds  */
+-
+-	SHPGetInfo( hSHP, &nEntities, &nShapeType, adfMinBound, adfMaxBound );
+-
+-	printf( "Shapefile Type: %s   # of Shapes: %d\n\n",
+-			SHPTypeName( nShapeType ), nEntities );
+-
+-	printf( "File Bounds: (%12.3f,%12.3f,%g,%g)\n"
+-			"         to  (%12.3f,%12.3f,%g,%g)\n",
+-			adfMinBound[0],
+-			adfMinBound[1],
+-			adfMinBound[2],
+-			adfMinBound[3],
+-			adfMaxBound[0],
+-			adfMaxBound[1],
+-			adfMaxBound[2],
+-			adfMaxBound[3] );
+-
+-	nshape=nEntities;
+-	pstype=xNew<int>(nshape);
+-	pnpart=xNew<int>(nshape);
+-	ppstrt=xNew<int*>(nshape);
+-	pptype=xNew<int*>(nshape);
+-	pnvert=xNew<int>(nshape);
+-	pshapx=xNew<double*>(nshape);
+-	pshapy=xNew<double*>(nshape);
+-	pshapz=xNew<double*>(nshape);
+-	pshapm=xNew<double*>(nshape);
+-
+-/*  loop over the list of shapes  */
+-
+-	for( i = 0; i < nEntities; i++ )
+-	{
+-//	int     j;
+-		SHPObject   *psShape;
+-
+-	psShape = SHPReadObject( hSHP, i );
+-
+-	printf( "\nShape:%d (%s)  nVertices=%d, nParts=%d\n"
+-				"  Bounds:(%12.3f,%12.3f, %g, %g)\n"
+-				"      to (%12.3f,%12.3f, %g, %g)\n",
+-			i, SHPTypeName(psShape->nSHPType),
+-				psShape->nVertices, psShape->nParts,
+-				psShape->dfXMin, psShape->dfYMin,
+-				psShape->dfZMin, psShape->dfMMin,
+-				psShape->dfXMax, psShape->dfYMax,
+-				psShape->dfZMax, psShape->dfMMax );
+-
+-	pstype[i]=psShape->nSHPType;
+-	pnpart[i]=psShape->nParts;
+-	if (pnpart[i]) {
+-		ppstrt[i]=xNew<int>(pnpart[i]);
+-		pptype[i]=xNew<int>(pnpart[i]);
+-	}
+-	else {
+-		ppstrt[i]=NULL;
+-		pptype[i]=NULL;
+-	}
+-	pnvert[i]=psShape->nVertices;
+-	if (pnvert[i]) {
+-		pshapx[i]=xNew<double>(pnvert[i]);
+-		pshapy[i]=xNew<double>(pnvert[i]);
+-		pshapz[i]=xNew<double>(pnvert[i]);
+-		pshapm[i]=xNew<double>(pnvert[i]);
+-	}
+-	else {
+-		pshapx[i]=NULL;
+-		pshapy[i]=NULL;
+-		pshapz[i]=NULL;
+-		pshapm[i]=NULL;
+-	}
+-
+-	for( j = 0, iPart = 1; j < psShape->nVertices; j++ )
+-	{
+-			const char  *pszPartType = "";
+-
+-			if( j == 0 && psShape->nParts > 0 )
+-			{
+-				pszPartType = SHPPartTypeName( psShape->panPartType[0] );
+-				ppstrt[i][0]=psShape->panPartStart[0];
+-				pptype[i][0]=psShape->panPartType[0];
+-			}
+-
+-		if( iPart < psShape->nParts
+-				&& psShape->panPartStart[iPart] == j )
+-		{
+-				pszPartType = SHPPartTypeName( psShape->panPartType[iPart] );
+-				ppstrt[i][iPart]=psShape->panPartStart[iPart];
+-				pptype[i][iPart]=psShape->panPartType[iPart];
+-		iPart++;
+-		pszPlus = "+";
+-		}
+-		else
+-			pszPlus = " ";
+-
+-//		printf("   %s (%12.3f,%12.3f, %g, %g) %s \n",
+-//				   pszPlus,
+-//				   psShape->padfX[j],
+-//				   psShape->padfY[j],
+-//				   psShape->padfZ[j],
+-//				   psShape->padfM[j],
+-//				   pszPartType );
+-
+-		pshapx[i][j]=psShape->padfX[j];
+-		pshapy[i][j]=psShape->padfY[j];
+-		pshapz[i][j]=psShape->padfZ[j];
+-		pshapm[i][j]=psShape->padfM[j];
+-	}
+-
+-		if( bValidate )
+-		{
+-			int nAltered = SHPRewindObject( hSHP, psShape );
+-
+-			if( nAltered > 0 )
+-			{
+-				printf( "  %d rings wound in the wrong direction.\n",
+-						nAltered );
+-				nInvalidCount++;
+-			}
+-		}
+-
+-		SHPDestroyObject( psShape );
+-	}
+-
+-/*  close shp/shx files  */
+-
+-	SHPClose( hSHP );
+-
+-/*  construct kml file  */
+-
+-	kfile =new KML_File();
+-	kfile->AddAttrib("xmlns","http://www.opengis.net/kml/2.2");
+-
+-/*  construct kml document  */
+-
+-	kdoc  =new KML_Document();
+-	sprintf(kdoc->name      ,"Shp2Kmlx Module -- %s",ctime(&time0));
+-	kdoc->open      =1;
+-
+-/*  construct style templates for defaults  */
+-
+-	klsty =new KML_LineStyle();
+-	sprintf(klsty->color     ,"ff000000");
+-	sprintf(klsty->colormode ,"normal");
+-	klsty->width     =lwidth;
+-	kpsty =new KML_PolyStyle();
+-	sprintf(kpsty->color     ,"%02xffffff",(int)floor(popac*255+0.5));
+-	sprintf(kpsty->colormode ,"random");
+-	kstyle=new KML_Style();
+-	kstyle->AddAttrib("id","BlackLineRandomPoly");
+-	kstyle->line      =klsty;
+-	kstyle->poly      =kpsty;
+-	(kdoc->style     )->AddObject((Object*)kstyle);
+-
+-	klsty =new KML_LineStyle();
+-	sprintf(klsty->color     ,"ff000000");
+-	sprintf(klsty->colormode ,"normal");
+-	klsty->width     ,lwidth;
+-	kpsty =new KML_PolyStyle();
+-	sprintf(kpsty->color     ,"00ffffff");
+-	sprintf(kpsty->colormode ,"random");
+-	kstyle=new KML_Style();
+-	kstyle->AddAttrib("id","BlackLineEmptyPoly");
+-	kstyle->line      =klsty;
+-	kstyle->poly      =kpsty;
+-	(kdoc->style     )->AddObject((Object*)kstyle);
+-
+-	klsty =new KML_LineStyle();
+-	sprintf(klsty->color     ,"%02xffffff",(int)floor(popac*255+0.5));
+-	sprintf(klsty->colormode ,"random");
+-	klsty->width     =lwidth*2;
+-	kpsty =new KML_PolyStyle();
+-	sprintf(kpsty->color     ,"00ffffff");
+-	sprintf(kpsty->colormode ,"random");
+-	kstyle=new KML_Style();
+-	kstyle->AddAttrib("id","RandomLineEmptyPoly");
+-	kstyle->line      =klsty;
+-	kstyle->poly      =kpsty;
+-	(kdoc->style     )->AddObject((Object*)kstyle);
+-
+-/*  construct kml folder for shapes  */
+-
+-	kfold =new KML_Folder();
+-	sprintf(kfold->name      ,"Shapefile: %s  Type: %s  nShapes: %d",
+-			filshp, SHPTypeName( nShapeType ), nEntities );
+-	kfold->open      =1;
+-
+-/*  loop over the list of shapes  */
+-
+-	for (i=0; i<nshape; i++) {
+-
+-/*  null type  */
+-
+-		if      (pstype[i] == SHPT_NULL) {
+-			;
+-		}
+-
+-/*  point types  */
+-
+-		else if (pstype[i] == SHPT_POINT ||
+-			  	 pstype[i] == SHPT_POINTZ ||
+-			 	 pstype[i] == SHPT_POINTM) {
+-			kplace=new KML_Placemark();
+-
+-			sprintf(kplace->name      ,"Shape:%d (%s)  nVertices=%d, nParts=%d",
+-					i,SHPTypeName(pstype[i]),pnvert[i],pnpart[i]);
+-			kplace->visibility=true;
+-			sprintf(kplace->styleurl  ,"#RandomLineEmptyPoly");
+-
+-			if (pnpart[i] > 0)
+-				_printf_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n\n");
+-			if (pnvert[i] > 1)
+-				_printf_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnvert[i] << " > 1 vertices.\n\n");
+-
+-			kpoint=new KML_Point();
+-
+-			lat=xNew<double>(pnvert[i]);
+-			lon=xNew<double>(pnvert[i]);
+-			if (sgn) {
+-				Xy2llx(lat,lon,pshapx[i],pshapy[i],pnvert[i],sgn,cm,sp);
+-			}
+-			else  {
+-				memcpy(lon,pshapx[i],pnvert[i]*sizeof(double));
+-				memcpy(lat,pshapy[i],pnvert[i]*sizeof(double));
+-			}
+-
+-			kpoint->coords[0]=lon      [0];
+-			kpoint->coords[1]=lat      [0];
+-			kpoint->coords[2]=pshapz[i][0];
+-
+-			xDelete<double>(lon);
+-			xDelete<double>(lat);
+-
+-			(kplace->geometry  )->AddObject((Object*)kpoint);
+-			kpoint=NULL;
+-			(kfold ->feature   )->AddObject((Object*)kplace);
+-			kplace=NULL;
+-		}
+-
+-/*  polyline types  */
+-
+-		else if (pstype[i] == SHPT_ARC ||
+-				 pstype[i] == SHPT_ARCZ ||
+-				 pstype[i] == SHPT_ARCM) {
+-			kplace=new KML_Placemark();
+-
+-			sprintf(kplace->name      ,"Shape:%d (%s)  nVertices=%d, nParts=%d",
+-					i,SHPTypeName(pstype[i]),pnvert[i],pnpart[i]);
+-			kplace->visibility=true;
+-			sprintf(kplace->styleurl  ,"#RandomLineEmptyPoly");
+-
+-/*  create a multigeometry to hold all the lines  */
+-
+-			kmulti=new KML_MultiGeometry();
+-
+-/*  convert to lat/lon, if necessary  */
+-
+-			lat=xNew<double>(pnvert[i]);
+-			lon=xNew<double>(pnvert[i]);
+-			if (sgn) {
+-				Xy2llx(lat,lon,pshapx[i],pshapy[i],pnvert[i],sgn,cm,sp);
+-			}
+-			else  {
+-				memcpy(lon,pshapx[i],pnvert[i]*sizeof(double));
+-				memcpy(lat,pshapy[i],pnvert[i]*sizeof(double));
+-			}
+-
+-/*  loop over the lines  */
+-
+-			for (j=0; j<pnpart[i]; j++) {
+-				kline =new KML_LineString();
+-
+-				kline->ncoord    =(j<pnpart[i]-1 ? ppstrt[i][j+1]-ppstrt[i][j] : pnvert[i]-ppstrt[i][j]);
+-				kline->coords    =xNew<double>(kline->ncoord*3);
+-				for (k=0; k<kline->ncoord; k++) {
+-					kline->coords[3*k+0]=lon      [ppstrt[i][j]+k];
+-					kline->coords[3*k+1]=lat      [ppstrt[i][j]+k];
+-					kline->coords[3*k+2]=pshapz[i][ppstrt[i][j]+k];
+-				}
+-				(kmulti->geometry  )->AddObject((Object*)kline);
+-				kline = NULL;
+-			}
+-
+-			xDelete<double>(lon);
+-			xDelete<double>(lat);
+-
+-			(kplace->geometry)->AddObject((Object*)kmulti);
+-			kmulti=NULL;
+-			(kfold ->feature )->AddObject((Object*)kplace);
+-			kplace=NULL;
+-		}
+-
+-/*  polygon types  */
+-
+-		else if (pstype[i] == SHPT_POLYGON ||
+-				 pstype[i] == SHPT_POLYGONZ ||
+-				 pstype[i] == SHPT_POLYGONM) {
+-
+-/*  the shp format specifies that outer rings are cw, while inner rings are ccw.  there
+-	may be multiple outer rings and inner rings in any order.  the kml format specifies
+-	all rings are ccw (right-hand rule).  there may be only one outer ring with multiple
+-	inner rings, and rings are differentiated by keyword.
+-
+-	at least for now, assume that each cw ring forms a new kml polygon, and each ccw
+-	ring forms an inner ring for the most recent outer ring.  a more elaborate solution
+-	would be for each inner ring to search in which outer ring it occurs.  */
+-
+-			kplace=new KML_Placemark();
+-
+-			sprintf(kplace->name      ,"Shape:%d (%s)  nVertices=%d, nParts=%d",
+-					i,SHPTypeName(pstype[i]),pnvert[i],pnpart[i]);
+-			kplace->visibility=true;
+-			sprintf(kplace->styleurl  ,"#BlackLineRandomPoly");
+-
+-/*  create a multigeometry to hold all the polygons  */
+-
+-			kmulti=new KML_MultiGeometry();
+-
+-/*  convert to lat/lon, if necessary  */
+-
+-			lat=xNew<double>(pnvert[i]);
+-			lon=xNew<double>(pnvert[i]);
+-			if (sgn) {
+-				Xy2llx(lat,lon,pshapx[i],pshapy[i],pnvert[i],sgn,cm,sp);
+-			}
+-			else  {
+-				memcpy(lon,pshapx[i],pnvert[i]*sizeof(double));
+-				memcpy(lat,pshapy[i],pnvert[i]*sizeof(double));
+-			}
+-
+-/*  loop over the polygons  */
+-
+-			for (j=0; j<pnpart[i]; j++) {
+-
+-/*  check if polygon is ccw or cw by computing sum of cross products (twice the area)  */
+-
+-				ncoord=(j<pnpart[i]-1 ? ppstrt[i][j+1]-ppstrt[i][j] : pnvert[i]-ppstrt[i][j]);
+-				cpsum =0.;
+-
+-				for (k=ppstrt[i][j]; k<ppstrt[i][j]+ncoord-1; k++)
+-					cpsum +=pshapx[i][k]*pshapy[i][k+1         ]-pshapy[i][k]*pshapx[i][k+1         ];
+-				cpsum +=pshapx[i][k]*pshapy[i][ppstrt[i][j]]-pshapy[i][k]*pshapx[i][ppstrt[i][j]];
+-
+-/*  outer ring (cw) (allow exception for single-part shapes)  */
+-
+-				if (cpsum < 0 || pnpart[i] == 1) {
+-					if (kpoly) {
+-						(kmulti->geometry  )->AddObject((Object*)kpoly);
+-						kpoly =NULL;
+-					}
+-
+-/*  create a new polygon from the outer ring (reversing cw to ccw)  */
+-
+-					kpoly =new KML_Polygon();
+-					kring =new KML_LinearRing();
+-
+-					kring->ncoord    =(j<pnpart[i]-1 ? ppstrt[i][j+1]-ppstrt[i][j] : pnvert[i]-ppstrt[i][j]);
+-					kring->coords    =xNew<double>(kring->ncoord*3);
+-					if (cpsum < 0)
+-						for (k=0; k<kring->ncoord; k++) {
+-							kring->coords[3*(kring->ncoord-1-k)+0]=lon      [ppstrt[i][j]+k];
+-							kring->coords[3*(kring->ncoord-1-k)+1]=lat      [ppstrt[i][j]+k];
+-							kring->coords[3*(kring->ncoord-1-k)+2]=pshapz[i][ppstrt[i][j]+k];
+-						}
+-					else
+-						for (k=0; k<kring->ncoord; k++) {
+-							kring->coords[3*k+0]=lon      [ppstrt[i][j]+k];
+-							kring->coords[3*k+1]=lat      [ppstrt[i][j]+k];
+-							kring->coords[3*k+2]=pshapz[i][ppstrt[i][j]+k];
+-						}
+-
+-					(kpoly ->outer     )->AddObject((Object*)kring);
+-					kring =NULL;
+-				}
+-
+-/*  inner ring (ccw)  */
+-
+-				else {
+-					if (!kpoly) {
+-						_printf_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\", part " << j << ", expected to be outer loop (cw).\n\n");
+-						continue;
+-					}
+-
+-/*  add the inner ring to the current polygon  */
+-
+-					kring =new KML_LinearRing();
+-
+-					kring->ncoord    =(j<pnpart[i]-1 ? ppstrt[i][j+1]-ppstrt[i][j] : pnvert[i]-ppstrt[i][j]);
+-					kring->coords    =xNew<double>(kring->ncoord*3);
+-					for (k=0; k<kring->ncoord; k++) {
+-						kring->coords[3*k+0]=lon      [ppstrt[i][j]+k];
+-						kring->coords[3*k+1]=lat      [ppstrt[i][j]+k];
+-						kring->coords[3*k+2]=pshapz[i][ppstrt[i][j]+k];
+-					}
+-
+-					(kpoly ->inner     )->AddObject((Object*)kring);
+-					kring =NULL;
+-				}
+-			}
+-
+-			if (kpoly) {
+-				(kmulti->geometry  )->AddObject((Object*)kpoly);
+-				kpoly =NULL;
+-			}
+-
+-			xDelete<double>(lon);
+-			xDelete<double>(lat);
+-
+-			(kplace->geometry  )->AddObject((Object*)kmulti);
+-			kmulti=NULL;
+-			(kfold ->feature   )->AddObject((Object*)kplace);
+-			kplace=NULL;
+-		}
+-
+-/*  multipoint types  */
+-
+-		else if (pstype[i] == SHPT_MULTIPOINT ||
+-				 pstype[i] == SHPT_MULTIPOINTZ ||
+-				 pstype[i] == SHPT_MULTIPOINTM) {
+-			kplace=new KML_Placemark();
+-
+-			sprintf(kplace->name      ,"Shape:%d (%s)  nVertices=%d, nParts=%d",
+-					i,SHPTypeName(pstype[i]),pnvert[i],pnpart[i]);
+-			kplace->visibility=true;
+-			sprintf(kplace->styleurl  ,"#RandomLineEmptyPoly");
+-
+-			if (pnpart[i] > 0)
+-				_printf_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n\n");
+-
+-/*  create a multigeometry to hold all the points  */
+-
+-			kmulti=new KML_MultiGeometry();
+-
+-/*  convert to lat/lon, if necessary  */
+-
+-			lat=xNew<double>(pnvert[i]);
+-			lon=xNew<double>(pnvert[i]);
+-			if (sgn) {
+-				Xy2llx(lat,lon,pshapx[i],pshapy[i],pnvert[i],sgn,cm,sp);
+-			}
+-			else  {
+-				memcpy(lon,pshapx[i],pnvert[i]*sizeof(double));
+-				memcpy(lat,pshapy[i],pnvert[i]*sizeof(double));
+-			}
+-
+-/*  loop over the points  */
+-
+-			for (j=0; j<pnvert[i]; j++) {
+-				kpoint=new KML_Point();
+-
+-				kpoint->coords[0]=lon      [j];
+-				kpoint->coords[1]=lat      [j];
+-				kpoint->coords[2]=pshapz[i][j];
+-
+-				(kmulti->geometry  )->AddObject((Object*)kpoint);
+-				kpoint=NULL;
+-			}
+-
+-			xDelete<double>(lon);
+-			xDelete<double>(lat);
+-
+-			(kplace->geometry  )->AddObject((Object*)kmulti);
+-			kmulti=NULL;
+-			(kfold ->feature   )->AddObject((Object*)kplace);
+-			kplace=NULL;
+-		}
+-
+-/*  multipatch types  */
+-
+-		else if (pstype[i] == SHPT_MULTIPATCH) {
+-			_printf_("Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n\n");
+-			continue;
+-		}
+-
+-/*  unknown type  */
+-
+-		else {
+-			_printf_("Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n\n");
+-		}
+-	}
+-
+-/*  assemble the rest of the kml hierarchy  */
+-
+-	(kdoc ->feature   )->AddObject((Object*)kfold);
+-	kfold=NULL;
+-	(kfile->kmlobj    )->AddObject((Object*)kdoc);
+-	kdoc =NULL;
+-
+-/*  open exp file  */
+-
+-	_printf0_("Writing exp profiles to file.\n");
+-	fid=fopen(filexp,"w");
+-
+-/*  write the polygons and linestrings  */
+-
+-	kfile->WriteExp(fid,"",sgn,cm,sp);
+-
+-/*  close exp file  */
+-
+-	fclose(fid);
+-
+-	delete kfile;
+-	for (i=nshape-1; i>=0; i--) {
+-		xDelete<double>((pshapm[i]));
+-		xDelete<double>((pshapz[i]));
+-		xDelete<double>((pshapy[i]));
+-		xDelete<double>((pshapx[i]));
+-	}
+-	xDelete<double*>(pshapm);
+-	xDelete<double*>(pshapz);
+-	xDelete<double*>(pshapy);
+-	xDelete<double*>(pshapx);
+-	xDelete<int>(pnvert);
+-	for (i=nshape-1; i>=0; i--) {
+-		xDelete<int>((pptype[i]));
+-		xDelete<int>((ppstrt[i]));
+-	}
+-	xDelete<int*>(pptype);
+-	xDelete<int*>(ppstrt);
+-	xDelete<int>(pnpart);
+-	xDelete<int>(pstype);
+-
+-	clock1=clock();
+-	time1 =time(NULL);
+-	_printf_("Shp2Expx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0)  << " elapsed seconds.\n\n\n");
+-
+-	return(iret);
+-
+-	#else //ifdef _HAVE_SHAPELIB_
+-	return 0;
+-	#endif
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16412)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16413)
+@@ -85,7 +85,6 @@
+ #include "./ResetCoordinateSystemx/ResetCoordinateSystemx.h"
+ #include "./RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
+ #include "./Scotchx/Scotchx.h"
+-#include "./Shp2Expx/Shp2Expx.h"
+ #include "./Shp2Kmlx/Shp2Kmlx.h"
+ #include "./SmbGradientsx/SmbGradientsx.h"
+ #include "./Solverx/Solverx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16412)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16413)
+@@ -707,8 +707,6 @@
+ 			     ./modules/Exp2Kmlx/Exp2Kmlx.cpp\
+ 			     ./modules/Kml2Expx/Kml2Expx.h\
+ 			     ./modules/Kml2Expx/Kml2Expx.cpp\
+-			     ./modules/Shp2Expx/Shp2Expx.h\
+-			     ./modules/Shp2Expx/Shp2Expx.cpp\
+ 			     ./modules/Shp2Kmlx/Shp2Kmlx.h\
+ 			     ./modules/Shp2Kmlx/Shp2Kmlx.cpp\
+ 			     ./modules/KMLFileReadx/KMLFileReadx.h\
+Index: ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h	(revision 16412)
++++ ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h	(revision 16413)
+@@ -1,49 +0,0 @@
+-/*!\file Shp2Exp.h
+- * \brief: prototype for shp to exp file conversion mex module.
+- */
+-
+-#ifndef _SHP2EXP_H
+-#define _SHP2EXP_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../bindings.h"
+-#include "../../c/main/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/shared/shared.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Shp2Exp"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define SHP_IN  prhs[0]
+-#define EXP_IN  prhs[1]
+-/* serial output macros: */
+-#define RET_OUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define SHP_IN PyTuple_GetItem(args,0)
+-#define EXP_IN PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define RET_OUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  2
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp	(revision 16412)
++++ ../trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp	(revision 16413)
+@@ -1,71 +0,0 @@
+-/*\file Shp2Exp.c
+- *\brief: shp to exp file conversion mex module.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./Shp2Exp.h"
+-
+-void Shp2ExpUsage(void){/*{{{*/
+-	_printf0_("Shp2Exp - shp to exp file conversion module:\n");
+-	_printf0_("\n");
+-	_printf0_("   This module converts a file from shp to exp format.\n");
+-	_printf0_("\n");
+-	_printf0_("   Usage:\n");
+-	_printf0_("      [ret]=Shp2Exp(filshp,filexp,sgn,'param name',param,...);\n");
+-	_printf0_("\n");
+-	_printf0_("      filshp      file name of shp file to be read (char, extension optional)\n");
+-	_printf0_("      filexp      file name of exp file to be written (char)\n");
+-	_printf0_("\n");
+-	_printf0_("      ret         return code (non-zero for warning)\n");
+-	_printf0_("\n");
+-	_printf0_("   Examples:\n");
+-	_printf0_("      [ret]=Shp2Exp('file.shp','file.exp');\n");
+-	_printf0_("\n");
+-}/*}}}*/
+-WRAPPER(Shp2Exp){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	char    *filshp=NULL,*filexp=NULL;
+-
+-	/* output: */
+-	int     iret=0;
+-
+-	#ifndef _HAVE_SHAPELIB_ //only works if shapelib library has been compiled in.
+-	_error_("Shapelib not available! Cannot carry out shp file translation!");
+-	#endif
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Shp2ExpUsage(); _error_("Shp2Exp usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Shp2ExpUsage(); _error_("Shp2Exp usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filshp,SHP_IN);
+-	FetchData(&filexp,EXP_IN);
+-
+-	/* Run core computations: */
+-	iret=Shp2Expx(filshp,filexp);
+-
+-	/*Write data: */
+-	WriteData(RET_OUT,iret);
+-
+-	/*Clean-up*/
+-	xDelete<char>(filexp);
+-	xDelete<char>(filshp);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp	(revision 16413)
+@@ -0,0 +1,94 @@
++/*\file ShpRead.c
++ *\brief: shp to exp file conversion mex module.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./ShpRead.h"
++#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
++#include "shapefil.h"
++#endif
++
++void ShpReadUsage(void){/*{{{*/
++	_printf0_("ShpRead - Read shapefile\n");
++	_printf0_("\n");
++	_printf0_("   This module reads shapefiles and converts them to matlab/python structures\n");
++	_printf0_("\n");
++	_printf0_("   Usage:\n");
++	_printf0_("      ShpRead(filename);\n");
++	_printf0_("      filexp      file name of exp file to be written\n");
++	_printf0_("\n");
++	_printf0_("   Examples:\n");
++	_printf0_("      ShpRead('file.shp');\n");
++}/*}}}*/
++WRAPPER(ShpRead){
++
++	/*input: */
++	char *filename= NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	#ifndef _HAVE_SHAPELIB_ //only works if shapelib library has been compiled in.
++	_error_("Shapelib not available! Cannot carry out shp file translation!");
++	#else
++
++	/*checks on arguments on the matlab side: */
++	if(nlhs > NLHS){
++		ShpReadUsage(); _error_("ShpRead usage error");
++	}
++	if(nrhs != NRHS){
++		ShpReadUsage(); _error_("ShpRead usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filename,SHP_IN);
++
++	/*Intermediaries*/
++	int         nShapeType,nEntities;
++	IssmPDouble adfMinBound[4], adfMaxBound[4];
++
++	/*Open shapefile*/
++	SHPHandle hSHP = SHPOpen( filename, "rb" );
++	if(!hSHP) _error_("Error opening shp/shx files.");
++
++	/*read header and print out file bounds*/
++	SHPGetInfo( hSHP, &nEntities, &nShapeType, adfMinBound, adfMaxBound );
++	_printf_("Shapefile Type: "<<SHPTypeName(nShapeType)<<"   number of Shapes: "<< nEntities<<"\n\n");
++
++	/*Initialize output*/
++	Contours* contours=new Contours();
++
++	/*Read all objects*/
++	for(int i=0; i<nEntities;i++ ){
++		SHPObject* psShape = SHPReadObject(hSHP,i);
++		_printf_( "Shape #"<<i<<" ("<<SHPTypeName(psShape->nSHPType)<<") nVertices="<<psShape->nVertices<<", nParts="<<psShape->nParts<<"\n");
++
++		Contour<double> *contour = NULL;
++
++		if(psShape->nSHPType==SHPT_ARC){
++			contour=new Contour<double>(0,psShape->nVertices,psShape->padfX,psShape->padfY,false);
++		}
++
++		/*Add to contours*/
++		if(contour) contours->AddObject(contour);
++
++		/*Destroy current shape*/
++		SHPDestroyObject( psShape );
++	}
++
++	/*Write output*/
++	//ExpWrite(contours,filexp);
++
++	/*Clean-up*/
++	delete contours;
++	xDelete<char>(filename);
++
++	#endif
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/ShpRead/ShpRead.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ShpRead/ShpRead.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/ShpRead/ShpRead.h	(revision 16413)
+@@ -0,0 +1,47 @@
++/*!\file ShpRead.h
++ * \brief: prototype for shp read mex module.
++ */
++
++#ifndef _SHPREAD_H
++#define _SHPREAD_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../bindings.h"
++#include "../../c/main/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/shared/shared.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "ShpRead"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define SHP_IN  prhs[0]
++/* serial output macros: */
++#define SHP_OUT  (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define SHP_IN PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define SHP_OUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  1
++#undef NLHS
++#define NLHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16412)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 16413)
+@@ -87,7 +87,7 @@
+ 				   KMLOverlay.la\
+ 				   Exp2Kml.la\
+ 				   Kml2Exp.la\
+-				   Shp2Exp.la\
++				   ShpRead.la\
+ 				   Shp2Kml.la
+ endif
+ endif 
+@@ -268,9 +268,9 @@
+ 						  ../Scotch/Scotch.h
+ Scotch_la_LIBADD = ${deps} $(SCOTCHLIB) $(MPILIB) $(BLASLAPACKLIB)
+ 
+-Shp2Exp_la_SOURCES = ../Shp2Exp/Shp2Exp.cpp\
+-							../Shp2Exp/Shp2Exp.h
+-Shp2Exp_la_LIBADD = ${deps} $(SHAPELIBLIB) $(MPILIB) $(PETSCLIB) $(GSLLIB)
++ShpRead_la_SOURCES = ../ShpRead/ShpRead.cpp\
++							../ShpRead/ShpRead.h
++ShpRead_la_LIBADD = ${deps} $(SHAPELIBLIB) $(MPILIB) $(PETSCLIB) $(GSLLIB)
+ 
+ Shp2Kml_la_SOURCES = ../Shp2Kml/Shp2Kml.cpp\
+ 							../Shp2Kml/Shp2Kml.h
Index: issm/oecreview/Archive/16133-16554/ISSM-16413-16414.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16413-16414.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16413-16414.diff	(revision 16556)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp	(revision 16413)
++++ ../trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp	(revision 16414)
+@@ -38,51 +38,48 @@
+ 	#else
+ 
+ 	/*checks on arguments on the matlab side: */
+-	if(nlhs > NLHS){
+-		ShpReadUsage(); _error_("ShpRead usage error");
+-	}
+-	if(nrhs != NRHS){
+-		ShpReadUsage(); _error_("ShpRead usage error");
+-	}
++	if(nlhs != NLHS){ShpReadUsage(); _error_("ShpRead usage error");}
++	if(nrhs != NRHS){ShpReadUsage(); _error_("ShpRead usage error");}
+ 
+ 	/*Input datasets: */
+ 	FetchData(&filename,SHP_IN);
+ 
+-	/*Intermediaries*/
+-	int         nShapeType,nEntities;
+-	IssmPDouble adfMinBound[4], adfMaxBound[4];
+-
+ 	/*Open shapefile*/
+ 	SHPHandle hSHP = SHPOpen( filename, "rb" );
+ 	if(!hSHP) _error_("Error opening shp/shx files.");
+ 
+ 	/*read header and print out file bounds*/
++	int         nShapeType,nEntities;
++	IssmPDouble adfMinBound[4], adfMaxBound[4];
+ 	SHPGetInfo( hSHP, &nEntities, &nShapeType, adfMinBound, adfMaxBound );
+ 	_printf_("Shapefile Type: "<<SHPTypeName(nShapeType)<<"   number of Shapes: "<< nEntities<<"\n\n");
+ 
+ 	/*Initialize output*/
+-	Contours* contours=new Contours();
++	Contours* contours = new Contours();
+ 
+ 	/*Read all objects*/
+ 	for(int i=0; i<nEntities;i++ ){
++
+ 		SHPObject* psShape = SHPReadObject(hSHP,i);
+ 		_printf_( "Shape #"<<i<<" ("<<SHPTypeName(psShape->nSHPType)<<") nVertices="<<psShape->nVertices<<", nParts="<<psShape->nParts<<"\n");
+ 
+ 		Contour<double> *contour = NULL;
+ 
+-		if(psShape->nSHPType==SHPT_ARC){
+-			contour=new Contour<double>(0,psShape->nVertices,psShape->padfX,psShape->padfY,false);
++		switch(psShape->nSHPType){
++			case SHPT_ARC:
++				contour=new Contour<double>(0,psShape->nVertices,psShape->padfX,psShape->padfY,false);
++				break;
++			default:
++				_printf_("Shape type "<<SHPTypeName(psShape->nSHPType)<<"not supported yet, skipping...\n");
+ 		}
+ 
+-		/*Add to contours*/
++		/*Add to contours and clean up*/
+ 		if(contour) contours->AddObject(contour);
+-
+-		/*Destroy current shape*/
+-		SHPDestroyObject( psShape );
++		SHPDestroyObject(psShape);
+ 	}
+ 
+ 	/*Write output*/
+-	//ExpWrite(contours,filexp);
++	WriteData(SHP_OUT,contours);
+ 
+ 	/*Clean-up*/
+ 	delete contours;
Index: issm/oecreview/Archive/16133-16554/ISSM-16414-16415.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16414-16415.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16414-16415.diff	(revision 16556)
@@ -0,0 +1,1411 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16414)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16415)
+@@ -626,6 +626,7 @@
+ 	/*Toolkits{{{*/
+ 	DenseEnum,
+ 	MpiDenseEnum,
++	MpiSparseEnum,
+ 	SeqEnum,
+ 	MpiEnum,
+ 	MumpsEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16414)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16415)
+@@ -598,6 +598,7 @@
+ 		case XYZEnum : return "XYZ";
+ 		case DenseEnum : return "Dense";
+ 		case MpiDenseEnum : return "MpiDense";
++		case MpiSparseEnum : return "MpiSparse";
+ 		case SeqEnum : return "Seq";
+ 		case MpiEnum : return "Mpi";
+ 		case MumpsEnum : return "Mumps";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16414)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16415)
+@@ -610,6 +610,7 @@
+ 	      else if (strcmp(name,"XYZ")==0) return XYZEnum;
+ 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
+ 	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
++	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
+ 	      else if (strcmp(name,"Seq")==0) return SeqEnum;
+ 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
+ 	      else if (strcmp(name,"Mumps")==0) return MumpsEnum;
+Index: ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp	(revision 16415)
+@@ -0,0 +1,396 @@
++/*!\file MumpsSolve.cpp
++ * \brief: solve dense matrix system with MUMPS
++ */
++
++/*Header files: */
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../../shared/Numerics/types.h"
++#include "../../shared/MemOps/MemOps.h"
++#include "../../shared/Exceptions/exceptions.h"
++#include "../../shared/io/Comm/IssmComm.h"
++#include "../../classes/Params/GenericParam.h"
++#include "../../classes/Params/Parameters.h"
++#include "../mpi/issmmpi.h"
++#include "../adolc/adolcincludes.h"
++#include "../issm/SparseRow.h"
++#include "./mumpsincludes.h"
++
++/*Mumps header files: */
++#include <dmumps_c.h>
++
++void MumpsInit(DMUMPS_STRUC_C &theMumpsStruc){ 
++	theMumpsStruc.par          = 1;  
++	theMumpsStruc.sym          = 0;
++	theMumpsStruc.comm_fortran = MPI_Comm_c2f(IssmComm::GetComm());
++	theMumpsStruc.job          = -1;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsInit
++void MumpsSettings(DMUMPS_STRUC_C &theMumpsStruc) { 
++	/*Control statements:{{{ */
++	theMumpsStruc.icntl[1-1] = 6; //error verbose: default 6, 0 or negative -> suppressed
++	theMumpsStruc.icntl[2-1] = 0; //std verbose: default 1, 0 or negative -> suppressed
++	theMumpsStruc.icntl[3-1] = 0; //global information verbose: default 6, 0 or negative -> suppressed
++	theMumpsStruc.icntl[4-1] = 0; //verbose everything: default is 4
++	theMumpsStruc.icntl[5-1] = 0;
++	theMumpsStruc.icntl[18-1] = 3;
++
++	theMumpsStruc.icntl[20-1] = 0;
++	theMumpsStruc.icntl[21-1] = 0;
++	theMumpsStruc.icntl[30-1] = 0;
++	/*}}}*/
++}
++
++// must be preceded by a call to MumpsInit
++void MumpsAnalyze(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 1;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsAnalyze
++void MumpsFactorize(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 2;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded by a call to MumpsFactorize
++void MumpsBacksubstitute(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = 3;
++	dmumps_c(&theMumpsStruc);
++}
++
++// must be preceded at least  by a call to MumpsInit
++void MumpsFinalize(DMUMPS_STRUC_C &theMumpsStruc) { 
++	theMumpsStruc.job          = -2;
++	dmumps_c(&theMumpsStruc);
++}
++
++void MumpsSolve(int n,int nnz,int local_nnz,int* irn_loc,int* jcn_loc, IssmPDouble *a_loc, IssmPDouble *rhs, Parameters* parameters=0 /*unused here*/){
++	/*Initialize mumps*/
++	DMUMPS_STRUC_C theMumpsStruc;
++	MumpsInit(theMumpsStruc);
++	MumpsSettings(theMumpsStruc);
++
++	/*now setup the rest of theMumpsStruc */
++	theMumpsStruc.n=n;
++	theMumpsStruc.nz=nnz;
++	theMumpsStruc.nz_loc=local_nnz;
++	theMumpsStruc.irn_loc=irn_loc;
++	theMumpsStruc.jcn_loc=jcn_loc;
++	theMumpsStruc.a_loc=a_loc;
++	theMumpsStruc.rhs=rhs;
++	theMumpsStruc.nrhs=1;
++	theMumpsStruc.lrhs=1;
++
++	/*Solve system*/
++	MumpsAnalyze(theMumpsStruc);
++	MumpsFactorize(theMumpsStruc);
++	MumpsBacksubstitute(theMumpsStruc);
++	MumpsFinalize(theMumpsStruc);
++}
++
++#ifdef _HAVE_ADOLC_
++// prototype for active variant
++void MumpsSolve(int n,
++		int nnz,
++		int local_nnz,
++		int* irn_loc,
++		int* jcn_loc,
++		IssmDouble *a_loc,
++		IssmDouble *rhs,
++		Parameters* parameters);
++#endif 
++
++void MpiDenseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ IssmDouble* Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters){ /*{{{*/
++
++	/*Variables*/
++	ISSM_MPI_Comm  comm;
++	int            num_procs;
++	int            i,j;
++	int            nnz,local_nnz;
++	int           *irn_loc    = NULL;
++	int           *jcn_loc    = NULL;
++	IssmDouble    *a_loc      = NULL;
++	int            count;
++	int            lower_row;
++	int            upper_row;
++	IssmDouble    *rhs        = NULL;
++	int           *recvcounts = NULL;
++	int           *displs     = NULL;
++
++	/*Communicator info */
++	num_procs = IssmComm::GetSize();
++	comm      = IssmComm::GetComm();
++
++	/*First, some checks*/
++	if (Kff_M!=Kff_N)_error_("stiffness matrix Kff should be square");
++	if (uf_M!=Kff_M || uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
++	if (uf_m!=Kff_m || uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
++
++	/*Initialize matrix */
++	/*figure out number of non-zero entries: */
++	local_nnz=0;
++	for(i=0;i<Kff_m;i++){
++		for(j=0;j<Kff_N;j++){
++			if (Kff[i*Kff_N+j]!=0)local_nnz++;
++		}
++	}
++
++	ISSM_MPI_Reduce(&local_nnz,&nnz,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,comm);
++	ISSM_MPI_Bcast(&nnz,1,ISSM_MPI_INT,0,comm);
++
++	/*Allocate: */
++	if(local_nnz){
++		irn_loc=xNew<int>(local_nnz);
++		jcn_loc=xNew<int>(local_nnz);
++		a_loc=xNew<IssmDouble>(local_nnz);
++	}
++
++	/*Populate the triplets: */
++	GetOwnershipBoundariesFromRange(&lower_row,&upper_row,Kff_m,comm);
++	count=0;
++	for(i=0;i<Kff_m;i++){
++		for(j=0;j<Kff_N;j++){
++			if (Kff[i*Kff_N+j]!=0){
++				irn_loc[count]=lower_row+i+1; //fortran indexing
++				jcn_loc[count]=j+1; //fortran indexing
++				a_loc[count]=Kff[i*Kff_N+j];
++				count++;
++			}
++		}
++	}
++	/*Deal with right hand side. We need to ISSM_MPI_Gather it onto cpu 0: */
++	rhs=xNew<IssmDouble>(pf_M);
++
++	recvcounts=xNew<int>(num_procs);
++	displs=xNew<int>(num_procs);
++
++	/*recvcounts:*/
++	ISSM_MPI_Allgather(&pf_m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,comm);
++
++	/*displs: */
++	ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,comm);
++
++	/*Gather:*/
++	ISSM_MPI_Gatherv(pf, pf_m, ISSM_MPI_DOUBLE, rhs, recvcounts, displs, ISSM_MPI_DOUBLE,0,comm);
++
++	MumpsSolve(Kff_M,nnz,local_nnz,irn_loc,jcn_loc,a_loc,rhs,parameters);
++
++	/*Now scatter from cpu 0 to all other cpus*/
++	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
++
++	/*Cleanup*/
++	xDelete<int>(irn_loc);
++	xDelete<int>(jcn_loc);
++	xDelete<IssmDouble>(a_loc);
++	xDelete<IssmDouble>(rhs);
++	xDelete<int>(recvcounts);
++	xDelete<int>(displs);
++} /*}}}*/
++
++void MpiSparseMumpsSolve( /*output: */ IssmDouble* uf, int uf_M, int uf_m, /*matrix input: */ SparseRow<IssmDouble>** Kff, int Kff_M, int Kff_N, int Kff_m, /*right hand side vector: */ IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters){ /*{{{*/
++
++	/*Variables*/
++	ISSM_MPI_Comm  comm;
++	int            num_procs;
++	int            i,j;
++	int            nnz,local_nnz;
++	int           *irn_loc    = NULL;
++	int           *jcn_loc    = NULL;
++	IssmDouble    *a_loc      = NULL;
++	int            count;
++	int            lower_row;
++	int            upper_row;
++	IssmDouble    *rhs        = NULL;
++	int           *recvcounts = NULL;
++	int           *displs     = NULL;
++
++	/*Communicator info */
++	num_procs = IssmComm::GetSize();
++	comm      = IssmComm::GetComm();
++
++	/*First, some checks*/
++	if (Kff_M!=Kff_N)_error_("stiffness matrix Kff should be square");
++	if (uf_M!=Kff_M || uf_M!=pf_M)_error_("solution vector should be the same size as stiffness matrix Kff and load vector pf");
++	if (uf_m!=Kff_m || uf_m!=pf_m)_error_("solution vector should be locally the same size as stiffness matrix Kff and load vector pf");
++
++	/*Initialize matrix */
++	/*figure out number of non-zero entries: */
++	local_nnz=0;
++	for(i=0;i<Kff_m;i++){
++		local_nnz+=Kff[i]->Nnz();
++	}
++
++	ISSM_MPI_Reduce(&local_nnz,&nnz,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,comm);
++	ISSM_MPI_Bcast(&nnz,1,ISSM_MPI_INT,0,comm);
++
++	/*Allocate: */
++	if(local_nnz){
++		irn_loc=xNew<int>(local_nnz);
++		jcn_loc=xNew<int>(local_nnz);
++		a_loc=xNew<IssmDouble>(local_nnz);
++	}
++
++	/*Populate the triplets: */
++	GetOwnershipBoundariesFromRange(&lower_row,&upper_row,Kff_m,comm);
++	count=0;
++	for(i=0;i<Kff_m;i++){
++		Kff[i]->SetIrnJcnA(irn_loc,jcn_loc,a_loc,lower_row+i+1,count);
++		count+=Kff[i]->Nnz();
++	}
++	/*Deal with right hand side. We need to ISSM_MPI_Gather it onto cpu 0: */
++	rhs=xNew<IssmDouble>(pf_M);
++
++	recvcounts=xNew<int>(num_procs);
++	displs=xNew<int>(num_procs);
++
++	/*recvcounts:*/
++	ISSM_MPI_Allgather(&pf_m,1,ISSM_MPI_INT,recvcounts,1,ISSM_MPI_INT,comm);
++
++	/*displs: */
++	ISSM_MPI_Allgather(&lower_row,1,ISSM_MPI_INT,displs,1,ISSM_MPI_INT,comm);
++
++	/*Gather:*/
++	ISSM_MPI_Gatherv(pf, pf_m, ISSM_MPI_DOUBLE, rhs, recvcounts, displs, ISSM_MPI_DOUBLE,0,comm);
++
++	MumpsSolve(Kff_M,nnz,local_nnz,irn_loc,jcn_loc,a_loc,rhs,parameters);
++
++	/*Now scatter from cpu 0 to all other cpus*/
++	ISSM_MPI_Scatterv( rhs, recvcounts, displs, ISSM_MPI_DOUBLE, uf, uf_m, ISSM_MPI_DOUBLE, 0, comm); 
++
++	/*Cleanup*/
++	xDelete<int>(irn_loc);
++	xDelete<int>(jcn_loc);
++	xDelete<IssmDouble>(a_loc);
++	xDelete<IssmDouble>(rhs);
++	xDelete<int>(recvcounts);
++	xDelete<int>(displs);
++} /*}}}*/
++
++#ifdef _HAVE_ADOLC_
++
++int mumpsSolveEDF(int iArrLength, int* iArr, int /* ignored */, IssmPDouble* dp_x, int /* ignored */, IssmPDouble* dp_y) {
++  // unpack parameters
++  int n=iArr[0];
++  int nnz=iArr[1];
++  int local_nnz=iArr[2];
++  int *local_irn=xNew<int>(local_nnz);
++  int *local_jcn=xNew<int>(local_nnz);
++  IssmPDouble *A=xNew<IssmPDouble>(local_nnz);
++  for (int i=0;i<local_nnz;++i) {
++    local_irn[i]=iArr[3+i];
++    local_jcn[i]=iArr[3+local_nnz+i];
++    A[i]=dp_x[i];
++  }
++  IssmPDouble *rhs_sol=xNew<IssmPDouble>(n);
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_x[local_nnz+i];
++  }
++  MumpsSolve(n,nnz,local_nnz,local_irn,local_jcn,A,rhs_sol);
++  for (int i=0;i<n;++i) {
++    dp_y[i]=rhs_sol[i];
++  }
++  xDelete(rhs_sol);
++  xDelete(A);
++  xDelete(local_jcn);
++  xDelete(local_irn);
++  return 0;
++}
++
++void MumpsSolve(int n,int nnz,int local_nnz,int* irn_loc,int* jcn_loc,IssmDouble *a_loc,IssmDouble *rhs,Parameters* parameters){
++  int packedDimsSparseArrLength=1+1+1+local_nnz+local_nnz;
++  int *packedDimsSparseArr=xNew<int>(packedDimsSparseArrLength);
++  packedDimsSparseArr[0]=n;
++  packedDimsSparseArr[1]=nnz;
++  packedDimsSparseArr[2]=local_nnz;
++  for (int i=0;i<local_nnz;++i) {
++    packedDimsSparseArr[3+i]=irn_loc[i];
++    packedDimsSparseArr[3+local_nnz+i]=jcn_loc[i];
++  }
++  IssmDouble *pack_A_rhs=xNew<IssmDouble>(local_nnz+n);
++  for (int i=0;i<local_nnz;++i) { 
++    pack_A_rhs[i]=a_loc[i];
++  }
++  for (int i=0;i<n;++i) { 
++    pack_A_rhs[local_nnz+i]=rhs[i];
++  }
++  IssmPDouble *passivePack_A_rhs=xNew<IssmPDouble>(local_nnz+n);
++  IssmPDouble *passiveSol=xNew<IssmPDouble>(n);
++  IssmDouble *sol=xNew<IssmDouble>(n);
++  call_ext_fct(dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p,
++	       packedDimsSparseArrLength, packedDimsSparseArr,
++	       local_nnz+n, passivePack_A_rhs, pack_A_rhs, 
++	       n, passiveSol,sol);
++  for (int i=0;i<n;++i) { 
++    rhs[i]=sol[i];
++  }
++  xDelete(sol);
++  xDelete(passiveSol);
++  xDelete(passivePack_A_rhs);
++  xDelete(pack_A_rhs);
++  xDelete(packedDimsSparseArr);
++}
++
++int fos_reverse_mumpsSolveEDF(int iArrLength, int* iArr, 
++			      int m, IssmPDouble *dp_U,
++			      int nPlusNz, IssmPDouble *dp_Z,
++			      IssmPDouble *dp_x, IssmPDouble *dp_y) {
++  // unpack parameters
++  int n=iArr[0];
++  int nnz=iArr[1];
++  int local_nnz=iArr[2];
++  int *local_irn=xNew<int>(local_nnz);
++  int *local_jcn=xNew<int>(local_nnz);
++  IssmPDouble *a_loc=xNew<IssmPDouble>(local_nnz);
++  for (int i=0;i<local_nnz;++i) {
++	  local_irn[i]=iArr[3+i];
++	  local_jcn[i]=iArr[3+local_nnz+i];
++	  a_loc[i]=dp_x[i];
++  }
++  IssmPDouble *rhs_sol=xNew<IssmPDouble>(n);
++  for (int i=0;i<n;++i) { 
++    rhs_sol[i]=dp_U[i];
++  }
++  DMUMPS_STRUC_C theMumpsStruc;
++  MumpsInit(theMumpsStruc);
++  MumpsSettings(theMumpsStruc);
++  theMumpsStruc.n=n;
++  theMumpsStruc.nz=nnz;
++  theMumpsStruc.nz_loc=local_nnz;
++  theMumpsStruc.irn_loc=local_irn;
++  theMumpsStruc.jcn_loc=local_jcn;
++  theMumpsStruc.a_loc=a_loc;
++  theMumpsStruc.rhs=rhs_sol;
++  theMumpsStruc.nrhs=1;
++  theMumpsStruc.lrhs=1;
++  theMumpsStruc.icntl[9-1] = 0; //solve for the transpose
++  MumpsAnalyze(theMumpsStruc);
++  MumpsFactorize(theMumpsStruc);
++  MumpsBacksubstitute(theMumpsStruc);
++  MumpsFinalize(theMumpsStruc);
++  // update the adjoint of the rhs:
++  for (int i=0;i<n;++i) {
++    dp_Z[local_nnz+i]+=rhs_sol[i];
++  }
++  // bcast dp_y (the solution of the forward system)
++  ISSM_MPI_Bcast(dp_y,n,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++  // bcast the adjoint of the right-hand-side, i.e. this solution
++  ISSM_MPI_Bcast(rhs_sol,n,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm());
++  // update the adjoint of the matrix with the outer product of right-hand-side adjoint and the original solution
++  for (int i=0;i<local_nnz;++i) {
++    dp_Z[i]-=rhs_sol[iArr[3+i]-1]*dp_y[iArr[3+local_nnz+i]-1];
++  }
++  xDelete(rhs_sol);
++  xDelete(a_loc);
++  xDelete(local_jcn);
++  xDelete(local_irn);
++  return 3;
++}
++
++#endif
+Index: ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h	(revision 16414)
++++ ../trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h	(revision 16415)
+@@ -16,8 +16,10 @@
+ /*}}}*/
+ 
+ class Parameters;
++template <class doubletype> class SparseRow;
+ 
+ void MpiDenseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, IssmDouble* Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters);
++void MpiSparseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, SparseRow<IssmDouble>** Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters);
+ 
+ #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+ // call back functions:
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16414)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp	(revision 16415)
+@@ -38,6 +38,9 @@
+ 	if (strcmp(mat_type,"mpidense")==0){
+ 		mat_type_enum=MpiDenseEnum;
+ 	}
++	else if (strcmp(mat_type,"mpisparse")==0){
++		mat_type_enum=MpiSparseEnum;
++	}
+ 	else if (strcmp(mat_type,"dense")==0){
+ 		if (isparallel) _error_("Dense matrix type not supported for parallel runs with num_procs>1");
+ 		else mat_type_enum=DenseEnum;
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16415)
+@@ -0,0 +1,581 @@
++/*!\file:  IssmMpiSparseMat.h
++ * \brief implementation of parallel sparse ISSM matrix. Internally, the parallel sparse matrix is 
++ * split in rows across each cpu. Locally, on each cpu, the local matrix is represented by a vector of sparse rows.
++ * This object needs to answer the API defined by the virtual functions in IssmAbsMat, 
++ * and the contructors required by IssmMat (see IssmMat.h)
++ */ 
++
++#ifndef _ISSM_MPI_SPARSE_MAT_H_
++#define _ISSM_MPI_SPARSE_MAT_H_
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../../datastructures/datastructures.h"
++#include "../../shared/shared.h"
++#include "../mumps/mumpsincludes.h"
++#include "./Bucket.h"
++#include "./IssmMpiVec.h"
++#include "./SparseRow.h"
++#include <math.h>
++
++/*}}}*/
++
++/*We need to template this class, in case we want to create Matrices that hold
++  IssmDouble* matrix or IssmPDouble* matrix. 
++  Such matrices would be useful for use without or with the matlab or python
++  interface (which do not care for IssmDouble types, but only rely on
++  IssmPDouble types)*/
++
++template <class doubletype> class IssmAbsMat;
++
++template <class doubletype> 
++class IssmMpiSparseMat:public IssmAbsMat<doubletype>{
++
++	public:
++
++		int M,N;  //global size
++		int m;    //local number of rows
++		SparseRow<doubletype>** matrix;  /*here, doubletype is either IssmDouble or IssmPDouble*/
++		DataSet*    buckets;  /*here, we store buckets of values that we will Assemble into a global matrix.*/
++		/*IssmMpiSparseMat constructors, destructors*/
++		/*FUNCTION IssmMpiSparseMat(){{{*/
++		IssmMpiSparseMat(){
++			this->M=0;
++			this->N=0;
++			this->m=0;
++			this->matrix=NULL;
++			this->buckets=new DataSet();
++		}
++		/*}}}*/
++		/*FUNCTION IssmMpiSparseMat(int M,int N){{{*/
++		IssmMpiSparseMat(int Min,int Nin){
++			this->Init(Min,Nin);
++		}
++		/*}}}*/
++		/*FUNCTION IssmMpiSparseMat(int M,int N, doubletype sparsity){{{*/
++		IssmMpiSparseMat(int pM,int pN, doubletype sparsity){
++			/*no sparsity involved here, the sparsity pattern is resolve during the assemble phase: */
++			this->Init(pM,pN);
++		}
++		/*}}}*/
++		/*FUNCTION IssmMpiSparseMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz){{{*/
++		IssmMpiSparseMat(int min,int nin,int Min,int Nin,int* d_nnz,int* o_nnz){
++
++			int i;
++
++			/*no sparsity involved here, the sparsity pattern is resolved at the assemble phase: */
++			this->buckets=new DataSet();
++
++			this->M=Min;
++			this->N=Nin;
++			this->m=min;
++
++			/*Initialize pointer: */
++			this->matrix=NULL;
++
++			/*Allocate: */
++			if (m*N){
++				this->matrix=xNew<SparseRow<doubletype>*>(m);
++				for(i=0;i<m;i++){
++					this->matrix[i]=new SparseRow<doubletype>(N);
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION IssmMpiSparseMat(int M,int N, int connectivity, int numberofdofspernode){{{*/
++		IssmMpiSparseMat(int pM,int pN, int connectivity,int numberofdofspernode){
++			/*this is not needed, sparsity pattern is resolved at assemble phase: */
++			this->Init(pM,pN);
++		}
++		/*}}}*/
++		/*FUNCTION IssmMpiSparseMat::Init(int Min,int Nin){{{*/
++		void Init(int Min,int Nin){
++			
++			int i;
++
++			this->buckets=new DataSet();
++
++			this->M=Min;
++			this->N=Nin;
++
++			/*Figure out local number of rows: */
++			this->m=DetermineLocalSize(this->M,IssmComm::GetComm());
++
++			/*Initialize pointer: */
++			this->matrix=NULL;
++
++			/*Allocate: */
++			if (m*N){
++				this->matrix=xNew<SparseRow<doubletype>*>(m);
++				for(i=0;i<m;i++){
++					this->matrix[i]=new SparseRow<doubletype>(N);
++				}
++			}
++		}
++		/*}}}*/
++		/*FUNCTION ~IssmMpiSparseMat(){{{*/
++		~IssmMpiSparseMat(){
++			int i;
++
++			if(m){
++				for(i=0;i<m;i++){
++					SparseRow<doubletype>* sparserow=this->matrix[i];
++					delete sparserow; this->matrix[i]=NULL;
++				}
++				xDelete<SparseRow<doubletype>*>(this->matrix);
++			}
++			M=0;
++			N=0;
++			m=0;
++			delete this->buckets;
++		}
++		/*}}}*/
++
++		/*IssmMpiSparseMat specific routines */
++		/*FUNCTION Echo{{{*/
++		void Echo(void){
++
++			int my_rank;
++			int i,j,k;
++
++			/*Do a synchronized dump across all the rows: */
++			my_rank=IssmComm::GetRank();
++			for(i=0;i<IssmComm::GetSize();i++){
++				if (my_rank==i){
++					_printf_("cpu " << i << " #rows: " << this->m << "\n");
++					for (j=0;j<this->m;j++){
++						_printf_("row " << j << ":");
++						this->matrix[j]->Echo();
++						_printf_("\n");
++					}
++				}
++				ISSM_MPI_Barrier(IssmComm::GetComm());
++			}
++
++		}
++		/*}}}*/
++		/*FUNCTION Assemble{{{*/
++		void Assemble(){
++
++			int           i,j;
++
++			int         *RowRank            = NULL;
++			int           num_procs;
++
++			int        *row_indices_forcpu = NULL;
++			int        *col_indices_forcpu = NULL;
++			int        *modes_forcpu       = NULL;
++			doubletype *values_forcpu      = NULL;
++			int         *numvalues_forcpu   = NULL;
++			DataSet     **bucketsforcpu       = NULL;
++
++			int        **row_indices_fromcpu = NULL;
++			int        **col_indices_fromcpu = NULL;
++			int        **modes_fromcpu       = NULL;
++			doubletype **values_fromcpu      = NULL;
++			int         *numvalues_fromcpu   = NULL;
++
++			int           lower_row;
++			int           upper_row;
++			int*          sendcnts            = NULL;
++			int*          displs              = NULL;
++			int           count               = 0;
++
++			int           this_row_numvalues;
++			int*          this_row_cols       = NULL;
++			int*          this_row_mods       = NULL;
++			doubletype*   this_row_values     = NULL;
++			int           row;
++
++			/*some communicator info: */
++			num_procs=IssmComm::GetSize();
++			ISSM_MPI_Comm comm=IssmComm::GetComm();
++
++			/*First, make a vector of size M, which for each row between 0 and M-1, tells which cpu this row belongs to: */
++			RowRank=DetermineRowRankFromLocalSize(M,m,comm);
++
++			/*Now, sort out our dataset of buckets according to cpu ownership of rows: {{{*/
++			bucketsforcpu=xNew<DataSet*>(num_procs);
++
++			for(i=0;i<num_procs;i++){
++				DataSet* bucketsofcpu_i=new DataSet();
++				for (j=0;j<buckets->Size();j++){
++					Bucket<doubletype>* bucket=(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
++					bucket->SpawnBucketsPerCpu(bucketsofcpu_i,i,RowRank);
++				}
++				bucketsforcpu[i]=bucketsofcpu_i;
++			}
++			/*}}}*/
++
++			/*Recap, each cpu has num_procs datasets of buckets. For a certain cpu j, for a given dataset i, the buckets this  {{{
++			 * dataset owns correspond to rows that are owned by cpu i, not j!. Out of all the buckets we own, make row,col,value,insert_mode 
++			 * vectors that will be shipped around the cluster: */
++			this->BucketsBuildScatterBuffers(&numvalues_forcpu,&row_indices_forcpu,&col_indices_forcpu,&values_forcpu,&modes_forcpu,bucketsforcpu,num_procs);
++			/*}}}*/
++
++			/*Now, we need to allocate on each cpu arrays to receive data from all the other cpus. To know what we need to allocate, we need  {{{
++			 *some scatter calls: */
++			numvalues_fromcpu   = xNew<int>(num_procs);
++			for(i=0;i<num_procs;i++){
++				ISSM_MPI_Scatter(numvalues_forcpu,1,ISSM_MPI_INT,numvalues_fromcpu+i,1,ISSM_MPI_INT,i,comm);
++			}
++
++			row_indices_fromcpu=xNew<int*>(num_procs);
++			col_indices_fromcpu=xNew<int*>(num_procs);
++			values_fromcpu=xNew<doubletype*>(num_procs);
++			modes_fromcpu=xNew<int*>(num_procs);
++			for(i=0;i<num_procs;i++){
++				int size=numvalues_fromcpu[i];
++				if(size){
++					row_indices_fromcpu[i]=xNew<int>(size);
++					col_indices_fromcpu[i]=xNew<int>(size);
++					values_fromcpu[i]=xNew<doubletype>(size);
++					modes_fromcpu[i]=xNew<int>(size);
++				}
++				else{
++					row_indices_fromcpu[i]=NULL;
++					col_indices_fromcpu[i]=NULL;
++					values_fromcpu[i]=NULL;
++					modes_fromcpu[i]=NULL;
++				}
++			}
++			/*}}}*/
++
++			/*Scatter values around: {{{*/
++			/*Now, to scatter values across the cluster, we need sendcnts and displs. Our sendbufs have been built by BucketsBuildScatterBuffers, with a stride given 
++			 * by numvalues_forcpu. Get this ready to go before starting the scatter itslef. For reference, here is the ISSM_MPI_Scatterv prototype: 
++			 * int ISSM_MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, ISSM_MPI_Datatype sendtype, void *recvbuf, int recvcnt, ISSM_MPI_Datatype recvtype, int root, ISSM_MPI_Comm comm) :*/
++			sendcnts=xNew<int>(num_procs);
++			displs=xNew<int>(num_procs);
++			count=0;
++			for(i=0;i<num_procs;i++){
++				sendcnts[i]=numvalues_forcpu[i];
++				displs[i]=count;
++				count+=numvalues_forcpu[i];
++			}
++
++			for(i=0;i<num_procs;i++){
++				ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( col_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
++				ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
++			}
++			/*}}}*/
++
++			/*Plug values into global matrix. To do so, we are going to first figure out how many overall values each sparse row is going to get, then we fill up these values, and give it to each sparse row: {{{*/
++			GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,comm);
++			
++			/*Deal with sparse row one at a time: */
++			for(row=0;row<this->m;row++){
++
++				/*figure out how many values this row is going to get: */
++				count=0;
++				for(i=0;i<num_procs;i++){ 
++					int  numvalues=numvalues_fromcpu[i];
++					int* rows=row_indices_fromcpu[i];
++					for(j=0;j<numvalues;j++)if((rows[j]-lower_row)==row)count++;
++				}
++
++				/*Allocate: */
++				this_row_numvalues=count;
++				this_row_cols=xNew<int>(this_row_numvalues);
++				this_row_values=xNew<doubletype>(this_row_numvalues);
++				this_row_mods=xNew<int>(this_row_numvalues);
++
++				/*Collect: */
++				count=0;
++				for(i=0;i<num_procs;i++){
++					int  numvalues=numvalues_fromcpu[i];
++					int* rows=row_indices_fromcpu[i];
++					int* cols=col_indices_fromcpu[i];
++					doubletype* values=values_fromcpu[i];
++					int* mods=modes_fromcpu[i];
++
++					for(j=0;j<numvalues;j++){
++						if((rows[j]-lower_row)==row){
++							this_row_cols[count]=cols[j];
++							this_row_values[count]=values[j];
++							this_row_mods[count]=mods[j];
++							count++;
++						}
++					}
++				}
++				if(count!=this_row_numvalues)_error_("counter error during assembly of values!");
++
++				/*Now fill in the sparse row: */
++				this->matrix[row]->SetValues(this_row_numvalues,this_row_cols,this_row_values,this_row_mods);
++
++				/*Free ressources: */
++				xDelete<int>(this_row_cols);
++				xDelete<doubletype>(this_row_values);
++				xDelete<int>(this_row_mods);
++			}
++			/*}}}*/
++
++			/*Free ressources:{{{*/
++			xDelete<int>(RowRank);
++			xDelete<int>(row_indices_forcpu);
++			xDelete<int>(col_indices_forcpu);
++			xDelete<int>(modes_forcpu);
++			xDelete<doubletype>(values_forcpu);
++			xDelete<int>(numvalues_forcpu);
++
++			for(i=0;i<num_procs;i++){
++				DataSet* buckets=bucketsforcpu[i];
++				delete buckets;
++			}
++			xDelete<DataSet*>(bucketsforcpu);
++
++			for(i=0;i<num_procs;i++){
++				int* rows=row_indices_fromcpu[i];
++				int* cols=col_indices_fromcpu[i];
++				int* modes=modes_fromcpu[i];
++				doubletype* values=values_fromcpu[i];
++
++				xDelete<int>(rows);
++				xDelete<int>(cols);
++				xDelete<int>(modes);
++				xDelete<doubletype>(values);
++			}
++			xDelete<int*>(row_indices_fromcpu);
++			xDelete<int*>(col_indices_fromcpu);
++			xDelete<int*>(modes_fromcpu);
++			xDelete<doubletype*>(values_fromcpu);
++			xDelete<int>(numvalues_fromcpu);
++
++			xDelete<int>(sendcnts);
++			xDelete<int>(displs);
++			/*}}}*/
++
++		}
++		/*}}}*/
++		/*FUNCTION Norm{{{*/
++		doubletype Norm(NormMode mode){
++
++			doubletype norm,local_norm;
++			doubletype absolute;
++			int i,j;
++
++			switch(mode){
++				case NORM_INF:
++					local_norm=0;
++					for(i=0;i<this->m;i++){
++						local_norm=max(local_norm,this->matrix[i]->Norm(mode));
++					}
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_MAX, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++					return norm;
++					break; 
++				case NORM_FROB:
++					local_norm=0;
++					for(i=0;i<this->m;i++){
++						local_norm+=this->matrix[i]->Norm(mode);
++					}
++					ISSM_MPI_Reduce(&local_norm, &norm, 1, ISSM_MPI_DOUBLE, ISSM_MPI_SUM, 0, IssmComm::GetComm());
++					ISSM_MPI_Bcast(&norm,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
++					return sqrt(norm);
++					break; 
++
++				default:
++					_error_("unknown norm !");
++					break;
++			}
++		}
++		/*}}}*/
++		/*FUNCTION GetSize{{{*/
++		void GetSize(int* pM,int* pN){
++			*pM=M;
++			*pN=N;
++		}
++		/*}}}*/
++		/*FUNCTION GetLocalSize{{{*/
++		void GetLocalSize(int* pM,int* pN){
++			*pM=m;
++			*pN=N;
++		}
++		/*}}}*/
++		/*FUNCTION MatMult{{{*/
++		void MatMult(IssmAbsVec<doubletype>* Xin,IssmAbsVec<doubletype>* AXin){
++
++			int         i,j;
++			doubletype *X_serial  = NULL;
++
++			/*A check on the types: */
++			if(IssmVecTypeFromToolkitOptions()!=MpiEnum)_error_("MatMult operation only possible with 'mpi' vectors");
++
++			/*Now that we are sure, cast vectors: */
++			IssmMpiVec<doubletype>* X=(IssmMpiVec<doubletype>*)Xin;
++			IssmMpiVec<doubletype>* AX=(IssmMpiVec<doubletype>*)AXin;
++
++			/*Serialize input Xin: */
++			X_serial=X->ToMPISerial();
++
++			/*Every cpu has a serial version of the input vector. Use it to do the Matrix-Vector multiply 
++			 *locally and plug it into AXin: */
++			for(i=0;i<this->m;i++){
++				AX->vector[i]=this->matrix[i]->Mult(X_serial);
++			}
++
++			/*Free ressources: */
++			xDelete<doubletype>(X_serial);
++		}
++		/*}}}*/
++		/*FUNCTION Duplicate{{{*/
++		IssmMpiSparseMat<doubletype>* Duplicate(void){
++
++			_error_("not supported yet!");
++
++		}
++		/*}}}*/
++		/*FUNCTION ToSerial{{{*/
++		doubletype* ToSerial(void){
++			_error_("not supported yet!");
++		}
++		/*}}}*/
++		/*FUNCTION SetValues{{{*/
++		void SetValues(int min,int* idxm,int nin,int* idxn,doubletype* values,InsMode mode){
++
++			/*we need to store all the values we collect here in order to Assemble later. 
++			 * Indeed, the values we are collecting here most of the time will not belong 
++			 * to us, but to another part of the matrix on another cpu: */
++			_assert_(buckets);
++
++			buckets->AddObject(new Bucket<doubletype>(min,idxm,nin,idxn,values,mode));
++
++		}
++		/*}}}*/
++		/*FUNCTION Convert{{{*/
++		void Convert(MatrixType type){
++			_error_("not supported yet!");
++		}
++		/*}}}*/		
++		/*FUNCTION BucketsBuildScatterBuffers{{{*/
++		void BucketsBuildScatterBuffers(int** pnumvalues_forcpu,int** prow_indices_forcpu,int** pcol_indices_forcpu,doubletype** pvalues_forcpu,int** pmodes_forcpu,DataSet** bucketsforcpu,int num_procs){
++
++			/*intermediary: */
++			int         i,j;
++			int         count                   = 0;
++			int         total_size              = 0;
++			int        *temp_row_indices_forcpu = NULL;
++			int        *temp_col_indices_forcpu = NULL;
++			doubletype *temp_values_forcpu      = NULL;
++			int        *temp_modes_forcpu       = NULL;
++
++			/*output: */
++			int        *numvalues_forcpu        = NULL;
++			int        *row_indices_forcpu      = NULL;
++			int        *col_indices_forcpu      = NULL;
++			doubletype *values_forcpu           = NULL;
++			int        *modes_forcpu            = NULL;
++
++			/*figure out size of buffers per cpu: */
++
++			numvalues_forcpu=xNew<int>(num_procs);
++			for(i=0;i<num_procs;i++){
++				DataSet    *buckets            = bucketsforcpu[i];
++
++				count=0;
++				for(j=0;j<buckets->Size();j++){
++					Bucket<doubletype>* bucket =(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
++					count+=bucket->MarshallSize();
++				}
++
++				numvalues_forcpu[i]=count;
++			}
++
++			/*now, figure out size of  total buffers (for all cpus!): */
++			count=0;
++			for(i=0;i<num_procs;i++){
++				count+=numvalues_forcpu[i];
++			}
++			total_size=count;
++
++			/*Allocate buffers: */
++			row_indices_forcpu = xNew<int>(total_size);
++			col_indices_forcpu = xNew<int>(total_size);
++			values_forcpu = xNew<doubletype>(total_size);
++			modes_forcpu = xNew<int>(total_size);
++
++			/*we are going to march through the buffers, and marshall data onto them, so in order to not
++			 *lose track of where these buffers are located in memory, we are going to work using copies 
++			 of them: */
++			temp_row_indices_forcpu=row_indices_forcpu;
++			temp_col_indices_forcpu=col_indices_forcpu;
++			temp_values_forcpu=values_forcpu;
++			temp_modes_forcpu=modes_forcpu;
++
++			/*Fill buffers: */
++			for(i=0;i<num_procs;i++){
++				DataSet    *buckets            = bucketsforcpu[i];
++				for(j=0;j<buckets->Size();j++){
++					Bucket<doubletype>* bucket =(Bucket<doubletype>*)buckets->GetObjectByOffset(j);
++					bucket->Marshall(&temp_row_indices_forcpu,&temp_col_indices_forcpu,&temp_values_forcpu,&temp_modes_forcpu); //pass in the address of the buffers, so as to have the Marshall routine increment them.
++				}
++			}
++
++			/*sanity check: */
++			if (temp_row_indices_forcpu!=row_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
++			if (temp_col_indices_forcpu!=col_indices_forcpu+total_size)_error_("problem with marshalling of buckets");
++			if (temp_values_forcpu!=values_forcpu+total_size)_error_("problem with marshalling of buckets");
++			if (temp_modes_forcpu!=modes_forcpu+total_size)_error_("problem with marshalling of buckets");
++
++			/*output buffers: */
++			*pnumvalues_forcpu   = numvalues_forcpu;
++			*prow_indices_forcpu = row_indices_forcpu;
++			*pcol_indices_forcpu = col_indices_forcpu;
++			*pvalues_forcpu      = values_forcpu;
++			*pmodes_forcpu       = modes_forcpu;
++		}
++		/*}}}*/		
++		#ifndef _HAVE_WRAPPERS_
++		/*Solve{{{*/
++		IssmAbsVec<IssmDouble>* Solve(IssmAbsVec<IssmDouble>* pfin, Parameters* parameters){
++
++			/*output: */
++			IssmMpiVec<IssmDouble>* uf=NULL;
++			IssmMpiVec<IssmDouble>* pf=NULL;
++
++			/*Assume we are getting an IssmMpiVec in input, downcast: */
++			pf=(IssmMpiVec<IssmDouble>*)pfin;
++
++			switch(IssmSolverTypeFromToolkitOptions()){
++				case MumpsEnum: {
++					/*Initialize output: */
++					uf=pf->Duplicate();
++					#ifdef _HAVE_MUMPS_
++					MpiSparseMumpsSolve(/*output*/ uf->vector,uf->M,uf->m, /*stiffness matrix:*/ this->matrix,this->M,this->N,this->m, /*right hand side load vector: */ pf->vector,pf->M,pf->m,parameters);
++					#else
++					_error_("IssmMpiSparseMat solver requires MUMPS solver");
++					#endif
++					return (IssmAbsVec<IssmDouble>*)uf;
++									 }
++				case GslEnum: {
++
++					IssmDouble* x=NULL;
++					#ifdef _HAVE_GSL_
++
++					_error_("not implemented yet!");
++					//SparseGslSolve(/*output*/ &x,/*stiffness matrix:*/ this->matrix,this->M,this->N, /*right hand side load vector: */ pf->vector,pf->M,parameters);
++
++					uf=new IssmMpiVec<IssmDouble>(x,this->N); xDelete(x);
++
++					return (IssmAbsVec<IssmDouble>*)uf;
++					#else
++					_error_("GSL support not compiled in!");
++					#endif
++								  }
++				default:
++					_error_("solver type not supported yet!");
++			}
++
++		}/*}}}*/
++		#endif
++};
++
++#endif //#ifndef _ISSM_MPI_SPARSE_MAT_H_
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16414)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 16415)
+@@ -145,9 +145,9 @@
+ 				if (my_rank==i){
+ 					_printf_("cpu " << i << " #rows: " << this->m << "\n");
+ 					for (j=0;j<this->m;j++){
+-						_printf_("row " << j << "\n");
++						_printf_("row " << j << ":");
+ 						for (k=0;k<this->N;k++){
+-							_printf_(this->matrix[j*this->N+k] << " \n");
++							if(this->matrix[j*this->N+k]!=0)_printf_("(" << k << "," << this->matrix[j*this->N+k] << ") ");
+ 						}
+ 						_printf_("\n");
+ 					}
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 16414)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMat.h	(revision 16415)
+@@ -28,6 +28,7 @@
+ template <class doubletype> class IssmVec;
+ template <class doubletype> class IssmDenseMat;
+ template <class doubletype> class IssmMpiDenseMat;
++template <class doubletype> class IssmMpiSparseMat;
+ class Parameters;
+ 
+ template <class doubletype> 
+@@ -52,6 +53,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>();
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+@@ -71,6 +79,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>(M,N);
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+@@ -90,6 +105,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>(M,N,sparsity);
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+@@ -109,6 +131,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>(m,n,M,N,d_nnz,o_nnz);
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+@@ -128,6 +157,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>(serial_mat,M,N,sparsity);
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+@@ -148,6 +184,13 @@
+ 					_error_("MpiDense matrix requires compilation of MPI!");
+ 					#endif
+ 					break;
++				case MpiSparseEnum:
++					#ifdef _HAVE_MPI_
++					this->matrix=new IssmMpiSparseMat<doubletype>(M,N,connectivity,numberofdofspernode);
++					#else
++					_error_("MpiSparse matrix requires compilation of MPI!");
++					#endif
++					break;
+ 				default:
+ 					_error_("matrix type not supported yet!");
+ 			}
+Index: ../trunk-jpl/src/c/toolkits/issm/issmtoolkit.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/issmtoolkit.h	(revision 16414)
++++ ../trunk-jpl/src/c/toolkits/issm/issmtoolkit.h	(revision 16415)
+@@ -21,6 +21,7 @@
+ 
+ #ifdef _HAVE_MPI_
+ #include "./IssmMpiDenseMat.h"
++#include "./IssmMpiSparseMat.h"
+ #include "./IssmMpiVec.h"
+ #endif
+ 
+Index: ../trunk-jpl/src/c/toolkits/issm/SparseRow.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 0)
++++ ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16415)
+@@ -0,0 +1,169 @@
++/*!\file:  SparseRow: 
++ * \brief implementation of a sparse row, which can then be used to make a sparse matrix.
++ */ 
++
++#ifndef _SPARSE_ROW_H_
++#define _SPARSE_ROW_H_
++
++/*Headers:*/
++#include "../toolkitsenums.h"
++#include "../../shared/shared.h"
++
++template <class doubletype> 
++class SparseRow{
++
++	public:
++
++		int         M; //real size
++		int         ncols; //number of non-zeros 
++		int*        indices;
++		doubletype* values;
++
++		/*SparseRow constructors, destructors*/
++		SparseRow(){ /*{{{*/
++			 M=0;
++			 ncols=0;
++			 indices=NULL;
++			 values=NULL;
++		} /*}}}*/
++		SparseRow(int in_M){/*{{{*/
++			
++			M=in_M;
++			ncols=0;
++			indices=NULL;
++			values=NULL;
++		} /*}}}*/
++		~SparseRow(){/*{{{*/
++			if(ncols){
++				xDelete<int>(indices);
++				xDelete<doubletype>(values);
++			}
++		} /*}}}*/
++
++		/*SparseRow specific routines*/
++		void Echo(){ /*{{{*/
++			int i;
++
++			for(i=0;i<ncols;i++){
++				_printf_("(" << indices[i] << "," << values[i] << ") ");
++			}
++		} /*}}}*/
++		void SetValues(int numvalues,int* cols,doubletype* vals, int* mods){ /*{{{*/
++
++			int count;
++			int i,j;
++			int* buffer=NULL;
++
++			if(!M)_error_("unknow dimension for this sparse row!");
++
++			/*Deallocate if already allocated: */
++			if(ncols){
++				xDelete<int>(indices);
++				xDelete<doubletype>(values);
++			}
++
++			/*check numvalues: */
++			if(!numvalues)return;
++
++			/*Figure out number of non-zero values ncols: */
++			buffer=xNewZeroInit<int>(M);
++			for(i=0;i<numvalues;i++){
++				if(mods[i]==ADD_VAL){
++					if(buffer[cols[i]]!=2)buffer[cols[i]]=1;
++				}
++				else buffer[cols[i]]=2;
++			}
++			ncols=0;
++			for(i=0;i<M;i++)if(buffer[i]!=0)ncols++;
++			_assert_(ncols);
++
++
++			/*Allocate:*/
++			indices=xNew<int>(ncols); _assert_(indices);
++			values=xNewZeroInit<doubletype>(ncols);  _assert_(values);
++
++			/*Go through buffer and add values: */
++			count=0;
++			for(i=0;i<M;i++){
++				if(buffer[i]==1){
++					indices[count]=i;
++					
++					/*ADD_VALUE: chase all values with row index i*/
++					for(j=0;j<numvalues;j++){
++						if (cols[j]==i)values[count]+=vals[j];
++					}
++					count++;
++				}
++				else if(buffer[i]==2){
++					indices[count]=i;
++					
++					/*INS_VALUE: chase first value with row index i*/
++					for(j=0;j<numvalues;j++){
++						if (cols[j]==i){
++							values[count]=vals[j]; 
++							break;
++						}
++					}
++					count++;
++				}
++			}
++			if(count!=ncols)_error_("counter problem during set values operations");
++
++			/*Free ressources: */
++			xDelete<int>(buffer);
++
++		} /*}}}*/
++		doubletype Norm(NormMode mode){ /*{{{*/
++
++			int i;
++			doubletype norm=0;
++
++			switch(mode){
++				case NORM_INF:
++					for(i=0;i<ncols;i++){
++						norm+=fabs(values[i]);
++					}
++					return norm;
++					break; 
++				case NORM_FROB:
++					for(i=0;i<ncols;i++){
++						norm+=pow(values[i],2);
++					}
++					return norm;
++					break; 
++
++				default:
++					_error_("unknown norm !");
++					break;
++			}
++		}
++		/*}}}*/
++		doubletype Mult(doubletype* X){ /*{{{*/
++
++			int i;
++			doubletype mult=0;
++
++			for(i=0;i<ncols;i++){
++				mult+=values[i]*X[indices[i]];
++			}
++			
++			return mult;
++		}
++		/*}}}*/
++		int Nnz(void){ /*{{{*/
++
++			return ncols;
++		}
++		/*}}}*/
++		void SetIrnJcnA(int* irn_loc,int* jcn_loc,doubletype* a_loc,int i_index,int count){/*{{{*/
++			int i;
++
++			for(i=0;i<ncols;i++){
++				irn_loc[count+i]=i_index;
++				jcn_loc[count+i]=indices[i]+1; //fortran indexing
++				a_loc[count+i]=values[i];
++			}
++		}
++		/*}}}*/
++};
++#endif //#ifndef _SPARSE_ROW_H_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16414)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16415)
+@@ -228,6 +228,7 @@
+ 					./toolkits/issm/IssmVec.h\
+ 					./toolkits/issm/IssmSolver.h\
+ 					./toolkits/issm/IssmSolver.cpp\
++					./toolkits/issm/SparseRow.h\
+ 					./toolkits/issm/Bucket.h\
+ 					./toolkits/mpi/issmmpi.h\
+ 					./toolkits/mpi/issmmpi.cpp\
+@@ -803,7 +804,7 @@
+ #Mumps sources  {{{
+ mumps_sources=      ./toolkits/mumps\
+ 					./toolkits/mumps/mumpsincludes.h\
+-					./toolkits/mumps/MpiDenseMumpsSolve.cpp
++					./toolkits/mumps/MumpsSolve.cpp
+ #}}}
+ #Gsl sources  {{{
+ gsl_sources=      ./toolkits/gsl\
+Index: ../trunk-jpl/src/m/solvers/issmmumpssolver.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/issmmumpssolver.m	(revision 16414)
++++ ../trunk-jpl/src/m/solvers/issmmumpssolver.m	(revision 16415)
+@@ -10,6 +10,6 @@
+ 
+ %default issmoptions options
+ issmoptions.toolkit='issm';
+-issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense');
++issmoptions.mat_type=getfieldvalue(options,'mat_type','mpisparse');
+ issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi');
+ issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps');
+Index: ../trunk-jpl/src/m/enum/MpiSparseEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MpiSparseEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MpiSparseEnum.m	(revision 16415)
+@@ -0,0 +1,11 @@
++function macro=MpiSparseEnum()
++%MPISPARSEENUM - Enum of MpiSparse
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=MpiSparseEnum()
++
++macro=StringToEnum('MpiSparse');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16414)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16415)
+@@ -590,6 +590,7 @@
+ def XYZEnum(): return StringToEnum("XYZ")[0]
+ def DenseEnum(): return StringToEnum("Dense")[0]
+ def MpiDenseEnum(): return StringToEnum("MpiDense")[0]
++def MpiSparseEnum(): return StringToEnum("MpiSparse")[0]
+ def SeqEnum(): return StringToEnum("Seq")[0]
+ def MpiEnum(): return StringToEnum("Mpi")[0]
+ def MumpsEnum(): return StringToEnum("Mumps")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16415-16416.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16415-16416.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16415-16416.diff	(revision 16556)
@@ -0,0 +1,422 @@
+Index: ../trunk-jpl/src/m/mech/backstressfrominversion.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/backstressfrominversion.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/backstressfrominversion.m	(revision 16416)
+@@ -0,0 +1,71 @@
++function backstress=backstressfrominversion(md,varargin)
++%BACKSTRESSFROMINVERSION - compute ice shelf backstress from inversion results 
++%
++%	 This routine computes backstress based on the analytical formalism of
++%	 Thomas (1973) and Borstad et al. (2013).  The model must contain inversion
++%	 results for ice rigidity.  Strain rates must also be included, either from
++%	 observed or modeled velocities.  Ice rigidity B is assumed to be
++%	 parameterized by the ice temperature in md.materials.rheology_B.
++%
++%   Available options:
++%		- 'tempmask'	: mask the inverted rigidity to be no more than
++%							appropriate for the temperature of the ice?  
++%							Boolean, defaults to false.
++%		- 'smoothing'	: the amount of smoothing to be applied to the strain rate data.
++%								Type 'help averaging' for more information on its
++%								usage. Defaults to 0.
++%		- 'coordsys'	: coordinate system for calculating the strain rate
++%							components. Must be one of: 
++%				'longitudinal': x axis aligned along a flowline at every point (default)
++%				'principal': x axis aligned along maximum principal strain rate
++%					at every point
++%				'xy': x and y axes same as in polar stereographic projection 
++%
++%   Return values:
++%		'backstress' is the inferred backstress necessary to balance the
++%		analytical solution (keeping damage within its appropriate limits, e.g. D
++%		in [0,1]).
++%
++%   Usage:
++%      backstress=backstressfrominversion(md,options)
++%
++%   Example:
++%      backstress=backstressfrominversion(md,'smoothing',2,'coordsys','longitudinal','tempmask',true);
++
++% check inputs
++if (nargin<1),
++	help backstressfrominversion
++	error('bad usage');
++end
++if isempty(fieldnames(md.results)),
++	error(['md.results.strainrate is not present.  Calculate using md=mechanicalproperties(md,vx,vy)']);
++end
++if ~(md.mesh.dimension==2),
++	error('only 2d model supported currently');
++end
++if any(md.flowequation.element_equation~=2),
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA elements');
++end
++
++% process options
++options = pairoptions(varargin{:});
++smoothing = getfieldvalue(options,'smoothing',0);
++coordsys = getfieldvalue(options,'coordsys','longitudinal');
++tempmask = getfieldvalue(options,'tempmask',false);
++
++T=0.5*md.materials.rho_ice*md.constants.g*(1-md.materials.rho_ice/md.materials.rho_water)*md.geometry.thickness;
++n=averaging(md,md.materials.rheology_n,0);
++B=md.materials.rheology_B;
++Bi=md.results.StressbalanceSolution.MaterialsRheologyBbar;
++
++[a0,b0,theta0,ex0]=thomasparams(md,'eq','Thomas','smoothing',smoothing,'coordsys',coordsys);
++
++if tempmask
++	Bi=md.results.StressbalanceSolution.MaterialsRheologyBbar;
++   pos=find(Bi>md.materials.rheology_B);
++   Bi(pos)=md.materials.rheology_B(pos);
++end
++
++% analytical backstress solution
++backstress=T-Bi.*sign(ex0).*(2+a0).*abs(ex0).^(1./n)./((1+a0+a0.^2+b0.^2).^((n-1)/2./n));
++backstress(find(backstress<0))=0;
+Index: ../trunk-jpl/src/m/mech/damagefrominversion.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/damagefrominversion.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/damagefrominversion.m	(revision 16416)
+@@ -0,0 +1,33 @@
++function damage=damagefrominversion(md)
++%DAMAGEFROMINVERSION - compute ice shelf damage from inversion results
++%
++%	This routine computes damage based on the analytical formalism of Borstad et
++%	al. (2013).  The model must contain inversion results for ice rigidity.  Ice
++%	rigidity B is assumed to be parameterized by the ice temperature in
++%	md.materials.rheology_B. 
++%
++%	Usage:
++%		damage=damagefrominversion(md)
++%
++%	Example:
++%		damage=damagefrominversion(md)
++
++% check inputs
++if (nargin<1),
++	help backstressfrominversion
++	error('bad usage');
++end
++if isempty(fieldnames(md.results)),
++	error(['md.results.strainrate is not present.  Calculate using md=mechanicalproperties(md,vx,vy)']);
++end
++if ~(md.mesh.dimension==2),
++	error('only 2d model supported currently');
++end
++if any(md.flowequation.element_equation~=2),
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA elements');
++end
++
++damage=zeros(md.mesh.numberofvertices,1);
++% Damage where Bi softer than B(T)
++pos=find(md.results.StressbalanceSolution.MaterialsRheologyBbar<md.materials.rheology_B);
++damage(pos)=1-md.results.StressbalanceSolution.MaterialsRheologyBbar(pos)./md.materials.rheology_B(pos);
+Index: ../trunk-jpl/src/m/mech/thomasparams.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/thomasparams.m	(revision 0)
++++ ../trunk-jpl/src/m/mech/thomasparams.m	(revision 16416)
+@@ -0,0 +1,147 @@
++function [alpha,beta,theta,ex]=thomasparams(md,varargin)
++%THOMASPARAMS - compute Thomas' geometric parameters for an ice shelf 
++%
++%	 This routine computes geometric parameters representing ratios between
++%	 components of the horizontal strain rate tensor for an ice shelf, as
++%	 originally developed in Thomas (1973).  The model must contain computed
++%	 strain rates, either from observed or modeled ice velocities.
++%
++%   Available options:
++%	 -'eq'			: analytical equation to use in the calculation.  Must be one of:
++%				'Thomas' for a 2D ice shelf, taking into account full strain rate
++%					tensor (default)
++%				'Weertman1D' for a confined ice shelf free to flow in one direction
++%				'Weertman2D' for an unconfined ice shelf free to spread in any direction
++%
++%	 -'smoothing'	: an integer smoothing parameter for the averaging function
++%						(default 0) Type 'help averaging' for more information on its usage.
++%
++%	 -'coordsys'	: coordinate system for calculating the strain rate
++%						components. Must be one of:
++%				'longitudinal': x axis aligned along a flowline at every point (default)
++%				'principal': x axis aligned along maximum principal strain rate
++%					at every point
++%				'xy': x and y axes same as in polar stereographic projection 
++%
++%   Return values: 
++%
++%		'alpha' which is the ratio e_yy/e_xx between components of the strain
++%		rate tensor
++%
++%		'beta' which is the ratio e_xy/e_xx between components of the strain rate
++%		tensor
++%
++%		'theta' which is a combination of alpha and beta arising from the form of
++%		the equivalent stress
++%
++%		'exx' is the longitudinal strain rate along a coordinate system defined
++%		by 'coordsys' 
++%
++%   Usage: [alpha,beta,theta,exx]=ThomasParams(md,options)
++%
++%   Example: [alpha,beta,theta,exx]=ThomasParams(md,'eq','Thomas','smoothing',2,'coordsys','longitudinal')
++
++%some checks
++if (nargin<4)
++	help ThomasParams
++	error('bad usage');
++end
++if isempty(fieldnames(md.results)),
++	error(['md.results.strainrate is not present.  Calculate using md=mechanicalproperties(md,vx,vy)'])
++end
++if ~(md.mesh.dimension==2)
++	error('only 2d model supported currently');
++end
++if any(md.flowequation.element_equation~=2),
++	disp('Warning: the model has some non SSA elements. These will be treated like SSA elements');
++end
++
++% process options
++options = pairoptions(varargin{:});
++eq = getfieldvalue(options,'eq','Thomas');
++smoothing = getfieldvalue(options,'smoothing',0);
++coordsys = getfieldvalue(options,'coordsys','longitudinal');
++
++% average element strain rates onto vertices
++e1=averaging(md,md.results.strainrate.principalvalue1,smoothing)/md.constants.yts; % convert to s^-1
++e2=averaging(md,md.results.strainrate.principalvalue2,smoothing)/md.constants.yts;
++exx=averaging(md,md.results.strainrate.xx,smoothing)/md.constants.yts;
++eyy=averaging(md,md.results.strainrate.yy,smoothing)/md.constants.yts;
++exy=averaging(md,md.results.strainrate.xy,smoothing)/md.constants.yts;
++
++% checks: any of e1 or e2 equal to zero?
++pos=find(e1==0);
++if any(pos==1)
++	disp('WARNING: first principal strain rate equal to zero.  Value set to 1e-13 s^-1');
++	e1(pos)=1e-13;
++end
++pos=find(e2==0);
++if any(pos==1)
++	disp('WARNING: second principal strain rate equal to zero.  Value set to 1e-13 s^-1');
++	e2(pos)=1e-13;
++end
++
++switch coordsys
++	case 'principal'
++		b=zeros(md.mesh.numberofvertices,1);
++		ex=e1;
++		a=e2./e1;
++		pos=find(e1<0 & e2>0); % longitudinal compression and lateral tension
++		a(pos)=e1(pos)./e2(pos);
++		ex(pos)=e2(pos);
++		pos2=find(e1<0 & e2<0 & abs(e1)<abs(e2)); % lateral and longitudinal compression
++		a(pos2)=e1(pos2)./e2(pos2);
++		ex(pos2)=e2(pos2);
++		pos3=find(e1>0 & e2>0 & abs(e1)<abs(e2)); % lateral and longitudinal tension
++		a(pos3)=e1(pos3)./e2(pos3);
++		ex(pos3)=e2(pos3);
++		id=find(e1<0 & e2<0);
++		a(id)=-a(id); % where both strain rates are compressive, enforce negative alpha
++		%mask=ismember(1:md.mesh.numberofvertices,id);
++		%plotmodel(md,'data',ex,'mask',mask)
++	case 'xy'
++		ex=exx;
++		a=eyy./exx;
++		b=exy./exx;
++	case 'longitudinal'
++		% using longitudinal strain rates defined by observed velocity vector
++		velangle=atan(md.initialization.vy./md.initialization.vx);
++		pos=find(md.initialization.vx==0);
++		velangle(pos)=pi/2;
++		ex=0.5*(exx+eyy)+0.5*(exx-eyy).*cos(2*velangle)+exy.*sin(2*velangle);
++		ey=exx+eyy-ex; % trace of strain rate tensor is invariant
++		exy=-0.5*(exx-eyy).*sin(2*velangle)+exy.*cos(2*velangle);
++		a=ey./ex;
++		b=exy./ex;
++		pos=find(ex<0 & ey<0);
++		%length(pos)
++		a(pos)=-a(pos);
++	otherwise
++		error('argument passed to "coordsys" not valid');
++end
++
++% a < -1 in areas of strong lateral compression or longitudinal compression and
++% theta flips sign at a = -2
++pos=find(abs((abs(a)-2))<1e-3);
++if length(pos)>0,
++	disp(['Warning: ', num2str(length(pos)), ' vertices have alpha within 1e-3 of -2'])
++end
++a(pos)=-2+1e-3;
++
++% rheology
++n=averaging(md,md.materials.rheology_n,0);
++
++switch eq
++	case 'Weertman1D'
++		theta=1./8;
++		a=zeros(md.mesh.numberofvertices,1);
++	case 'Weertman2D'
++		theta=1./9;
++		a=ones(md.mesh.numberofvertices,1);
++	case 'Thomas'
++		theta=((1+a+a.^2+b.^2).^((n-1)/2))./(abs(2+a).^n);
++	otherwise
++		error('argument passed to "eq" not valid.  Type "help zinv" for usage');
++end
++alpha=a;
++beta=b;
+Index: ../trunk-jpl/src/m/mech/analyticaldamage.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 16415)
++++ ../trunk-jpl/src/m/mech/analyticaldamage.m	(revision 16416)
+@@ -12,25 +12,32 @@
+ %								'Weertman2D' for an unconfined ice shelf free to spread in any direction
+ %								'Thomas' for a 2D ice shelf, taking into account full strain rate tensor (default)
+ %		- 'smoothing'	: the amount of smoothing to be applied to the strain rate data.
+-%								Type 'help averaging' for more information on its usage.
+-%		- 'sigmab'		: a compressive backstress term to be subtracted from the driving stress 
+-%								in the damage calculation
++%								Type 'help averaging' for more information on its
++%								usage. Defaults to 0.
++%		- 'sigmab'		: a-priori backstress in opposition to the driving stress.
++%								Defaults to 0 everywhere. 
++
++%		- 'coordsys'	: coordinate system for calculating the strain rate
++%							components. Must be one of: 
++%				'longitudinal': x axis aligned along a flowline at every point (default)
++%				'principal': x axis aligned along maximum principal strain rate
++%					at every point
++%				'xy': x and y axes same as in polar stereographic projection 
+ %
+ %   Return values:
+ %		'damage' which is truncated in the range [0,1-1e-9]
+ %
+-%	   'B' is the rigidity, which is equal to md.materials.rheology_B in areas outside
+-%		those defined by 'mask.'  Within areas defined by 'mask,' where negative damage 
+-%		is inferred, 'B' is updated to make damage equal to zero.  
++%	   'B' is the ice rigidity calculated assuming D=0 everywhere. 
+ %
+-%		'backstress' is the inferred backstress necessary to balance the analytical solution
+-%		(keeping damage within its appropriate limits, e.g. D in [0,1]).
++%		'backstress' is the inferred backstress necessary to balance the
++%		analytical solution (keeping damage within its appropriate limits, e.g. D
++%		in [0,1]).
+ %
+ %   Usage:
+ %      [damage,B,backstress]=analyticaldamage(md,options)
+ %
+ %   Example:
+-%      [damage,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'backstress',10e3);
++%      [damage,B,backstress]=analyticaldamage(md,'eq','Weertman2D','smoothing',2,'sigmab',10e3,'coordsys','longitudinal');
+ 
+ % check inputs
+ if (nargin<1),
+@@ -52,63 +59,13 @@
+ eq = getfieldvalue(options,'eq','Thomas');
+ smoothing = getfieldvalue(options,'smoothing',0);
+ sigmab = getfieldvalue(options,'sigmab',0);
++coordsys = getfieldvalue(options,'coordsys','longitudinal');
+ if length(sigmab)==1,
+ 	sigmab=sigmab*ones(md.mesh.numberofelements,1);
+ end
+ 
+-% average element strain rates onto vertices
+-e1=averaging(md,md.results.strainrate.principalvalue1,smoothing)/md.constants.yts; % convert to s^-1
+-e2=averaging(md,md.results.strainrate.principalvalue2,smoothing)/md.constants.yts;
+-exx=averaging(md,md.results.strainrate.xx,smoothing)/md.constants.yts;
+-eyy=averaging(md,md.results.strainrate.yy,smoothing)/md.constants.yts;
+-exy=averaging(md,md.results.strainrate.xy,smoothing)/md.constants.yts;
++[a,b,theta,ex]=thomasparams(md,'eq',eq,'smoothing',smoothing,'coordsys',coordsys);
+ 
+-% checks: any of e1 or e2 equal to zero?
+-pos=find(e1==0);
+-if any(pos==1)
+-	disp('WARNING: first principal strain rate equal to zero.  Value set to 1e-13 s^-1');
+-	e1(pos)=1e-13;
+-end
+-pos=find(e2==0);
+-if any(pos==1)
+-	disp('WARNING: second principal strain rate equal to zero.  Value set to 1e-13 s^-1');
+-	e2(pos)=1e-13;
+-end
+-
+-%% old method using principal strain rates {{{
+-%% ex=maximum principal tensile strain rate
+-%ex=e1;
+-%a=e2./e1;
+-%pos=find(e1<0 & e2>0); % longitudinal compression and lateral tension
+-%a(pos)=e1(pos)./e2(pos);
+-%ex(pos)=e2(pos);
+-%pos2=find(e1<0 & e2<0 & abs(e1)<abs(e2)); % lateral and longitudinal compression
+-%a(pos2)=e1(pos2)./e2(pos2);
+-%ex(pos2)=e2(pos2);
+-%pos3=find(e1>0 & e2>0 & abs(e1)<abs(e2)); % lateral and longitudinal tension 
+-%a(pos3)=e1(pos3)./e2(pos3);
+-%ex(pos3)=e2(pos3);
+-%id=find(e1<0 & e2<0);
+-%a(id)=-a(id); % where both strain rates are compressive, enforce negative alpha
+-%
+-%% }}}
+-
+-% new method using longitudinal strain rates defined by observed velocity vector
+-velangle=atan(md.initialization.vy./md.initialization.vx);
+-ex=0.5*(exx+eyy)+0.5*(exx-eyy).*cos(2*velangle)+exy.*sin(2*velangle);
+-ey=exx+eyy-ex; % trace of strain rate tensor is invariant
+-exy=-0.5*(exx-eyy).*sin(2*velangle)+exy.*cos(2*velangle);
+-a=ey./ex;
+-b=exy./ex;
+-pos=find(ex<0 & ey<0);
+-%length(pos)
+-a(pos)=-a(pos);
+-
+-% a < -1 in areas of strong lateral compression or longitudinal compression
+-% and theta is undefined at a = -2
+-pos=find(abs((abs(a)-2))<1e-3);
+-a(pos)=-2+1e-3;
+-
+ % spreading stress
+ rhoi=md.materials.rho_ice;
+ rhow=md.materials.rho_water;
+@@ -119,28 +76,15 @@
+ B=md.materials.rheology_B;
+ n=averaging(md,md.materials.rheology_n,0);
+ 
+-switch eq
+-	case 'Weertman1D'
+-		theta=1./8*ones(md.mesh.numberofvertices,1);
+-		a=zeros(md.mesh.numberofvertices,1);
+-	case 'Weertman2D'
+-		theta=1./9*ones(md.mesh.numberofvertices,1);
+-		a=ones(md.mesh.numberofvertices,1);
+-	case 'Thomas'
+-		theta=((1+a+a.^2+b.^2).^((n-1)/2))./(abs(2+a).^n);
+-	otherwise
+-		error('argument passed to "eq" not valid.  Type "help analyticaldamage" for usage');
+-end
+-
+ D=1-(1+a+a.^2+b.^2).^((n-1)./(2*n))./abs(ex).^(1./n).*(T-sigmab)./B./(2+a)./sign(ex);
+ 
+-backstress=zeros(md.mesh.numberofvertices,1);
+-
+ % D>1 where (2+a).*sign(ex)<0, compressive regions where high backstress needed
+ pos=find(D>1);
+ D(pos)=0;
+ 
+-% backstress to bring damage to zero
++backstress=zeros(md.mesh.numberofvertices,1);
++
++% backstress to bring D down to one 
+ backstress(pos)=T(pos)-(1-D(pos)).*B(pos).*sign(ex(pos)).*(2+a(pos)).*abs(ex(pos)).^(1./n(pos))./(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos));
+ 
+ pos=find(D<0);
+@@ -153,7 +97,9 @@
+ pos=find(backstress<0);
+ backstress(pos)=0;
+ 
+-% increased rigidity to bring negative damage to zero
+-B(pos)=sign(ex(pos))./(2+a(pos)).*(1+a(pos)+a(pos).^2).^((n(pos)-1)/2./n(pos)).*T(pos)./abs(ex(pos)).^(1./n(pos));
++% rigidity from Thomas relation for D=0 and backstress=0
++B=sign(ex)./(2+a).*(1+a+a.^2).^((n-1)/2./n).*T./(abs(ex).^(1./n));
++pos=find(B<0);
++B(pos)=md.materials.rheology_B(pos);
+ 
+ damage=D;
Index: issm/oecreview/Archive/16133-16554/ISSM-16416-16417.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16416-16417.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16416-16417.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16416)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16417)
+@@ -193,6 +193,9 @@
+ 			doubletype*   this_row_values     = NULL;
+ 			int           row;
+ 
++			/*Early exit: */
++			if(this->M*this->N==0)return; //no need to assemble.
++
+ 			/*some communicator info: */
+ 			num_procs=IssmComm::GetSize();
+ 			ISSM_MPI_Comm comm=IssmComm::GetComm();
Index: issm/oecreview/Archive/16133-16554/ISSM-16417-16418.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16417-16418.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16417-16418.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16417)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 16418)
+@@ -252,7 +252,7 @@
+ 		else
+ 			linewidthi=linewidth{i};
+ 		end
+-		expdisp(filenamei,gcf,stylei,getfieldvalue(options,'linewidth',1),getfieldvalue(options,'unit',1));
++		expdisp(filenamei,gcf,stylei,linewidthi,getfieldvalue(options,'unit',1));
+ 	end
+ end
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16418-16419.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16418-16419.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16418-16419.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16418)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16419)
+@@ -123,7 +123,7 @@
+ 		~IssmMpiSparseMat(){
+ 			int i;
+ 
+-			if(m){
++			if(m*N){
+ 				for(i=0;i<m;i++){
+ 					SparseRow<doubletype>* sparserow=this->matrix[i];
+ 					delete sparserow; this->matrix[i]=NULL;
Index: issm/oecreview/Archive/16133-16554/ISSM-16419-16420.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16419-16420.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16419-16420.diff	(revision 16556)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16419)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 16420)
+@@ -60,15 +60,3 @@
+ %Change name so that no tests have the same name
+ A=dbstack;
+ if (length(A)>2), md.miscellaneous.name=A(3).file(1:end-2); end
+-
+-%output
+-md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+-md.outputdefinition.definitions={...
+-	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
+-	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
+-	massfluxatgate('MassFlux3',['../Exp/MassFlux3.exp']),...
+-	massfluxatgate('MassFlux4',['../Exp/MassFlux4.exp']),...
+-	massfluxatgate('MassFlux5',['../Exp/MassFlux5.exp']),...
+-	massfluxatgate('MassFlux6',['../Exp/MassFlux6.exp'])...
+-	};
+-
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16419)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16420)
+@@ -4,6 +4,18 @@
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',2);
+ md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++
++%output
++md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++md.outputdefinition.definitions={...
++	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
++	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
++	massfluxatgate('MassFlux3',['../Exp/MassFlux3.exp']),...
++	massfluxatgate('MassFlux4',['../Exp/MassFlux4.exp']),...
++	massfluxatgate('MassFlux5',['../Exp/MassFlux5.exp']),...
++	massfluxatgate('MassFlux6',['../Exp/MassFlux6.exp'])...
++	};
++
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
Index: issm/oecreview/Archive/16133-16554/ISSM-16420-16421.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16420-16421.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16420-16421.diff	(revision 16556)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16420)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16421)
+@@ -4402,8 +4402,6 @@
+ 
+ 	/*Initialize values*/
+ 	IssmDouble* values   = xNew<IssmDouble>(vnumdof+pnumdof);
+-	IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
+-	IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
+ 	IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
+@@ -4424,26 +4422,22 @@
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&values[0],nodes,vnumnodes+pnumdof,cs_list);
+ 
+-	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<vnumdof;i++) vvalues[i]=values[i];
+-	for(i=0;i<pnumdof;i++) pvalues[i]=values[vnumdof+i];
+-
+ 	/*Ok, we have vx and vy in values, fill in all arrays: */
+ 	for(i=0;i<vnumnodes;i++){
+-		vx[i] = vvalues[i*NDOF2+0];
+-		vy[i] = vvalues[i*NDOF2+1];
++		vx[i] = values[i*NDOF2+0];
++		vy[i] = values[i*NDOF2+1];
+ 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+ 	}
+ 	for(i=0;i<pnumnodes;i++){
+-		pressure[i] = pvalues[i];
++		pressure[i] = values[vnumdof+i];
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+ 	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+-	for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
+-	for(i=0;i<vnumnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
++	for(i=0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning;
++	for(i=0;i<vnumnodes;i++) vel[i]      = sqrt(vx[i]*vx[i] + vy[i]*vy[i]);
+ 
+ 	/*Now, we have to move the previous inputs  to old 
+ 	 * status, otherwise, we'll wipe them off: */
+@@ -4463,8 +4457,6 @@
+ 	xDelete<IssmDouble>(vy);
+ 	xDelete<IssmDouble>(vx);
+ 	xDelete<IssmDouble>(values);
+-	xDelete<IssmDouble>(vvalues);
+-	xDelete<IssmDouble>(pvalues);
+ 	xDelete<int>(vdoflist);
+ 	xDelete<int>(pdoflist);
+ 	xDelete<int>(cs_list);
Index: issm/oecreview/Archive/16133-16554/ISSM-16421-16422.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16421-16422.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16421-16422.diff	(revision 16556)
@@ -0,0 +1,88 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16421)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16422)
+@@ -4416,6 +4416,7 @@
+ 	GetDofListVelocity(&vdoflist,GsetEnum);
+ 	GetDofListPressure(&pdoflist,GsetEnum);
+ 
++	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<vnumdof;i++) values[i]        =solution[vdoflist[i]];
+ 	for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]];
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16421)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16422)
+@@ -10692,43 +10692,47 @@
+ 	int pnumdof   = pnumnodes*NDOF1;
+ 
+ 	/*Initialize values*/
+-	IssmDouble* vvalues  = xNew<IssmDouble>(vnumdof);
+-	IssmDouble* pvalues  = xNew<IssmDouble>(pnumdof);
++	IssmDouble* values   = xNew<IssmDouble>(vnumdof+pnumdof);
+ 	IssmDouble* vx       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vy       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vz       = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* vel      = xNew<IssmDouble>(vnumnodes);
+ 	IssmDouble* pressure = xNew<IssmDouble>(pnumnodes);
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
++
+ 	/*Get dof list: */
+ 	GetDofListVelocity(&vdoflist,GsetEnum);
+ 	GetDofListPressure(&pdoflist,GsetEnum);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<vnumdof;i++) vvalues[i]=solution[vdoflist[i]];
+-	for(i=0;i<pnumdof;i++) pvalues[i]=solution[pdoflist[i]];
++	for(i=0;i<vnumdof;i++) values[i]        =solution[vdoflist[i]];
++	for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+-	TransformSolutionCoord(&vvalues[0],nodes,vnumnodes,XYZEnum);
++	TransformSolutionCoord(&values[0],nodes,vnumnodes+pnumdof,cs_list);
+ 
+ 	/*Ok, we have vx and vy in values, fill in all arrays: */
+ 	for(i=0;i<vnumnodes;i++){
+-		vx[i] = vvalues[i*NDOF3+0];
+-		vy[i] = vvalues[i*NDOF3+1];
+-		vz[i] = vvalues[i*NDOF3+2];
++		vx[i] = values[i*NDOF3+0];
++		vy[i] = values[i*NDOF3+1];
++		vz[i] = values[i*NDOF3+2];
+ 		if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector");
+ 	}
+ 	for(i=0;i<pnumnodes;i++){
+-		pressure[i] = pvalues[i];
++		pressure[i] = values[vnumdof+i];
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+ 	/*Recondition pressure and compute vel: */
+ 	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+-	for(i=0;i<pnumnodes;i++) pressure[i]=pressure[i]*FSreconditioning;
+-	for(i=0;i<vnumnodes;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
++	for(i = 0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning;
++	for(i = 0;i<vnumnodes;i++) vel[i]      = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 
+ 	/*Now, we have to move the previous inputs  to old 
+ 	 * status, otherwise, we'll wipe them off: */
+@@ -10750,10 +10754,10 @@
+ 	xDelete<IssmDouble>(vz);
+ 	xDelete<IssmDouble>(vy);
+ 	xDelete<IssmDouble>(vx);
+-	xDelete<IssmDouble>(vvalues);
+-	xDelete<IssmDouble>(pvalues);
++	xDelete<IssmDouble>(values);
+ 	xDelete<int>(vdoflist);
+ 	xDelete<int>(pdoflist);
++	xDelete<int>(cs_list);
+ }
+ /*}}}*/
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16422-16423.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16422-16423.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16422-16423.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.m	(revision 16422)
++++ ../trunk-jpl/src/m/solve/WriteData.m	(revision 16423)
+@@ -199,6 +199,10 @@
+ 
+ 	%first get length of string array: 
+ 	num=numel(data);
++	if isnumeric(data) & num==1 & isnan(data),
++		num = 0;
++	end
++
+ 	%now get length of record: 
+ 	recordlength=4+4; %for length of array + code
+ 	for i=1:num,
Index: issm/oecreview/Archive/16133-16554/ISSM-16423-16424.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16423-16424.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16423-16424.diff	(revision 16556)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16423)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16424)
+@@ -191,6 +191,7 @@
+ 			int*          this_row_cols       = NULL;
+ 			int*          this_row_mods       = NULL;
+ 			doubletype*   this_row_values     = NULL;
++			int*          numvalues_perrow    = NULL;
+ 			int           row;
+ 
+ 			/*Early exit: */
+@@ -273,20 +274,21 @@
+ 
+ 			/*Plug values into global matrix. To do so, we are going to first figure out how many overall values each sparse row is going to get, then we fill up these values, and give it to each sparse row: {{{*/
+ 			GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,comm);
++
++			/*Figure out how many values each row is going to get: */
++			numvalues_perrow=xNewZeroInit<int>(this->m);
++			for(i=0;i<num_procs;i++){ 
++				int  numvalues=numvalues_fromcpu[i];
++				int* rows=row_indices_fromcpu[i];
++				for(j=0;j<numvalues;j++)numvalues_perrow[rows[j]-lower_row]++;
++			}
++
+ 			
+ 			/*Deal with sparse row one at a time: */
+ 			for(row=0;row<this->m;row++){
+ 
+-				/*figure out how many values this row is going to get: */
+-				count=0;
+-				for(i=0;i<num_procs;i++){ 
+-					int  numvalues=numvalues_fromcpu[i];
+-					int* rows=row_indices_fromcpu[i];
+-					for(j=0;j<numvalues;j++)if((rows[j]-lower_row)==row)count++;
+-				}
+-
+ 				/*Allocate: */
+-				this_row_numvalues=count;
++				this_row_numvalues=numvalues_perrow[row];
+ 				this_row_cols=xNew<int>(this_row_numvalues);
+ 				this_row_values=xNew<doubletype>(this_row_numvalues);
+ 				this_row_mods=xNew<int>(this_row_numvalues);
+@@ -322,6 +324,7 @@
+ 			/*}}}*/
+ 
+ 			/*Free ressources:{{{*/
++			xDelete<int>(numvalues_perrow);
+ 			xDelete<int>(RowRank);
+ 			xDelete<int>(row_indices_forcpu);
+ 			xDelete<int>(col_indices_forcpu);
Index: issm/oecreview/Archive/16133-16554/ISSM-16424-16425.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16424-16425.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16424-16425.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive322.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive308.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16425-16426.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16425-16426.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16425-16426.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/test/Archives/Archive510.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive322.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive507.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive308.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive404.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive422.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive503.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16426-16427.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16426-16427.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16426-16427.diff	(revision 16556)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16426)
++++ ../trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp	(revision 16427)
+@@ -61,6 +61,13 @@
+ 		value = 0.;
+ 		#endif
+ 	}
++	else if(strcmp(name,"_HAVE_TAO_")==0){
++		#ifdef _HAVE_TAO_
++		value = 1.;
++		#else
++		value = 0.;
++		#endif
++	}
+ 	else if(strcmp(name,"_HAVE_PETSC_")==0){
+ 		#ifdef _HAVE_PETSC_
+ 		value = 1.;
Index: issm/oecreview/Archive/16133-16554/ISSM-16427-16428.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16427-16428.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16427-16428.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/classes/taoinversion.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16427)
++++ ../trunk-jpl/src/m/classes/taoinversion.m	(revision 16428)
+@@ -67,6 +67,10 @@
+ 			%Early return
+ 			if ~obj.iscontrol, return; end
+ 
++			if ~IssmConfig('_HAVE_TAO_'),
++				md = checkmessage(md,['TAO has not been installed, ISSM needs to be reconfigured and recompiled with TAO']);
++			end
++
+ 			num_controls=numel(md.inversion.control_parameters);
+ 			num_costfunc=size(md.inversion.cost_functions,2);
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16428-16429.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16428-16429.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16428-16429.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16428)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16429)
+@@ -2152,6 +2152,8 @@
+ 
+ 	_assert_(sum==0. || sum==1. || sum==2.);
+ 
++	if(sum==3.)  _error_("Two edges on bed not supported yet...");
++
+ 	if(sum>1.){
+ 		return true;
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16429-16430.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16429-16430.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16429-16430.diff	(revision 16556)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16429)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16430)
+@@ -193,6 +193,12 @@
+ 			doubletype*   this_row_values     = NULL;
+ 			int*          numvalues_perrow    = NULL;
+ 			int           row;
++			
++			doubletype**  values_perrow       = NULL;
++			int**         cols_perrow         = NULL;
++			int**         mods_perrow         = NULL;
++			int*          counters_perrow     = NULL;
++			int           counter;
+ 
+ 			/*Early exit: */
+ 			if(this->M*this->N==0)return; //no need to assemble.
+@@ -283,44 +289,40 @@
+ 				for(j=0;j<numvalues;j++)numvalues_perrow[rows[j]-lower_row]++;
+ 			}
+ 
+-			
+-			/*Deal with sparse row one at a time: */
+-			for(row=0;row<this->m;row++){
++			/*Allocate all the values, cols and mods from each cpu: */
++			values_perrow=xNew<doubletype*>(this->m);
++			cols_perrow=xNew<int*>(this->m);
++			mods_perrow=xNew<int*>(this->m);
++			counters_perrow=xNewZeroInit<int>(this->m);
+ 
+-				/*Allocate: */
+-				this_row_numvalues=numvalues_perrow[row];
+-				this_row_cols=xNew<int>(this_row_numvalues);
+-				this_row_values=xNew<doubletype>(this_row_numvalues);
+-				this_row_mods=xNew<int>(this_row_numvalues);
++			for(i=0;i<this->m;i++){
++				values_perrow[i]=xNewZeroInit<doubletype>(numvalues_perrow[i]);
++				cols_perrow[i]=xNewZeroInit<int>(numvalues_perrow[i]);
++				mods_perrow[i]=xNewZeroInit<int>(numvalues_perrow[i]);
++			}
+ 
+-				/*Collect: */
+-				count=0;
+-				for(i=0;i<num_procs;i++){
+-					int  numvalues=numvalues_fromcpu[i];
+-					int* rows=row_indices_fromcpu[i];
+-					int* cols=col_indices_fromcpu[i];
+-					doubletype* values=values_fromcpu[i];
+-					int* mods=modes_fromcpu[i];
++			/*collect:*/
++			for(i=0;i<num_procs;i++){
++				int  numvalues=numvalues_fromcpu[i];
++				int* rows=row_indices_fromcpu[i];
++				int* cols=col_indices_fromcpu[i];
++				doubletype* values=values_fromcpu[i];
++				int* mods=modes_fromcpu[i];
+ 
+-					for(j=0;j<numvalues;j++){
+-						if((rows[j]-lower_row)==row){
+-							this_row_cols[count]=cols[j];
+-							this_row_values[count]=values[j];
+-							this_row_mods[count]=mods[j];
+-							count++;
+-						}
+-					}
++				for(j=0;j<numvalues;j++){
++					row=rows[j]-lower_row;
++					counter=counters_perrow[row];
++					values_perrow[row][counter]=values[j];
++					cols_perrow[row][counter]=cols[j];
++					mods_perrow[row][counter]=mods[j];
++					counter=counters_perrow[row]++;
+ 				}
+-				if(count!=this_row_numvalues)_error_("counter error during assembly of values!");
+-
+-				/*Now fill in the sparse row: */
+-				this->matrix[row]->SetValues(this_row_numvalues,this_row_cols,this_row_values,this_row_mods);
+-
+-				/*Free ressources: */
+-				xDelete<int>(this_row_cols);
+-				xDelete<doubletype>(this_row_values);
+-				xDelete<int>(this_row_mods);
+ 			}
++					
++			/*Plug into matrix: */
++			for(i=0;i<this->m;i++){
++				this->matrix[i]->SetValues(numvalues_perrow[i],cols_perrow[i],values_perrow[i],mods_perrow[i]);
++			}
+ 			/*}}}*/
+ 
+ 			/*Free ressources:{{{*/
+@@ -357,6 +359,16 @@
+ 
+ 			xDelete<int>(sendcnts);
+ 			xDelete<int>(displs);
++			
++			for(i=0;i<this->m;i++){
++				doubletype* values=values_perrow[i]; xDelete<doubletype>(values);
++				int* cols=cols_perrow[i]; xDelete<int>(cols);
++				int* mods=mods_perrow[i]; xDelete<int>(mods);
++			}
++			xDelete<int>(counters_perrow);
++			xDelete<doubletype*>(values_perrow);
++			xDelete<int*>(cols_perrow);
++			xDelete<int*>(mods_perrow);
+ 			/*}}}*/
+ 
+ 		}
Index: issm/oecreview/Archive/16133-16554/ISSM-16430-16431.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16430-16431.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16430-16431.diff	(revision 16556)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/m/classes/initialization.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.m	(revision 16430)
++++ ../trunk-jpl/src/m/classes/initialization.m	(revision 16431)
+@@ -50,7 +50,9 @@
+ 			if ismember(ThermalAnalysisEnum(),analyses),
+ 				md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 				md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
+-				md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices 1]);
++				if strcmp(meshtype(md.mesh),'3D')
++					md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices 1]);
++				end
+ 				md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 			end
+ 			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum(),
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 16430)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 16431)
+@@ -64,7 +64,8 @@
+ 		if ThermalAnalysisEnum() in analyses:
+ 			md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
+-			md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
++			if strcmp(md.mesh.meshtype(),'3D'):
++				md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices])
+ 		if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum():
+ 			md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
Index: issm/oecreview/Archive/16133-16554/ISSM-16431-16432.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16431-16432.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16431-16432.diff	(revision 16556)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16432)
+@@ -18,7 +18,7 @@
+ 	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+ 		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16432)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16432)
+@@ -32,7 +32,9 @@
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,VzEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16432)
+@@ -30,7 +30,9 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,VzEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16432-16433.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16432-16433.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16432-16433.diff	(revision 16556)
@@ -0,0 +1,248 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16432)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16433)
+@@ -2455,7 +2455,6 @@
+ 	GaussTria* gauss = new GaussTria();
+ 	for(int i=0;i<numindices;i++){//FIXME
+ 
+-
+ 		gauss->GaussNode(this->VelocityInterpolation(),indices[i]);
+ 		slope_input->GetInputValue(&slope,gauss);
+ 		IssmDouble theta = atan(slope);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16432)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16433)
+@@ -10159,16 +10159,15 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSSAFS {{{*/
+ void  Penta::InputUpdateFromSolutionStressbalanceSSAFS(IssmDouble* solution){
+ 
+-	const int    numdofm=NDOF2*NUMVERTICES;
+-	const int    numdofs=NDOF3*NUMVERTICES;
+-	const int    numdof2d=NDOF2*NUMVERTICES2D;
+-	const int    numdofpressure=NDOF1*NUMVERTICES;
++	const int    numdofSSA = NDOF2*NUMVERTICES;
++	const int    numdof2d  = NDOF2*NUMVERTICES2D;
++	const int    numdofFSv = NDOF3*NUMVERTICES;
++	const int    numdofFSp = NDOF1*NUMVERTICES;
+ 
+ 	int     i;
+ 	IssmDouble  FSreconditioning;
+-	IssmDouble  SSA_values[numdofm];
+-	IssmDouble  FS_values[numdofs];
+-	IssmDouble  Pressure_values[numdofs];
++	IssmDouble  SSA_values[numdofSSA];
++	IssmDouble  FS_values[numdofFSv+numdofFSp];
+ 	IssmDouble  vx[NUMVERTICES];
+ 	IssmDouble  vy[NUMVERTICES];
+ 	IssmDouble  vz[NUMVERTICES];
+@@ -10177,19 +10176,24 @@
+ 	IssmDouble  vel[NUMVERTICES];
+ 	IssmDouble  pressure[NUMVERTICES];
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+-	int*    doflistm        = NULL;
+-	int*    doflists        = NULL;
+-	int*    doflistpressure = NULL;
+-	Penta   *penta          = NULL;
++	int   *doflistSSA = NULL;
++	int   *doflistFSv = NULL;
++	int   *doflistFSp = NULL;
++	Penta *penta      = NULL;
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(2*NUMVERTICES);
++	for(i=0;i<NUMVERTICES;i++) cs_list[i]             = XYZEnum;
++	for(i=0;i<NUMVERTICES;i++) cs_list[NUMVERTICES+i] = PressureEnum;
++
+ 	/*OK, we have to add results of this element for SSA 
+ 	 * and results from the penta at base for SSA. Now recover results*/
+ 	penta=GetBasalElement();
+ 
+ 	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
+-	penta->GetDofList(&doflistm,SSAApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+-	GetDofListPressure(&doflistpressure,GsetEnum);
++	penta->GetDofList(&doflistSSA,SSAApproximationEnum,GsetEnum);
++	GetDofList(&doflistFSv,FSvelocityEnum,GsetEnum);
++	GetDofListPressure(&doflistFSp,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+@@ -10197,27 +10201,27 @@
+ 
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof2d;i++){
+-		SSA_values[i]=solution[doflistm[i]];
+-		SSA_values[i+numdof2d]=solution[doflistm[i]];
++		SSA_values[i]=solution[doflistSSA[i]];
++		SSA_values[i+numdof2d]=solution[doflistSSA[i]];
+ 	}
+-	for(i=0;i<numdofs;i++)FS_values[i]=solution[doflists[i]];
+-	for(i=0;i<numdofpressure;i++) Pressure_values[i]=solution[doflistpressure[i]];
++	for(i=0;i<numdofFSv;i++) FS_values[i]=solution[doflistFSv[i]];
++	for(i=0;i<numdofFSp;i++) FS_values[numdofFSv+i]=solution[doflistFSp[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,2*NUMVERTICES,cs_list);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=FS_values[i*NDOF3+0]+SSA_values[i*NDOF2+0];
+-		vy[i]=FS_values[i*NDOF3+1]+SSA_values[i*NDOF2+1];
+-		vzFS[i]=FS_values[i*NDOF3+2];
+-		pressure[i]=Pressure_values[i*NDOF1]*FSreconditioning;
++		vx[i]       = FS_values[i*NDOF3+0]+SSA_values[i*NDOF2+0];
++		vy[i]       = FS_values[i*NDOF3+1]+SSA_values[i*NDOF2+1];
++		vzFS[i]     = FS_values[i*NDOF3+2];
++		pressure[i] = FS_values[NUMVERTICES*NDOF3+i]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vzFS[i]))     _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+@@ -10235,8 +10239,8 @@
+ 
+ 	/*Now Compute vel*/
+ 	for(i=0;i<NUMVERTICES;i++) {
+-		vz[i]=vzSSA[i]+vzFS[i];
+-		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
++		vz[i]  = vzSSA[i]+vzFS[i];
++		vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 	}
+ 
+ 	/*Now, we have to move the previous Vx and Vy inputs  to old 
+@@ -10255,9 +10259,10 @@
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+-	xDelete<int>(doflistm);
+-	xDelete<int>(doflists);
+-	xDelete<int>(doflistpressure);
++	xDelete<int>(doflistSSA);
++	xDelete<int>(doflistFSv);
++	xDelete<int>(doflistFSp);
++	xDelete<int>(cs_list);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionStressbalanceL1L2 {{{*/
+@@ -10417,14 +10422,13 @@
+ /*FUNCTION Penta::InputUpdateFromSolutionStressbalanceHOFS {{{*/
+ void  Penta::InputUpdateFromSolutionStressbalanceHOFS(IssmDouble* solution){
+ 
+-	const int    numdofp=NDOF2*NUMVERTICES;
+-	const int    numdofs=NDOF3*NUMVERTICES;
+-	const int    numdofpressure=NDOF1*NUMVERTICES;
++	const int    numdofHO  = NDOF2*NUMVERTICES;
++	const int    numdofFSv = NDOF3*NUMVERTICES;
++	const int    numdofFSp = NDOF1*NUMVERTICES;
+ 
+ 	int        i;
+-	IssmDouble HO_values[numdofp];
+-	IssmDouble FS_values[numdofs];
+-	IssmDouble Pressure_values[numdofpressure];
++	IssmDouble HO_values[numdofHO];
++	IssmDouble FS_values[numdofFSv+numdofFSp];
+ 	IssmDouble vx[NUMVERTICES];
+ 	IssmDouble vy[NUMVERTICES];
+ 	IssmDouble vz[NUMVERTICES];
+@@ -10434,39 +10438,44 @@
+ 	IssmDouble pressure[NUMVERTICES];
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble FSreconditioning;
+-	int*       doflistp        = NULL;
+-	int*       doflists        = NULL;
+-	int*       doflistpressure = NULL;
++	int*       doflistHO        = NULL;
++	int*       doflistFSv        = NULL;
++	int*       doflistFSp = NULL;
+ 
++	/*Prepare coordinate system list*/
++	int* cs_list = xNew<int>(2*NUMVERTICES);
++	for(i=0;i<NUMVERTICES;i++) cs_list[i]             = XYZEnum;
++	for(i=0;i<NUMVERTICES;i++) cs_list[NUMVERTICES+i] = PressureEnum;
++
+ 	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+-	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+-	GetDofList(&doflists,FSvelocityEnum,GsetEnum);
+-	GetDofListPressure(&doflistpressure,GsetEnum);
++	GetDofList(&doflistHO,HOApproximationEnum,GsetEnum);
++	GetDofList(&doflistFSv,FSvelocityEnum,GsetEnum);
++	GetDofListPressure(&doflistFSp,GsetEnum);
+ 	this->parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
+ 
+ 	/*Get node data: */
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 
+ 	/*Use the dof list to index into the solution vector: */
+-	for(i=0;i<numdofp;i++) HO_values[i]=solution[doflistp[i]];
+-	for(i=0;i<numdofs;i++) FS_values[i]=solution[doflists[i]];
+-	for(i=0;i<numdofpressure;i++) Pressure_values[i]=solution[doflistpressure[i]];
++	for(i=0;i<numdofHO;i++)  HO_values[i]=solution[doflistHO[i]];
++	for(i=0;i<numdofFSv;i++) FS_values[i]=solution[doflistFSv[i]];
++	for(i=0;i<numdofFSp;i++) FS_values[numdofFSv+i]=solution[doflistFSp[i]];
+ 
+ 	/*Transform solution in Cartesian Space*/
+ 	TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum);
+-	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZEnum);
++	TransformSolutionCoord(&FS_values[0],this->nodes,2*NUMVERTICES,cs_list);
+ 
+ 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
+ 	for(i=0;i<NUMVERTICES;i++){
+-		vx[i]=FS_values[i*NDOF3+0]+HO_values[i*NDOF2+0];
+-		vy[i]=FS_values[i*NDOF3+1]+HO_values[i*NDOF2+1];
+-		vzFS[i]=FS_values[i*NDOF3+2];
+-		pressure[i]=Pressure_values[i*NDOF1]*FSreconditioning;
++		vx[i]       = FS_values[i*NDOF3+0]+HO_values[i*NDOF2+0];
++		vy[i]       = FS_values[i*NDOF3+1]+HO_values[i*NDOF2+1];
++		vzFS[i]     = FS_values[i*NDOF3+2];
++		pressure[i] = FS_values[NUMVERTICES*NDOF3+i]*FSreconditioning;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
+-		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
++		if(xIsNan<IssmDouble>(vzFS[i]))     _error_("NaN found in solution vector");
+ 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
+ 	}
+ 
+@@ -10484,8 +10493,8 @@
+ 
+ 	/*Now Compute vel*/
+ 	for(i=0;i<NUMVERTICES;i++) {
+-		vz[i]=vzHO[i]+vzFS[i];
+-		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
++		vz[i]  = vzHO[i]+vzFS[i];
++		vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
+ 	}
+ 
+ 	/*Now, we have to move the previous Vx and Vy inputs  to old 
+@@ -10504,9 +10513,10 @@
+ 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
+ 
+ 	/*Free ressources:*/
+-	xDelete<int>(doflistp);
+-	xDelete<int>(doflists);
+-	xDelete<int>(doflistpressure);
++	xDelete<int>(doflistHO);
++	xDelete<int>(doflistFSv);
++	xDelete<int>(doflistFSp);
++	xDelete<int>(cs_list);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionStressbalanceSIA {{{*/
+@@ -10701,7 +10711,7 @@
+ 
+ 	/*Prepare coordinate system list*/
+ 	int* cs_list = xNew<int>(vnumnodes+pnumnodes);
+-	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYEnum;
++	for(i=0;i<vnumnodes;i++) cs_list[i]           = XYZEnum;
+ 	for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum;
+ 
+ 	/*Get dof list: */
Index: issm/oecreview/Archive/16133-16554/ISSM-16433-16434.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16433-16434.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16433-16434.diff	(revision 16556)
@@ -0,0 +1,842 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16434)
+@@ -29,7 +29,7 @@
+ 	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+ 	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+ 	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchDataToInput(elements,VzEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16434)
+@@ -207,6 +207,7 @@
+ 
+ 	/*retreive parameters: */
+ 	int analysis_type;
++	int meshtype;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Checks in debugging mode{{{*/
+@@ -245,7 +246,6 @@
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+-			int meshtype;
+ 			parameters->FindParam(&meshtype,MeshTypeEnum);
+ 			if(meshtype==Mesh2DverticalEnum){
+ 				return CreateBasalMassMatrix();
+@@ -258,6 +258,28 @@
+ 		case MasstransportAnalysisEnum:
+ 			return CreateKMatrixMasstransport();
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			switch(meshtype){
++				case Mesh2DverticalEnum:
++					return CreateKMatrixFreeSurfaceTop1D();
++				case Mesh3DEnum:
++					return CreateKMatrixFreeSurfaceTop();
++				default:
++					_error_("Mesh not supported yet");
++			}
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			switch(meshtype){
++				case Mesh2DverticalEnum:
++					return CreateKMatrixFreeSurfaceBase1D();
++				case Mesh3DEnum:
++					return CreateKMatrixFreeSurfaceBase();
++				default:
++					_error_("Mesh not supported yet");
++			}
++			break;
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -395,6 +417,7 @@
+ ElementVector* Tria::CreatePVector(void){
+ 
+ 	/*retrive parameters: */
++	int meshtype;
+ 	int analysis_type;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+@@ -435,7 +458,6 @@
+ 			break;
+ 		#endif
+ 		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+-			int meshtype;
+ 			parameters->FindParam(&meshtype,MeshTypeEnum);
+ 			if(meshtype==Mesh2DverticalEnum){
+ 				return CreateBasalPVectorSlope();
+@@ -448,6 +470,28 @@
+ 		case MasstransportAnalysisEnum:
+ 			return CreatePVectorMasstransport();
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			switch(meshtype){
++				case Mesh2DverticalEnum:
++					return CreatePVectorFreeSurfaceTop1D();
++				case Mesh3DEnum:
++					return CreatePVectorFreeSurfaceTop();
++				default:
++					_error_("Mesh not supported yet");
++			}
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			parameters->FindParam(&meshtype,MeshTypeEnum);
++			switch(meshtype){
++				case Mesh2DverticalEnum:
++					return CreatePVectorFreeSurfaceBase1D();
++				case Mesh3DEnum:
++					return CreatePVectorFreeSurfaceBase();
++				default:
++					_error_("Mesh not supported yet");
++			}
++			break;
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -832,7 +876,6 @@
+ /*FUNCTION Tria::GetArea {{{*/
+ IssmDouble Tria::GetArea(void){
+ 
+-	IssmDouble area=0;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble x1,y1,x2,y2,x3,y3;
+ 
+@@ -1821,6 +1864,12 @@
+ 		case MasstransportAnalysisEnum:
+ 			InputUpdateFromSolutionMasstransport(solution);
+ 			break;
++		case FreeSurfaceTopAnalysisEnum:
++			InputUpdateFromSolutionOneDof(solution,SurfaceEnum);
++			break;
++		case FreeSurfaceBaseAnalysisEnum:
++			InputUpdateFromSolutionOneDof(solution,BedEnum);
++			break;
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+ 	}
+@@ -2162,6 +2211,28 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Tria::HasEdgeOnSurface {{{*/
++bool Tria::HasEdgeOnSurface(){
++
++	IssmDouble values[NUMVERTICES];
++	IssmDouble sum;
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);
++	sum = values[0]+values[1]+values[2];
++
++	_assert_(sum==0. || sum==1. || sum==2.);
++
++	if(sum==3.)  _error_("Two edges on surface not supported yet...");
++
++	if(sum>1.){
++		return true;
++	}
++	else{
++		return false;
++	}
++}
++/*}}}*/
+ /*FUNCTION Tria::EdgeOnBedIndices{{{*/
+ void Tria::EdgeOnBedIndices(int* pindex1,int* pindex2){
+ 
+@@ -2183,6 +2254,27 @@
+ 	_error_("Could not find 2 vertices on bed");
+ }
+ /*}}}*/
++/*FUNCTION Tria::EdgeOnSurfaceIndices{{{*/
++void Tria::EdgeOnSurfaceIndices(int* pindex1,int* pindex2){
++
++	IssmDouble values[NUMVERTICES];
++	int        indices[3][2] = {{1,2},{2,0},{0,1}};
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);
++
++	for(int i=0;i<3;i++){
++		if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1.){
++			*pindex1 = indices[i][0];
++			*pindex2 = indices[i][1];
++			return;
++		}
++	}
++
++	_printf_("list of vertices on surface: "<<values[0]<<" "<<values[1]<<" "<<values[2]);
++	_error_("Could not find 2 vertices on surface");
++}
++/*}}}*/
+ /*FUNCTION Tria::EdgeOnBedIndex{{{*/
+ int Tria::EdgeOnBedIndex(void){
+ 
+@@ -2202,6 +2294,25 @@
+ 	_error_("Could not find 2 vertices on bed");
+ }
+ /*}}}*/
++/*FUNCTION Tria::EdgeOnSurfaceIndex{{{*/
++int Tria::EdgeOnSurfaceIndex(void){
++
++	IssmDouble values[NUMVERTICES];
++	int        indices[3][2] = {{1,2},{2,0},{0,1}};
++
++	/*Retrieve all inputs and parameters*/
++	GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);
++
++	for(int i=0;i<3;i++){
++		if(values[indices[i][0]] == 1. && values[indices[i][1]] == 1.){
++			return i;
++		}
++	}
++
++	_printf_("list of vertices on surface: "<<values[0]<<" "<<values[1]<<" "<<values[2]);
++	_error_("Could not find 2 vertices on surface");
++}
++/*}}}*/
+ /*FUNCTION Tria::IsFloating {{{*/
+ bool   Tria::IsFloating(){
+ 
+@@ -7449,6 +7560,22 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateKMatrixFreeSurfaceTop1D {{{*/
++ElementMatrix* Tria::CreateKMatrixFreeSurfaceTop1D(void){
++
++	if(!HasEdgeOnSurface()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnSurfaceIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementMatrix* Ke=seg->CreateKMatrixFreeSurfaceTop();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreateKMatrixFreeSurfaceBase {{{*/
+ ElementMatrix* Tria::CreateKMatrixFreeSurfaceBase(void){
+ 
+@@ -7546,6 +7673,22 @@
+ 	return Ke;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreateKMatrixFreeSurfaceBase1D {{{*/
++ElementMatrix* Tria::CreateKMatrixFreeSurfaceBase1D(void){
++
++	if(!HasEdgeOnBed()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnBedIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementMatrix* Ke=seg->CreateKMatrixFreeSurfaceBase();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorMasstransport{{{*/
+ ElementVector* Tria::CreatePVectorMasstransport(void){
+ 
+@@ -7698,6 +7841,22 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorFreeSurfaceTop1D {{{*/
++ElementVector* Tria::CreatePVectorFreeSurfaceTop1D(void){
++
++	if(!HasEdgeOnSurface()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnSurfaceIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementVector* pe=seg->CreatePVectorFreeSurfaceTop();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return pe;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreatePVectorFreeSurfaceBase {{{*/
+ ElementVector* Tria::CreatePVectorFreeSurfaceBase(void){
+ 
+@@ -7748,6 +7907,22 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Tria::CreatePVectorFreeSurfaceBase1D {{{*/
++ElementVector* Tria::CreatePVectorFreeSurfaceBase1D(void){
++
++	if(!HasEdgeOnBed()) return NULL;
++
++	int index1,index2;
++	this->EdgeOnBedIndices(&index1,&index2);
++
++	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
++	ElementVector* pe=seg->CreatePVectorFreeSurfaceBase();
++	delete seg->material; delete seg;
++
++	/*clean up and return*/
++	return pe;
++}
++/*}}}*/
+ #endif
+ 
+ #ifdef _HAVE_DAMAGE_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16434)
+@@ -85,8 +85,11 @@
+ 		int         Sid();
+ 		bool        IsOnBed();
+ 		bool        HasEdgeOnBed();
++		bool        HasEdgeOnSurface();
++		void        EdgeOnSurfaceIndices(int* pindex1,int* pindex);
+ 		void        EdgeOnBedIndices(int* pindex1,int* pindex);
+ 		int         EdgeOnBedIndex();
++		int         EdgeOnSurfaceIndex();
+ 		bool        IsFloating();
+ 		bool        IsNodeOnShelfFromFlags(IssmDouble* flags);
+ 		bool        NoIceInElement();
+@@ -190,7 +193,9 @@
+ 		ElementMatrix* CreateKMatrixMasstransport_CG(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_DG(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceTop1D(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceBase1D(void);
+ 		ElementMatrix* CreateMassMatrix(void);
+ 		ElementMatrix* CreateBasalMassMatrix(void);
+ 		ElementVector* CreatePVector(void);
+@@ -204,7 +209,9 @@
+ 		ElementVector* CreatePVectorMasstransport_CG(void);
+ 		ElementVector* CreatePVectorMasstransport_DG(void);
+ 		ElementVector* CreatePVectorFreeSurfaceTop(void);
++		ElementVector* CreatePVectorFreeSurfaceTop1D(void);
+ 		ElementVector* CreatePVectorFreeSurfaceBase(void);
++		ElementVector* CreatePVectorFreeSurfaceBase1D(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		ElementVector* CreateBasalPVectorSlope(void);
+ 		IssmDouble     GetArea(void);
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.cpp	(revision 16434)
+@@ -47,6 +47,33 @@
+ /*}}}*/
+ 
+ /*Reference Element numerics*/
++/*FUNCTION SegRef::GetBprimeMasstransport{{{*/
++void SegRef::GetBprimeMasstransport(IssmDouble* Bprime, IssmDouble* xyz_list, GaussSeg* gauss){
++	/*Compute B'  matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2. 
++	 * For node i, Bi' can be expressed in the actual coordinate system
++	 * by: 
++	 *       Bi_prime=[ dN/dx ]
++	 * where N is the finiteelement function for node i.
++	 *
++	 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)
++	 */
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
++	/*Build B': */
++	for(int i=0;i<numnodes;i++){
++		Bprime[i] = dbasis[i];
++	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
++}
++/*}}}*/
+ /*FUNCTION SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss){{{*/
+ void SegRef::GetNodalFunctions(IssmDouble* basis,GaussSeg* gauss){
+ 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16434)
+@@ -139,6 +139,176 @@
+ }
+ /*}}}*/
+ 
++/*FUNCTION Seg::GetSize{{{*/
++IssmDouble Seg::GetSize(void){
++
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble x1,y1,x2,y2;
++
++	/*Get xyz list: */
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	x1=xyz_list[0][0]; y1=xyz_list[0][1];
++	x2=xyz_list[1][0]; y2=xyz_list[1][1];
++
++	return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
++}
++/*}}}*/
++/*FUNCTION Seg::CreateKMatrixFreeSurfaceTop {{{*/
++ElementMatrix* Seg::CreateKMatrixFreeSurfaceTop(void){
++
++	/*Intermediaries */
++	int        stabilization;
++	IssmDouble Jdet,D_scalar,dt,h;
++	IssmDouble vx,vel;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(1*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(1*numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	h=this->GetSize();
++
++	/* Start  looping on the number of gaussian points: */
++	GaussSeg *gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vx_input->GetInputValue(&vx,gauss);
++
++		D_scalar=gauss->weight*Jdet;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D_scalar,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++
++		GetNodalFunctions(B,gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
++
++		D_scalar=dt*gauss->weight*Jdet*vx;
++		TripleMultiply(B,1,numnodes,1,
++					&D_scalar,1,1,0,
++					Bprime,1,numnodes,0,
++					&Ke->values[0],1);
++
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=fabs(vx)+1.e-8;
++			D_scalar=dt*gauss->weight*Jdet*h/(2.*vel)*vx;
++		}
++		else if(stabilization==1){
++			/*SSA*/
++			vx_input->GetInputAverage(&vx);
++			D_scalar=dt*gauss->weight*Jdet*h/2.*fabs(vx);
++		}
++		if(stabilization==1 || stabilization==2){
++			TripleMultiply(Bprime,1,numnodes,1,
++						&D_scalar,1,1,0,
++						Bprime,1,numnodes,0,
++						&Ke->values[0],1);
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Seg::CreateKMatrixFreeSurfaceBase {{{*/
++ElementMatrix* Seg::CreateKMatrixFreeSurfaceBase(void){
++
++	/*Intermediaries */
++	int        stabilization;
++	IssmDouble Jdet,D_scalar,dt,h;
++	IssmDouble vx,vel;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element matrix and vectors*/
++	ElementMatrix* Ke     = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum);
++	IssmDouble*    basis  = xNew<IssmDouble>(numnodes);
++	IssmDouble*    B      = xNew<IssmDouble>(1*numnodes);
++	IssmDouble*    Bprime = xNew<IssmDouble>(1*numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	this->parameters->FindParam(&stabilization,MasstransportStabilizationEnum);
++	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
++	h=this->GetSize();
++
++	/* Start  looping on the number of gaussian points: */
++	GaussSeg *gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vx_input->GetInputValue(&vx,gauss);
++
++		D_scalar=gauss->weight*Jdet;
++
++		TripleMultiply(basis,1,numnodes,1,
++					&D_scalar,1,1,0,
++					basis,1,numnodes,0,
++					&Ke->values[0],1);
++
++		GetNodalFunctions(B,gauss);
++		GetBprimeMasstransport(Bprime,&xyz_list[0][0],gauss);
++
++		D_scalar=dt*gauss->weight*Jdet*vx;
++		TripleMultiply(B,1,numnodes,1,
++					&D_scalar,1,1,0,
++					Bprime,1,numnodes,0,
++					&Ke->values[0],1);
++
++		if(stabilization==2){
++			/*Streamline upwinding*/
++			vel=fabs(vx)+1.e-8;
++			D_scalar=dt*gauss->weight*Jdet*h/(2.*vel)*vx;
++		}
++		else if(stabilization==1){
++			/*SSA*/
++			vx_input->GetInputAverage(&vx);
++			D_scalar=dt*gauss->weight*Jdet*h/2.*fabs(vx);
++		}
++		if(stabilization==1 || stabilization==2){
++			TripleMultiply(Bprime,1,numnodes,1,
++						&D_scalar,1,1,0,
++						Bprime,1,numnodes,0,
++						&Ke->values[0],1);
++		}
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	xDelete<IssmDouble>(B);
++	xDelete<IssmDouble>(Bprime);
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Seg::CreateMassMatrix {{{*/
+ ElementMatrix* Seg::CreateMassMatrix(void){
+ 
+@@ -228,3 +398,98 @@
+ 	return pe;
+ }
+ /*}}}*/
++/*FUNCTION Seg::CreatePVectorFreeSurfaceTop {{{*/
++ElementVector* Seg::CreatePVectorFreeSurfaceTop(void){
++
++	/*Intermediaries */
++	IssmDouble Jdet,dt;
++	IssmDouble ms,surface,vy;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	Input* vy_input     = inputs->GetInput(VyEnum);                         _assert_(vy_input);
++	Input* ms_input     = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input);
++	Input* surface_input= inputs->GetInput(SurfaceEnum);                    _assert_(surface_input);
++
++	/*Initialize mb_correction to 0, do not forget!:*/
++	/* Start  looping on the number of gaussian points: */
++	GaussSeg* gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vy_input->GetInputValue(&vy,gauss);
++		ms_input->GetInputValue(&ms,gauss);
++		surface_input->GetInputValue(&surface,gauss);
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(surface + dt*ms + dt*vy)*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
++/*FUNCTION Seg::CreatePVectorFreeSurfaceBase {{{*/
++ElementVector* Seg::CreatePVectorFreeSurfaceBase(void){
++
++	/*Intermediaries */
++	IssmDouble Jdet,dt;
++	IssmDouble mb,mb_correction,bed,vy;
++	IssmDouble xyz_list[NUMVERTICES][3];
++
++	/*Fetch number of nodes and dof for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Initialize Element vector and other vectors*/
++	ElementVector* pe    = new ElementVector(nodes,numnodes,this->parameters);
++	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	Input* vy_input            = inputs->GetInput(VyEnum);                         _assert_(vy_input);
++	Input* mb_input            = inputs->GetInput(BasalforcingsMeltingRateEnum);   _assert_(mb_input);
++	Input* mb_correction_input = inputs->GetInput(BasalforcingsMeltingRateCorrectionEnum);
++	Input* bed_input           = inputs->GetInput(BedEnum);                        _assert_(bed_input);
++
++	/*Initialize mb_correction to 0, do not forget!:*/
++	/* Start  looping on the number of gaussian points: */
++	GaussSeg* gauss=new GaussSeg(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetNodalFunctions(basis,gauss);
++
++		vy_input->GetInputValue(&vy,gauss);
++		mb_input->GetInputValue(&mb,gauss);
++		bed_input->GetInputValue(&bed,gauss);
++		if(mb_correction_input)
++		 mb_correction_input->GetInputValue(&mb_correction,gauss);
++		else
++		 mb_correction=0.;
++
++		for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(bed+dt*(mb-mb_correction) + dt*vy)*basis[i];
++	}
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(basis);
++	delete gauss;
++	return pe;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/SegRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/SegRef.h	(revision 16434)
+@@ -21,6 +21,7 @@
+ 
+ 		/*Management*/
+ 		void SetElementType(int type,int type_counter);
++		void GetBprimeMasstransport(IssmDouble* Bprime, IssmDouble* xyz_list, GaussSeg* gauss);
+ 		void GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussSeg* gauss);
+ 		void GetJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussSeg* gauss);
+ 		void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussSeg* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16434)
+@@ -191,5 +191,10 @@
+ 		/*}}}*/
+ 		/*Seg specific routines:*/
+ 		ElementMatrix* CreateMassMatrix(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
++		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
++		ElementVector* CreatePVectorFreeSurfaceTop(void);
++		ElementVector* CreatePVectorFreeSurfaceBase(void);
++		IssmDouble     GetSize(void);
+ };
+ #endif  /* _SEG_H */
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 16434)
+@@ -84,6 +84,19 @@
+ /*}}}*/
+ 
+ /*Object functions*/
++/*FUNCTION SegInput::GetInputAverage{{{*/
++void SegInput::GetInputAverage(IssmDouble* pvalue){
++
++	int        numnodes  = this->NumberofNodes();
++	IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
++	IssmDouble value     = 0.;
++
++	for(int i=0;i<numnodes;i++) value+=values[i];
++	value = value/numnodesd;
++
++	*pvalue=value;
++}
++/*}}}*/
+ /*FUNCTION SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){{{*/
+ void SegInput::GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16434)
+@@ -45,6 +45,7 @@
+ 		void GetInputValue(bool* pvalue);
+ 		void GetInputValue(int* pvalue);
+ 		void GetInputValue(IssmDouble* pvalue);
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16434)
+@@ -56,7 +56,7 @@
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussSeg* gauss);
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+-		void GetInputAverage(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputAverage(IssmDouble* pvalue);
+ 		void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("not implemented yet");};
+ 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("not implemented yet");};
+ 		void GetVxStrainRate2d(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussTria* gauss){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16434)
+@@ -28,6 +28,7 @@
+ 		virtual void GetInputValue(bool* pvalue)=0;
+ 		virtual void GetInputValue(int* pvalue)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue)=0;
++		virtual void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss)=0;
+ 		virtual void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time)=0;
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16434)
+@@ -51,6 +51,7 @@
+ 		void GetInputValue(bool* pvalue);
+ 		void GetInputValue(int* pvalue);
+ 		void GetInputValue(IssmDouble* pvalue);
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16434)
+@@ -48,6 +48,7 @@
+ 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16434)
+@@ -96,7 +96,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION SegInput::SpawnSegInput{{{*/
++/*FUNCTION TriaInput::SpawnSegInput{{{*/
+ Input* TriaInput::SpawnSegInput(int index1,int index2){
+ 
+ 	/*output*/
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16434)
+@@ -46,6 +46,7 @@
+ 		void GetInputValue(bool* pvalue);
+ 		void GetInputValue(int* pvalue);
+ 		void GetInputValue(IssmDouble* pvalue);
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16434)
+@@ -46,6 +46,7 @@
+ 		void GetInputValue(bool* pvalue);
+ 		void GetInputValue(int* pvalue);
+ 		void GetInputValue(IssmDouble* pvalue);
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16434)
+@@ -46,6 +46,7 @@
+ 		void GetInputValue(bool* pvalue){_error_("not implemented yet");}
+ 		void GetInputValue(int* pvalue){_error_("not implemented yet");}
+ 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");}
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16434)
+@@ -45,6 +45,7 @@
+ 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16433)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16434)
+@@ -49,6 +49,7 @@
+ 		void GetInputValue(bool* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(int* pvalue){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue){_error_("not implemented yet");};
++		void GetInputValue(IssmDouble* pvalue,GaussSeg* gauss){_error_("not implemented yet");};
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void GetInputValue(IssmDouble* pvalue,GaussTria* gauss,IssmDouble time);
Index: issm/oecreview/Archive/16133-16554/ISSM-16434-16435.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16434-16435.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16434-16435.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16434)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16435)
+@@ -11,7 +11,7 @@
+ void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16434)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16435)
+@@ -103,7 +103,7 @@
+ 		}
+ 	}
+ 	if(analysis_type==FreeSurfaceTopAnalysisEnum){
+-		if(iomodel->meshtype==Mesh3DEnum){
++		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
+ 			if(!(reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index]))){
Index: issm/oecreview/Archive/16133-16554/ISSM-16435-16436.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16435-16436.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16435-16436.diff	(revision 16556)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16435)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16436)
+@@ -19,17 +19,8 @@
+ 
+ 	/*Get gauss points*/
+ 	this->numgauss = order;
+-	GaussLegendreLinear(&pcoords1,&pweights,order);
+-	
+-	this->coords1=xNew<IssmDouble>(numgauss);
+-	this->weights=xNew<IssmDouble>(numgauss);
++	GaussLegendreLinear(&coords1,&weights,order);
+ 
+-	/*cast : */
+-	for(int i=0;i<numgauss;i++){
+-		this->coords1[i]=pcoords1[i];
+-		this->weights[i]=pweights[i];
+-	}
+-
+ 	/*Initialize static fields as undefinite*/
+ 	weight=UNDEF;
+ 	coord1=UNDEF;
Index: issm/oecreview/Archive/16133-16554/ISSM-16436-16437.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16436-16437.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16436-16437.diff	(revision 16556)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/m/plot/radarpower.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/radarpower.m	(revision 16436)
++++ ../trunk-jpl/src/m/plot/radarpower.m	(revision 16437)
+@@ -24,6 +24,10 @@
+ xlim    = getfieldvalue(options,'xlim',[min(md.mesh.x) max(md.mesh.x)]);
+ ylim    = getfieldvalue(options,'ylim',[min(md.mesh.y) max(md.mesh.y)]);
+ posting = getfieldvalue(options,'posting',0); % 0 -> image posting default
++a = getfieldvalue(options,'overlay_adjust_a',0);
++b = getfieldvalue(options,'overlay_adjust_b',1);
++c = getfieldvalue(options,'overlay_adjust_c',0);
++d = getfieldvalue(options,'overlay_adjust_d',1);
+ 
+ %find gdal coordinates
+ x0=min(xlim); x1=max(xlim);
+@@ -84,6 +88,8 @@
+ 
+ 		%Read in temp.tif:
+ 		im=imread('temp.tif','TIFF');
++		%adjust contrast and brightness
++		im=imadjust(im,[a b],[c d]);
+ 		pixelskip=max(1,ceil(posting/((x1-x0)/(size(im,2)))));
+ 		md.radaroverlay.pwr=double(flipud(im(1:pixelskip:end,1:pixelskip:end)));
+ 		md.radaroverlay.x=(x0:(x1-x0)/(size(md.radaroverlay.pwr,2)-1):x1);
+@@ -113,6 +119,8 @@
+ 
+ 		%Read in temp.tif:
+ 		im=imread('temp.tif','TIFF');
++		%adjust contrast and brightness
++		im=imadjust(im,[a b],[c d]);
+ 		pixelskip=max(1,ceil(posting/((x1-x0)/(size(im,2)))));
+ 		md.radaroverlay.pwr=double(flipud(im(1:pixelskip:end,1:pixelskip:end)));
+ 		md.radaroverlay.x=(x0:(x1-x0)/(size(md.radaroverlay.pwr,2)-1):x1);
+@@ -143,6 +151,8 @@
+ 	%Read and crop file
+ 	disp('Warning: expecting coordinates in polar stereographic (Std Latitude: 70ºN Meridian: 45º)');
+ 	im=imread(overlay_image);
++	%adjust contrast and brightness
++	im=imadjust(im,[a b],[c d]);
+ 	im=im(toplefty:toplefty+sizey,topleftx:topleftx+sizex);
+ 	md.radaroverlay.pwr=double(flipud(im));
+ 	md.radaroverlay.x=(x0:(x1-x0)/(size(md.radaroverlay.pwr,2)-1):x1);
Index: issm/oecreview/Archive/16133-16554/ISSM-16437-16438.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16437-16438.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16437-16438.diff	(revision 16556)
@@ -0,0 +1,121 @@
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 16437)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 16438)
+@@ -23,6 +23,7 @@
+ 	Vector<IssmDouble> *df   = NULL;
+ 
+ 	bool oldalloc=false;
++	char* toolkittype=NULL;
+ 
+ 	/*retrieve parameters: */
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+@@ -36,6 +37,11 @@
+ 
+ 	numberofdofspernode=femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
++	/*if our matrices are coming from issm, we don't do dynamic allocation like Petsc 
++	 * does, and this routine is essentially useless. Force oldalloc in this case: */
++	toolkittype=ToolkitOptions::GetToolkitType();
++	if(strcmp(toolkittype,"issm")==0)oldalloc=true;
++
+ 	if(oldalloc){
+ 		if(pKff) Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+ 		if(pKfs) Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
+@@ -62,6 +68,9 @@
+ 		if(pdf) df =new Vector<IssmDouble>(flocalsize,fsize);
+ 		if(ppf) pf =new Vector<IssmDouble>(flocalsize,fsize);
+ 	}
++	
++	/*Free ressources: */
++	xDelete<char>(toolkittype);
+ 
+ 	/*Allocate output pointers*/
+ 	if(pKff) *pKff = Kff;
+Index: ../trunk-jpl/src/c/toolkits/issm/SparseRow.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16437)
++++ ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16438)
+@@ -12,19 +12,23 @@
+ template <class doubletype> 
+ class SparseRow{
+ 
++	private:
++		int*        buffer; //used during SetValues
++
+ 	public:
+ 
+ 		int         M; //real size
+ 		int         ncols; //number of non-zeros 
+ 		int*        indices;
+ 		doubletype* values;
+-
++		
+ 		/*SparseRow constructors, destructors*/
+ 		SparseRow(){ /*{{{*/
+ 			 M=0;
+ 			 ncols=0;
+ 			 indices=NULL;
+ 			 values=NULL;
++			 buffer=NULL;
+ 		} /*}}}*/
+ 		SparseRow(int in_M){/*{{{*/
+ 			
+@@ -32,12 +36,15 @@
+ 			ncols=0;
+ 			indices=NULL;
+ 			values=NULL;
++
++			buffer=xNewZeroInit<int>(M);
+ 		} /*}}}*/
+ 		~SparseRow(){/*{{{*/
+ 			if(ncols){
+ 				xDelete<int>(indices);
+ 				xDelete<doubletype>(values);
+ 			}
++			if(buffer)xDelete<int>(buffer);
+ 		} /*}}}*/
+ 
+ 		/*SparseRow specific routines*/
+@@ -52,7 +59,6 @@
+ 
+ 			int count;
+ 			int i,j;
+-			int* buffer=NULL;
+ 
+ 			if(!M)_error_("unknow dimension for this sparse row!");
+ 
+@@ -66,18 +72,17 @@
+ 			if(!numvalues)return;
+ 
+ 			/*Figure out number of non-zero values ncols: */
+-			buffer=xNewZeroInit<int>(M);
++			for(i=0;i<numvalues;i++)buffer[i]=0;
++			
++			ncols=0;
+ 			for(i=0;i<numvalues;i++){
++				if(!buffer[cols[i]])ncols++;
+ 				if(mods[i]==ADD_VAL){
+ 					if(buffer[cols[i]]!=2)buffer[cols[i]]=1;
+ 				}
+ 				else buffer[cols[i]]=2;
+ 			}
+-			ncols=0;
+-			for(i=0;i<M;i++)if(buffer[i]!=0)ncols++;
+-			_assert_(ncols);
+ 
+-
+ 			/*Allocate:*/
+ 			indices=xNew<int>(ncols); _assert_(indices);
+ 			values=xNewZeroInit<doubletype>(ncols);  _assert_(values);
+@@ -108,10 +113,6 @@
+ 				}
+ 			}
+ 			if(count!=ncols)_error_("counter problem during set values operations");
+-
+-			/*Free ressources: */
+-			xDelete<int>(buffer);
+-
+ 		} /*}}}*/
+ 		doubletype Norm(NormMode mode){ /*{{{*/
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16438-16439.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16438-16439.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16438-16439.diff	(revision 16556)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16438)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16439)
+@@ -19,8 +19,21 @@
+ 
+ 	/*Get gauss points*/
+ 	this->numgauss = order;
+-	GaussLegendreLinear(&coords1,&weights,order);
++	GaussLegendreLinear(&pcoords1,&pweights,order);
++	
++	this->coords1=xNew<IssmDouble>(numgauss);
++	this->weights=xNew<IssmDouble>(numgauss);
+ 
++	/*cast : */
++	for(int i=0;i<numgauss;i++){
++		this->coords1[i]=pcoords1[i];
++		this->weights[i]=pweights[i];
++	}
++
++	/*Free ressources: */
++	xDelete<IssmDouble>(pcoords1);
++	xDelete<IssmDouble>(pweights);
++
+ 	/*Initialize static fields as undefinite*/
+ 	weight=UNDEF;
+ 	coord1=UNDEF;
Index: issm/oecreview/Archive/16133-16554/ISSM-16439-16440.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16439-16440.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16439-16440.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16439)
++++ ../trunk-jpl/src/c/classes/gauss/GaussSeg.cpp	(revision 16440)
+@@ -31,8 +31,8 @@
+ 	}
+ 
+ 	/*Free ressources: */
+-	xDelete<IssmDouble>(pcoords1);
+-	xDelete<IssmDouble>(pweights);
++	xDelete<IssmPDouble>(pcoords1);
++	xDelete<IssmPDouble>(pweights);
+ 
+ 	/*Initialize static fields as undefinite*/
+ 	weight=UNDEF;
Index: issm/oecreview/Archive/16133-16554/ISSM-16440-16441.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16440-16441.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16440-16441.diff	(revision 16556)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 16440)
++++ ../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 16441)
+@@ -38,9 +38,8 @@
+ 	numberofdofspernode=femmodel->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
+ 	/*if our matrices are coming from issm, we don't do dynamic allocation like Petsc 
+-	 * does, and this routine is essentially useless. Force oldalloc in this case: */
++	 * does, and this routine is essentially useless. Force standard alloc in this case: */
+ 	toolkittype=ToolkitOptions::GetToolkitType();
+-	if(strcmp(toolkittype,"issm")==0)oldalloc=true;
+ 
+ 	if(oldalloc){
+ 		if(pKff) Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+@@ -52,18 +51,28 @@
+ 		if(pKff){
+ 			m=flocalsize; n=flocalsize; /*local  sizes*/
+ 			M=fsize;      N=fsize;      /*global sizes*/
+-			MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,FsetEnum);
+-			Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-			xDelete<int>(d_nnz);
+-			xDelete<int>(o_nnz);
++			if(strcmp(toolkittype,"issm")==0){
++				Kff=new Matrix<IssmDouble>(m,n,M,N,NULL,NULL);
++			}
++			else{
++				MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,FsetEnum);
++				Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++				xDelete<int>(d_nnz);
++				xDelete<int>(o_nnz);
++			}
+ 		}
+ 		if(pKfs){
+ 			m=flocalsize; n=slocalsize; /*local  sizes*/
+ 			M=fsize;      N=ssize;      /*global sizes*/
+-			MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,SsetEnum);
+-			Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-			xDelete<int>(d_nnz);
+-			xDelete<int>(o_nnz);
++			if(strcmp(toolkittype,"issm")==0){
++				Kfs=new Matrix<IssmDouble>(m,n,M,N,NULL,NULL);
++			}
++			else{
++				MatrixNonzeros(&d_nnz,&o_nnz,femmodel,FsetEnum,SsetEnum);
++				Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++				xDelete<int>(d_nnz);
++				xDelete<int>(o_nnz);
++			}
+ 		}
+ 		if(pdf) df =new Vector<IssmDouble>(flocalsize,fsize);
+ 		if(ppf) pf =new Vector<IssmDouble>(flocalsize,fsize);
Index: issm/oecreview/Archive/16133-16554/ISSM-16441-16442.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16441-16442.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16441-16442.diff	(revision 16556)
@@ -0,0 +1,856 @@
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16442)
+@@ -12,12 +12,12 @@
+ void masstransport_core(FemModel* femmodel){
+ 
+ 	/*parameters: */
+-	int   i;
+-	bool  save_results;
+-	bool  issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
+-	int   solution_type;
++	int    i;
++	int    numoutputs,meshtype;
++	bool   save_results;
++	bool   issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
++	int    solution_type;
+ 	char** requested_outputs = NULL;
+-	int   numoutputs        = 0;
+ 
+ 	/*activate configuration*/
+ 	femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+@@ -32,6 +32,7 @@
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+ 
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+@@ -58,8 +59,16 @@
+ 		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
+ 		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
++		if(meshtype==Mesh2DverticalEnum){
++			femmodel->parameters->SetParam(BedEnum,InputToExtrudeEnum);
++			extrudefrombase_core(femmodel);
++		}
+ 		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
+ 		solutionsequence_linear(femmodel);
++		if(meshtype==Mesh2DverticalEnum){
++			femmodel->parameters->SetParam(SurfaceEnum,InputToExtrudeEnum);
++			extrudefromtop_core(femmodel);
++		}
+ 	}
+ 	else{
+ 		if(VerboseSolution()) _printf0_("   call computational core\n");
+@@ -77,5 +86,5 @@
+ 	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
+ 
+ 	/*Free ressources:*/
+-	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);} 
++	if(numoutputs){for(int i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);} 
+ }
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16442)
+@@ -120,7 +120,7 @@
+ 			break;
+ 
+ 		case TransientSolutionEnum:
+-			numanalyses=11;
++			numanalyses=13;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[ 0]=StressbalanceAnalysisEnum;
+ 			analyses[ 1]=StressbalanceVerticalAnalysisEnum;
+@@ -133,6 +133,8 @@
+ 			analyses[ 8]=MasstransportAnalysisEnum;
+ 			analyses[ 9]=FreeSurfaceBaseAnalysisEnum;
+ 			analyses[10]=FreeSurfaceTopAnalysisEnum;
++			analyses[11]=ExtrudeFromBaseAnalysisEnum;
++			analyses[12]=ExtrudeFromTopAnalysisEnum;
+ 			break;
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16441)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16442)
+@@ -29,6 +29,8 @@
+ void control_core(FemModel* femmodel);
+ void controltao_core(FemModel* femmodel);
+ void masstransport_core(FemModel* femmodel);
++void extrudefrombase_core(FemModel* femmodel);
++void extrudefromtop_core(FemModel* femmodel);
+ void balancethickness_core(FemModel* femmodel);
+ void balancevelocity_core(FemModel* femmodel);
+ void slopecompute_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16441)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16442)
+@@ -319,6 +319,8 @@
+ 	MasstransportSolutionEnum,
+ 	FreeSurfaceBaseAnalysisEnum,
+ 	FreeSurfaceTopAnalysisEnum,
++	ExtrudeFromBaseAnalysisEnum,
++	ExtrudeFromTopAnalysisEnum,
+ 	SteadystateSolutionEnum,
+ 	SurfaceSlopeAnalysisEnum,
+ 	SurfaceSlopeSolutionEnum,
+@@ -378,6 +380,7 @@
+ 	FileParamEnum,
+ 	InputEnum,
+ 	IntInputEnum,
++	InputToExtrudeEnum,
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16442)
+@@ -325,6 +325,8 @@
+ 		case MasstransportSolutionEnum : return "MasstransportSolution";
+ 		case FreeSurfaceBaseAnalysisEnum : return "FreeSurfaceBaseAnalysis";
+ 		case FreeSurfaceTopAnalysisEnum : return "FreeSurfaceTopAnalysis";
++		case ExtrudeFromBaseAnalysisEnum : return "ExtrudeFromBaseAnalysis";
++		case ExtrudeFromTopAnalysisEnum : return "ExtrudeFromTopAnalysis";
+ 		case SteadystateSolutionEnum : return "SteadystateSolution";
+ 		case SurfaceSlopeAnalysisEnum : return "SurfaceSlopeAnalysis";
+ 		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+@@ -378,6 +380,7 @@
+ 		case FileParamEnum : return "FileParam";
+ 		case InputEnum : return "Input";
+ 		case IntInputEnum : return "IntInput";
++		case InputToExtrudeEnum : return "InputToExtrude";
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16442)
+@@ -331,6 +331,8 @@
+ 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
+ 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
+ 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
++	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
++	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+@@ -380,13 +382,14 @@
+ 	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+ 	      else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
+-	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+-	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Input")==0) return InputEnum;
++	      if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
++	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
++	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+@@ -502,13 +505,13 @@
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+-	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+-	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+-	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++	      if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
++	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
++	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
++	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp	(revision 16442)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsExtrudeFromTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsExtrudeFromTop(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp	(revision 16442)
+@@ -0,0 +1,14 @@
++/*
++ * CreateConstraintsExtrudeFromTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsExtrudeFromTop(Constraints** pconstraints, IoModel* iomodel){
++
++	/*These are automated*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp	(revision 16442)
+@@ -0,0 +1,15 @@
++/*
++ * CreateNodesExtrudeFromTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesExtrudeFromTop(Nodes** pnodes, IoModel* iomodel){
++
++	CreateNodes(pnodes,iomodel,ExtrudeFromTopAnalysisEnum,P1Enum);
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp	(revision 16442)
+@@ -0,0 +1,26 @@
++/*
++ * UpdateElementsExtrudeFromTop:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsExtrudeFromTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16442)
+@@ -64,6 +64,18 @@
+ void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ #endif
+ 
++/*Extrude from base*/
++void CreateNodesExtrudeFromBase(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsExtrudeFromBase(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsExtrudeFromBase(Loads** ploads, IoModel* iomodel);
++void UpdateElementsExtrudeFromBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++
++/*Extrude from top*/
++void CreateNodesExtrudeFromTop(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsExtrudeFromTop(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsExtrudeFromTop(Loads** ploads, IoModel* iomodel);
++void UpdateElementsExtrudeFromTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++
+ /*bed slope*/
+ void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
+ void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16442)
+@@ -124,6 +124,12 @@
+ 		case FreeSurfaceBaseAnalysisEnum:
+ 			numdofs=1;
+ 			break;
++		case ExtrudeFromBaseAnalysisEnum:
++			numdofs=1;
++			break;
++		case ExtrudeFromTopAnalysisEnum:
++			numdofs=1;
++			break;
+ 		case GiaAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp	(revision 16442)
+@@ -0,0 +1,26 @@
++/*
++ * UpdateElementsExtrudeFromBase:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsExtrudeFromBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp	(revision 16442)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsExtrudeFromBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsExtrudeFromBase(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp	(revision 16442)
+@@ -0,0 +1,14 @@
++/*
++ * CreateConstraintsExtrudeFromBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsExtrudeFromBase(Constraints** pconstraints, IoModel* iomodel){
++
++	/*These are automated*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp	(revision 16442)
+@@ -0,0 +1,15 @@
++/*
++ * CreateNodesExtrudeFromBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesExtrudeFromBase(Nodes** pnodes, IoModel* iomodel){
++
++	CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16442)
+@@ -175,6 +175,18 @@
+ 			CreateLoadsFreeSurfaceBase(ploads,iomodel);
+ 			UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
++		case ExtrudeFromBaseAnalysisEnum:
++			CreateNodesExtrudeFromBase(pnodes, iomodel);
++			CreateConstraintsExtrudeFromBase(pconstraints,iomodel);
++			CreateLoadsExtrudeFromBase(ploads,iomodel);
++			UpdateElementsExtrudeFromBase(elements,iomodel,analysis_counter,analysis_type);
++			break;
++		case ExtrudeFromTopAnalysisEnum:
++			CreateNodesExtrudeFromTop(pnodes, iomodel);
++			CreateConstraintsExtrudeFromTop(pconstraints,iomodel);
++			CreateLoadsExtrudeFromTop(ploads,iomodel);
++			UpdateElementsExtrudeFromTop(elements,iomodel,analysis_counter,analysis_type);
++			break;
+ 		#endif
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16441)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16442)
+@@ -396,7 +396,17 @@
+ 								./modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp\
+ 								./modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp\
+ 								./modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp\
+-								./analyses/masstransport_core.cpp
++								./modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp\
++								./modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp \
++								./modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp\
++								./modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp\
++								./modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp\
++								./modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp \
++								./modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp\
++								./modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp\
++								./analyses/masstransport_core.cpp\
++								./analyses/extrudefrombase_core.cpp\
++								./analyses/extrudefromtop_core.cpp
+ 
+ #}}}
+ #Thermal sources  {{{
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16442)
+@@ -586,6 +586,24 @@
+ 	*pdt=min_dt;
+ }
+ /*}}}*/
++void FemModel::UpdateConstraintsExtrudeFromBasex(void){ /*{{{*/
++
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->UpdateConstraintsExtrudeFromBase();
++	}
++
++}
++/*}}}*/
++void FemModel::UpdateConstraintsExtrudeFromTopx(void){ /*{{{*/
++
++	for(int i=0;i<elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->UpdateConstraintsExtrudeFromTop();
++	}
++
++}
++/*}}}*/
+ #ifdef _HAVE_RESPONSES_
+ void FemModel::MassFluxx(IssmDouble* pmass_flux){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16442)
+@@ -126,10 +126,13 @@
+ 		virtual void   InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
+ 		#endif
+ 
++		virtual void UpdateConstraintsExtrudeFromBase(void)=0;
++		virtual void UpdateConstraintsExtrudeFromTop(void)=0;
++
+ 		#ifdef _HAVE_THERMAL_
+ 		virtual void UpdateBasalConstraintsEnthalpy(void)=0;
+ 		virtual void ComputeBasalMeltingrate(void)=0;
+-       	virtual void DrainWaterfraction(void)=0;
++		virtual void DrainWaterfraction(void)=0;
+ 		#endif
+ 
+ 		#ifdef _HAVE_HYDROLOGY_
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16442)
+@@ -280,6 +280,8 @@
+ 					_error_("Mesh not supported yet");
+ 			}
+ 			break;
++		case ExtrudeFromBaseAnalysisEnum: case ExtrudeFromTopAnalysisEnum:
++			return CreateKMatrixExtrusion();
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -492,6 +494,9 @@
+ 					_error_("Mesh not supported yet");
+ 			}
+ 			break;
++		case ExtrudeFromBaseAnalysisEnum: case ExtrudeFromTopAnalysisEnum:
++			return NULL;
++			break;
+ 		#endif
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyShreveAnalysisEnum:
+@@ -1788,7 +1793,7 @@
+ void  Tria::InputUpdateFromSolution(IssmDouble* solution){
+ 
+ 	/*retrive parameters: */
+-	int analysis_type;
++	int analysis_type,extrusioninput;
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 
+ 	/*Just branch to the correct InputUpdateFromSolution generator, according to the type of analysis we are carrying out: */
+@@ -1870,6 +1875,10 @@
+ 		case FreeSurfaceBaseAnalysisEnum:
+ 			InputUpdateFromSolutionOneDof(solution,BedEnum);
+ 			break;
++		case ExtrudeFromBaseAnalysisEnum: case ExtrudeFromTopAnalysisEnum:
++			this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
++			InputUpdateFromSolutionOneDof(solution,extrusioninput);
++			break;
+ 		default:
+ 			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
+ 	}
+@@ -2902,7 +2911,51 @@
+ 	this->InputUpdateFromIoModel(index,iomodel);
+ }
+ /*}}}*/
++/*FUNCTION Tria::UpdateConstraintsExtrudeFromBase{{{*/
++void  Tria::UpdateConstraintsExtrudeFromBase(void){
+ 
++	if(!HasEdgeOnBed()) return;
++
++	int extrusioninput;
++	int indices[2];
++	IssmDouble value;
++
++	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
++	Input* input = inputs->GetInput(extrusioninput); _assert_(extrusioninput);
++	this->EdgeOnBedIndices(&indices[0],&indices[1]);
++
++	GaussTria* gauss=new GaussTria();
++	for(int i=0;i<2;i++){
++		gauss->GaussNode(P1Enum,indices[i]);
++		input->GetInputValue(&value,gauss);
++		this->nodes[indices[i]]->ApplyConstraint(1,value);
++	}
++
++}
++/*}}}*/
++/*FUNCTION Tria::UpdateConstraintsExtrudeFromTop{{{*/
++void  Tria::UpdateConstraintsExtrudeFromTop(void){
++
++	if(!HasEdgeOnSurface()) return;
++
++	int extrusioninput;
++	int indices[2];
++	IssmDouble value;
++
++	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
++	Input* input = inputs->GetInput(extrusioninput); _assert_(extrusioninput);
++	this->EdgeOnSurfaceIndices(&indices[0],&indices[1]);
++
++	GaussTria* gauss=new GaussTria();
++	for(int i=0;i<2;i++){
++		gauss->GaussNode(P1Enum,indices[i]);
++		input->GetInputValue(&value,gauss);
++		this->nodes[indices[i]]->ApplyConstraint(1,value);
++	}
++
++}
++/*}}}*/
++
+ #ifdef _HAVE_RESPONSES_
+ /*FUNCTION Tria::AverageOntoPartition {{{*/
+ void  Tria::AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){
+@@ -7255,6 +7308,163 @@
+ #endif
+ 
+ #ifdef _HAVE_MASSTRANSPORT_
++/*FUNCTION Tria::CreateKMatrixExtrusion {{{*/
++ElementMatrix* Tria::CreateKMatrixExtrusion(void){
++
++	/*compute all stiffness matrices for this element*/
++	ElementMatrix* Ke1=CreateKMatrixExtrusionVolume();
++	ElementMatrix* Ke2=CreateKMatrixExtrusionSurface();
++	ElementMatrix* Ke3=CreateKMatrixExtrusionBed();
++	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
++
++	/*clean-up and return*/
++	delete Ke1;
++	delete Ke2;
++	delete Ke3;
++	return Ke;
++
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixExtrusionVolume {{{*/
++ElementMatrix* Tria::CreateKMatrixExtrusionVolume(void){
++
++	/*Intermediaries */
++	IssmDouble  Jdet;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  B[NDOF1][NUMVERTICES];
++	IssmDouble  Bprime[NDOF1][NUMVERTICES];
++	IssmDouble  DL_scalar;
++	GaussTria  *gauss=NULL;
++
++	/*Initialize Element matrix*/
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
++		GetBExtrusion(&B[0][0], &xyz_list[0][0], gauss);
++		GetNodalFunctions(&Bprime[0][0],gauss);
++
++		DL_scalar=gauss->weight*Jdet;
++
++		TripleMultiply(&B[0][0],1,NUMVERTICES,1,
++					&DL_scalar,1,1,0,
++					&Bprime[0][0],1,NUMVERTICES,0,
++					&Ke->values[0],1);
++	} 
++
++	/*Clean up and return*/
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixExtrusionSurface {{{*/
++ElementMatrix* Tria::CreateKMatrixExtrusionSurface(void){
++
++	if (!HasEdgeOnSurface()) return NULL;
++
++	/*Constants*/
++	const int numdof=NDOF1*NUMVERTICES;
++
++	/*Intermediaries */
++	int indices[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_seg[NUMVERTICES1D][3];
++	IssmDouble normal[3];
++	IssmDouble Jdet,DL_scalar;
++	IssmDouble basis[NUMVERTICES];
++	GaussTria *gauss=NULL;
++
++	/*Initialize Element matrix*/
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/*Get vertex indices that lie on bed*/
++	this->EdgeOnSurfaceIndices(&indices[0],&indices[1]);
++	for(int i=0;i<NUMVERTICES1D;i++) for(int j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j];
++	GetSegmentNormal(&normal[0],xyz_list_seg);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussTria(indices[0],indices[1],2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
++		GetNodalFunctions(&basis[0], gauss);
++
++		DL_scalar= - gauss->weight*Jdet*normal[1]; 
++
++		TripleMultiply( basis,1,numdof,1,
++					&DL_scalar,1,1,0,
++					basis,1,numdof,0,
++					&Ke->values[0],1);
++	}
++
++	/*Clean up and return*/
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
++/*FUNCTION Tria::CreateKMatrixExtrusionBed {{{*/
++ElementMatrix* Tria::CreateKMatrixExtrusionBed(void){
++
++	if (!HasEdgeOnBed()) return NULL;
++
++	/*Constants*/
++	const int numdof=NDOF1*NUMVERTICES;
++
++	/*Intermediaries */
++	int indices[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_seg[NUMVERTICES1D][3];
++	IssmDouble normal[3];
++	IssmDouble Jdet,DL_scalar;
++	IssmDouble basis[NUMVERTICES];
++	GaussTria *gauss=NULL;
++
++	/*Initialize Element matrix*/
++	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
++
++	/*Retrieve all inputs and parameters*/
++	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
++
++	/*Get vertex indices that lie on bed*/
++	this->EdgeOnBedIndices(&indices[0],&indices[1]);
++	for(int i=0;i<NUMVERTICES1D;i++) for(int j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j];
++	GetSegmentNormal(&normal[0],xyz_list_seg);
++
++	/* Start  looping on the number of gaussian points: */
++	gauss=new GaussTria(indices[0],indices[1],2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
++
++		gauss->GaussPoint(ig);
++
++		GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
++		GetNodalFunctions(&basis[0], gauss);
++
++		DL_scalar= - gauss->weight*Jdet*normal[1]; 
++
++		TripleMultiply( basis,1,numdof,1,
++					&DL_scalar,1,1,0,
++					basis,1,numdof,0,
++					&Ke->values[0],1);
++	}
++
++	/*Clean up and return*/
++	delete gauss;
++	return Ke;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreateKMatrixMasstransport {{{*/
+ ElementMatrix* Tria::CreateKMatrixMasstransport(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 16442)
+@@ -22,6 +22,7 @@
+ 		void SetElementType(int type,int type_counter);
+ 
+ 		/*Numerics*/
++		void GetBExtrusion(IssmDouble* B_prime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBSSA(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
+ 		void GetBSSAFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16442)
+@@ -192,6 +192,10 @@
+ 		ElementMatrix* CreateKMatrixMasstransport(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_CG(void);
+ 		ElementMatrix* CreateKMatrixMasstransport_DG(void);
++		ElementMatrix* CreateKMatrixExtrusion(void);
++		ElementMatrix* CreateKMatrixExtrusionVolume(void);
++		ElementMatrix* CreateKMatrixExtrusionSurface(void);
++		ElementMatrix* CreateKMatrixExtrusionBed(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceTop(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceTop1D(void);
+ 		ElementMatrix* CreateKMatrixFreeSurfaceBase(void);
+@@ -277,6 +281,8 @@
+ 		void	         InputUpdateFromSolutionAdjointHoriz( IssmDouble* solution);
+ 		#endif
+ 
++		void UpdateConstraintsExtrudeFromBase(void);
++		void UpdateConstraintsExtrudeFromTop(void);
+ 		#ifdef _HAVE_THERMAL_
+ 		void UpdateBasalConstraintsEnthalpy(void){_error_("not implemented yet");};
+ 		void ComputeBasalMeltingrate(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16442)
+@@ -329,6 +329,8 @@
+ 		void    InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution);
+ 		#endif
+ 
++		void           UpdateConstraintsExtrudeFromBase(void){_error_("not implemented yet");};
++		void           UpdateConstraintsExtrudeFromTop(void){_error_("not implemented yet");};
+ 		#ifdef _HAVE_THERMAL_
+ 		ElementMatrix* CreateKMatrixEnthalpy(void);
+ 		ElementMatrix* CreateKMatrixEnthalpyVolume(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16442)
+@@ -123,6 +123,8 @@
+ 		IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
+ 		void        Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
+ 		IssmDouble  TimeAdapt(){_error_("not implemented yet");};
++		void UpdateConstraintsExtrudeFromBase(){_error_("not implemented");};
++		void UpdateConstraintsExtrudeFromTop(){_error_("not implemented");};
+ 
+ #ifdef _HAVE_RESPONSES_
+ 		void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16441)
++++ ../trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 16442)
+@@ -199,6 +199,27 @@
+ 	xDelete<IssmDouble>(basis);
+ }
+ /*}}}*/
++/*FUNCTION TriaRef::GetBExtrusion{{{*/
++void TriaRef::GetBExtrusion(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
++	/*	Compute B  matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];
++		where hi is the interpolation function for node i.*/
++
++	/*Fetch number of nodes for this finite element*/
++	int numnodes = this->NumberofNodes();
++
++	/*Get nodal functions derivatives*/
++	IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);
++	GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
++
++	/*Build B: */
++	for(int i=0;i<numnodes;i++){
++		B[i] = dbasis[1*numnodes+i];  
++	}
++
++	/*Clean-up*/
++	xDelete<IssmDouble>(dbasis);
++}
++/*}}}*/
+ /*FUNCTION TriaRef::GetBFS {{{*/
+ void TriaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+ 	/*Compute B  matrix. B=[Bv1 Bv2 ... Bp1 Bp2 ...] where Bvi is of size 3*NDOF3. 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16441)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16442)
+@@ -95,6 +95,8 @@
+ 		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
++		void UpdateConstraintsExtrudeFromBasex();
++		void UpdateConstraintsExtrudeFromTopx();
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		void HydrologyTransferx(void);
+ 		void HydrologyEPLupdateDomainx(void);
Index: issm/oecreview/Archive/16133-16554/ISSM-16442-16443.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16442-16443.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16442-16443.diff	(revision 16556)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/src/m/enum/ExtrudeFromTopAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ExtrudeFromTopAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ExtrudeFromTopAnalysisEnum.m	(revision 16443)
+@@ -0,0 +1,11 @@
++function macro=ExtrudeFromTopAnalysisEnum()
++%EXTRUDEFROMTOPANALYSISENUM - Enum of ExtrudeFromTopAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ExtrudeFromTopAnalysisEnum()
++
++macro=StringToEnum('ExtrudeFromTopAnalysis');
+Index: ../trunk-jpl/src/m/enum/InputToExtrudeEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/InputToExtrudeEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/InputToExtrudeEnum.m	(revision 16443)
+@@ -0,0 +1,11 @@
++function macro=InputToExtrudeEnum()
++%INPUTTOEXTRUDEENUM - Enum of InputToExtrude
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=InputToExtrudeEnum()
++
++macro=StringToEnum('InputToExtrude');
+Index: ../trunk-jpl/src/m/enum/ExtrudeFromBaseAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ExtrudeFromBaseAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ExtrudeFromBaseAnalysisEnum.m	(revision 16443)
+@@ -0,0 +1,11 @@
++function macro=ExtrudeFromBaseAnalysisEnum()
++%EXTRUDEFROMBASEANALYSISENUM - Enum of ExtrudeFromBaseAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ExtrudeFromBaseAnalysisEnum()
++
++macro=StringToEnum('ExtrudeFromBaseAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16442)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16443)
+@@ -317,6 +317,8 @@
+ def MasstransportSolutionEnum(): return StringToEnum("MasstransportSolution")[0]
+ def FreeSurfaceBaseAnalysisEnum(): return StringToEnum("FreeSurfaceBaseAnalysis")[0]
+ def FreeSurfaceTopAnalysisEnum(): return StringToEnum("FreeSurfaceTopAnalysis")[0]
++def ExtrudeFromBaseAnalysisEnum(): return StringToEnum("ExtrudeFromBaseAnalysis")[0]
++def ExtrudeFromTopAnalysisEnum(): return StringToEnum("ExtrudeFromTopAnalysis")[0]
+ def SteadystateSolutionEnum(): return StringToEnum("SteadystateSolution")[0]
+ def SurfaceSlopeAnalysisEnum(): return StringToEnum("SurfaceSlopeAnalysis")[0]
+ def SurfaceSlopeSolutionEnum(): return StringToEnum("SurfaceSlopeSolution")[0]
+@@ -370,6 +372,7 @@
+ def FileParamEnum(): return StringToEnum("FileParam")[0]
+ def InputEnum(): return StringToEnum("Input")[0]
+ def IntInputEnum(): return StringToEnum("IntInput")[0]
++def InputToExtrudeEnum(): return StringToEnum("InputToExtrude")[0]
+ def IntParamEnum(): return StringToEnum("IntParam")[0]
+ def IntVecParamEnum(): return StringToEnum("IntVecParam")[0]
+ def TransientParamEnum(): return StringToEnum("TransientParam")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16443-16444.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16443-16444.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16443-16444.diff	(revision 16556)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp	(revision 16444)
+@@ -0,0 +1,21 @@
++/*!\file: extrudefromtop_core.cpp
++ * \brief: core of the extrusion solution
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void extrudefromtop_core(FemModel* femmodel){
++
++	if(VerboseSolution()) _printf0_("extruding solution from top...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(ExtrudeFromTopAnalysisEnum);
++	femmodel->UpdateConstraintsExtrudeFromTopx();
++	solutionsequence_linear(femmodel);
++
++}
+Index: ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp	(revision 16444)
+@@ -0,0 +1,21 @@
++/*!\file: extrudefrombase_core.cpp
++ * \brief: core of the extrusion solution
++ */ 
++
++#include "./analyses.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void extrudefrombase_core(FemModel* femmodel){
++
++	if(VerboseSolution()) _printf0_("extruding solution from base...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(ExtrudeFromBaseAnalysisEnum);
++	femmodel->UpdateConstraintsExtrudeFromBasex();
++	solutionsequence_linear(femmodel);
++
++}
Index: issm/oecreview/Archive/16133-16554/ISSM-16444-16445.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16444-16445.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16444-16445.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 16444)
++++ ../trunk-jpl/etc/environment.sh	(revision 16445)
+@@ -76,6 +76,8 @@
+ 	libpathappend "$MPI_DIR/lib"
+ fi
+ 
++export MPI_INC_DIR="$MPI_DIR/include"
++
+ PETSC_DIR="$ISSM_DIR/externalpackages/petsc/install"
+ export PETSC_DIR
+ libpathappend "$PETSC_DIR/lib"
Index: issm/oecreview/Archive/16133-16554/ISSM-16445-16446.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16445-16446.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16445-16446.diff	(revision 16556)
@@ -0,0 +1,71 @@
+Index: ../trunk-jpl/src/c/classes/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16445)
++++ ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16446)
+@@ -20,19 +20,22 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION Vertex::Vertex(int vertex_id, IssmDouble vertex_x, IssmDouble vertex_y, IssmDouble vertex_z, IssmDouble vertex_sigma){{{*/
+-Vertex::Vertex(int vertex_id, int vertex_sid,IssmDouble vertex_x, IssmDouble vertex_y, IssmDouble vertex_z, IssmDouble vertex_sigma,int vertex_connectivity){
+-	this->Init(vertex_id, vertex_sid,vertex_x, vertex_y, vertex_z, vertex_sigma,vertex_connectivity);
+-}
+-/*}}}*/
+ /*FUNCTION Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel) {{{*/
+ Vertex::Vertex(int vertex_id, int vertex_sid,int i, IoModel* iomodel){
+ 
++	this->id           = vertex_id;
++	this->sid          = vertex_sid;
++	this->pid          = UNDEF;
++
+ 	_assert_(iomodel->Data(MeshXEnum) && iomodel->Data(MeshYEnum) && iomodel->Data(MeshZEnum));
++	this->x            = iomodel->Data(MeshXEnum)[i];
++	this->y            = iomodel->Data(MeshYEnum)[i];
++	this->z            = iomodel->Data(MeshZEnum)[i];
++
+ 	_assert_(iomodel->Data(BedEnum) && iomodel->Data(ThicknessEnum) && iomodel->numbernodetoelementconnectivity);
++	this->sigma        = (iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
++	this->connectivity = iomodel->numbernodetoelementconnectivity[i];
+ 
+-	this->Init(vertex_id, vertex_sid, iomodel->Data(MeshXEnum)[i],iomodel->Data(MeshYEnum)[i],iomodel->Data(MeshZEnum)[i],(iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]),iomodel->numbernodetoelementconnectivity[i]);
+-
+ }
+ /*}}}*/
+ /*FUNCTION Vertex::~Vertex() {{{*/
+@@ -40,23 +43,7 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION Vertex::Init{{{*/
+-void Vertex::Init(int vertex_id, int vertex_sid,IssmDouble vertex_x, IssmDouble vertex_y, IssmDouble vertex_z, IssmDouble vertex_sigma,int vertex_connectivity){
+ 
+-	/*all the initialization has been done by the initializer, just fill in the id: */
+-	this->id           = vertex_id;
+-	this->sid          = vertex_sid;
+-	this->pid          = UNDEF;
+-	this->x            = vertex_x;
+-	this->y            = vertex_y;
+-	this->z            = vertex_z;
+-	this->sigma        = vertex_sigma;
+-	this->connectivity = vertex_connectivity;
+-
+-	return;
+-}
+-/*}}}*/
+-
+ /*Object virtual functions definitions:*/
+ /*FUNCTION Vertex::Echo{{{*/
+ void Vertex::Echo(void){
+Index: ../trunk-jpl/src/c/classes/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertex.h	(revision 16445)
++++ ../trunk-jpl/src/c/classes/Vertex.h	(revision 16446)
+@@ -31,8 +31,6 @@
+ 
+ 		/*Vertex constructors, destructors {{{*/
+ 		Vertex();
+-		Vertex(int id, int sid,IssmDouble x, IssmDouble y, IssmDouble z, IssmDouble sigma, int connectivity); 
+-		void Init(int id, int sid, IssmDouble x, IssmDouble y, IssmDouble z, IssmDouble sigma,int connectivity);
+ 		Vertex(int id, int sid, int i, IoModel* iomodel);
+ 		~Vertex();
+ 		/*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16446-16447.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16446-16447.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16446-16447.diff	(revision 16556)
@@ -0,0 +1,140 @@
+Index: ../trunk-jpl/src/c/classes/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16446)
++++ ../trunk-jpl/src/c/classes/Vertex.cpp	(revision 16447)
+@@ -31,9 +31,19 @@
+ 	this->x            = iomodel->Data(MeshXEnum)[i];
+ 	this->y            = iomodel->Data(MeshYEnum)[i];
+ 	this->z            = iomodel->Data(MeshZEnum)[i];
++	this->meshtype     = iomodel->meshtype;
+ 
+ 	_assert_(iomodel->Data(BedEnum) && iomodel->Data(ThicknessEnum) && iomodel->numbernodetoelementconnectivity);
+-	this->sigma        = (iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
++	switch(iomodel->meshtype){
++		case Mesh3DEnum:
++		case Mesh2DhorizontalEnum:
++			this->sigma = (iomodel->Data(MeshZEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
++			break;
++		case Mesh2DverticalEnum:
++			this->sigma = (iomodel->Data(MeshYEnum)[i]-iomodel->Data(BedEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
++			break;
++	}
++
+ 	this->connectivity = iomodel->numbernodetoelementconnectivity[i];
+ 
+ }
+@@ -111,22 +121,30 @@
+ int    Vertex::Pid(void){ return pid; }
+ /*}}}*/
+ /*FUNCTION Vertex::UpdatePosition {{{*/
+-void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
++void  Vertex::UpdatePosition(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* surface,IssmDouble* bed){
+ 
+-	IssmDouble oldz,newz;
+-	IssmDouble dt,velz;
++	IssmDouble oldy,newy,vely;
++	IssmDouble oldz,newz,velz;
++	IssmDouble dt;
+ 
+ 	/*Get time stepping*/
+ 	parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+ 
+ 	/*sigma remains constant. z=bed+sigma*thickness*/
+-	oldz = this->z;
+-	newz = bed[this->pid]+sigma*thickness[this->pid];
+-	velz = (newz-oldz)/dt;
+-	this->z = newz;
+-
+-	/*put vz in vector*/
+-	vz->SetValue(this->pid,velz,INS_VAL);
++	if(this->meshtype==Mesh2DverticalEnum){
++		oldy = this->y;
++		newy = bed[this->pid]+sigma*(surface[this->pid] - bed[this->pid]);
++		vely = (newy-oldy)/dt;
++		this->y = newy;
++		vy->SetValue(this->pid,vely,INS_VAL);
++	}
++	else{
++		oldz = this->z;
++		newz = bed[this->pid]+sigma*(surface[this->pid] - bed[this->pid]);
++		velz = (newz-oldz)/dt;
++		this->z = newz;
++		vz->SetValue(this->pid,velz,INS_VAL);
++	}
+ }
+ /*}}}*/
+ /*FUNCTION Vertex::DistributePids{{{*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16446)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16447)
+@@ -368,33 +368,40 @@
+ /*Modules:*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+-	Vector<IssmDouble> *vz        = NULL;
+-	IssmDouble         *thickness = NULL;
+-	IssmDouble         *bed       = NULL;
++	IssmDouble         *surface = NULL;
++	IssmDouble         *bed     = NULL;
+ 
+ 	/*get vertex vectors for bed and thickness: */
+-	GetVectorFromInputsx(&thickness,this, ThicknessEnum,VertexEnum);
+-	GetVectorFromInputsx(&bed      ,this, BedEnum,      VertexEnum);
++	GetVectorFromInputsx(&surface  ,this, SurfaceEnum,VertexEnum);
++	GetVectorFromInputsx(&bed      ,this, BedEnum,    VertexEnum);
+ 
+ 	/*Allocate vector*/
+-	vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
++	Vector<IssmDouble> *vx=new Vector<IssmDouble>(vertices->NumberOfVertices());
++	Vector<IssmDouble> *vy=new Vector<IssmDouble>(vertices->NumberOfVertices());
++	Vector<IssmDouble> *vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
+ 
+ 	/*Update verices new geometry: */
+ 	for(int i=0;i<vertices->Size();i++){
+ 		Vertex* vertex=(Vertex*)vertices->GetObjectByOffset(i);
+-		vertex->UpdatePosition(vz,parameters,thickness,bed);
++		vertex->UpdatePosition(vx,vy,vz,parameters,surface,bed);
+ 	}
+ 
+ 	/*Assemble mesh velocity*/
++	vx->Assemble();
++	vy->Assemble();
+ 	vz->Assemble();
+ 
+ 	/*Update element inputs*/
++	InputUpdateFromVectorx(this,vx,VxMeshEnum,VertexPIdEnum);
++	InputUpdateFromVectorx(this,vy,VyMeshEnum,VertexPIdEnum);
+ 	InputUpdateFromVectorx(this,vz,VzMeshEnum,VertexPIdEnum);
+ 
+ 	/*Free ressources:*/
++	delete vx;
++	delete vy;
+ 	delete vz;
+ 	xDelete<IssmDouble>(bed);
+-	xDelete<IssmDouble>(thickness);
++	xDelete<IssmDouble>(surface);
+ 	return 1;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Vertex.h	(revision 16446)
++++ ../trunk-jpl/src/c/classes/Vertex.h	(revision 16447)
+@@ -20,6 +20,7 @@
+ 
+ 	public: 
+ 		bool       clone;
++		int        meshtype;
+ 		int        id;           // random index
+ 		int        sid;          // "serial" id (rank of this vertex if the dataset was on 1 cpu)
+ 		int        pid;          // "parallel" id
+@@ -48,7 +49,7 @@
+ 		IssmDouble GetX(void); 
+ 		IssmDouble GetY(void); 
+ 		IssmDouble GetZ(void); 
+-		void       UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed);
++		void       UpdatePosition(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed);
+ 		void       DistributePids(int* ppidcount);
+ 		void       OffsetPids(int pidcount);
+ 		void       ShowTruePids(int* borderpids);
Index: issm/oecreview/Archive/16133-16554/ISSM-16447-16448.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16447-16448.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16447-16448.diff	(revision 16556)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop	(revision 16447)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop	(revision 16448)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase	(revision 16447)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase	(revision 16448)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
Index: issm/oecreview/Archive/16133-16554/ISSM-16448-16449.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16448-16449.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16448-16449.diff	(revision 16556)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop	(revision 16448)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop	(revision 16449)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,2 ##
++.dirstamp
+ .deps
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase	(revision 16448)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase	(revision 16449)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,2 ##
++.dirstamp
+ .deps
Index: issm/oecreview/Archive/16133-16554/ISSM-16449-16450.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16449-16450.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16449-16450.diff	(revision 16556)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/SparseRow.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16449)
++++ ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16450)
+@@ -71,47 +71,37 @@
+ 			/*check numvalues: */
+ 			if(!numvalues)return;
+ 
+-			/*Figure out number of non-zero values ncols: */
+-			for(i=0;i<numvalues;i++)buffer[i]=0;
+-			
+-			ncols=0;
++			/*Go through cols and resolve duplicates: */
+ 			for(i=0;i<numvalues;i++){
+-				if(!buffer[cols[i]])ncols++;
+-				if(mods[i]==ADD_VAL){
+-					if(buffer[cols[i]]!=2)buffer[cols[i]]=1;
++				for(j=i+1;j<numvalues;j++){
++					if (cols[j]==cols[i]){
++						if (mods[j]==ADD_VAL){
++							vals[i]+=vals[j];
++						}
++						else vals[i]=vals[j];
++						cols[j]=-1;
++					}
++					/*Ensure that this value will not be used anymore: */
+ 				}
+-				else buffer[cols[i]]=2;
+ 			}
+ 
+-			/*Allocate:*/
++			/*Now go through cols once more, and retrieve only what we need: */
++			ncols=0;
++			for(i=0;i<numvalues;i++)if(cols[i]>=0)ncols++;
++
++			/*Allocate and fill: */
+ 			indices=xNew<int>(ncols); _assert_(indices);
+ 			values=xNewZeroInit<doubletype>(ncols);  _assert_(values);
+-
+-			/*Go through buffer and add values: */
++			
+ 			count=0;
+-			for(i=0;i<M;i++){
+-				if(buffer[i]==1){
+-					indices[count]=i;
+-					
+-					/*ADD_VALUE: chase all values with row index i*/
+-					for(j=0;j<numvalues;j++){
+-						if (cols[j]==i)values[count]+=vals[j];
+-					}
++			for(i=0;i<numvalues;i++){
++				if(cols[i]>=0){
++					indices[count]=cols[i];
++					values[count]=vals[i];
+ 					count++;
+ 				}
+-				else if(buffer[i]==2){
+-					indices[count]=i;
+-					
+-					/*INS_VALUE: chase first value with row index i*/
+-					for(j=0;j<numvalues;j++){
+-						if (cols[j]==i){
+-							values[count]=vals[j]; 
+-							break;
+-						}
+-					}
+-					count++;
+-				}
+ 			}
++		
+ 			if(count!=ncols)_error_("counter problem during set values operations");
+ 		} /*}}}*/
+ 		doubletype Norm(NormMode mode){ /*{{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16450-16451.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16450-16451.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16450-16451.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16450)
++++ ../trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 16451)
+@@ -125,8 +125,7 @@
+ 
+ 			if(m*N){
+ 				for(i=0;i<m;i++){
+-					SparseRow<doubletype>* sparserow=this->matrix[i];
+-					delete sparserow; this->matrix[i]=NULL;
++					delete this->matrix[i];
+ 				}
+ 				xDelete<SparseRow<doubletype>*>(this->matrix);
+ 			}
Index: issm/oecreview/Archive/16133-16554/ISSM-16451-16452.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16451-16452.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16451-16452.diff	(revision 16556)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/SparseRow.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16451)
++++ ../trunk-jpl/src/c/toolkits/issm/SparseRow.h	(revision 16452)
+@@ -12,9 +12,6 @@
+ template <class doubletype> 
+ class SparseRow{
+ 
+-	private:
+-		int*        buffer; //used during SetValues
+-
+ 	public:
+ 
+ 		int         M; //real size
+@@ -28,7 +25,6 @@
+ 			 ncols=0;
+ 			 indices=NULL;
+ 			 values=NULL;
+-			 buffer=NULL;
+ 		} /*}}}*/
+ 		SparseRow(int in_M){/*{{{*/
+ 			
+@@ -37,14 +33,12 @@
+ 			indices=NULL;
+ 			values=NULL;
+ 
+-			buffer=xNewZeroInit<int>(M);
+ 		} /*}}}*/
+ 		~SparseRow(){/*{{{*/
+ 			if(ncols){
+ 				xDelete<int>(indices);
+ 				xDelete<doubletype>(values);
+ 			}
+-			if(buffer)xDelete<int>(buffer);
+ 		} /*}}}*/
+ 
+ 		/*SparseRow specific routines*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16452-16453.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16452-16453.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16452-16453.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16452)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16453)
+@@ -3,7 +3,6 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',2);
+-md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+ 
+ %output
+ md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
Index: issm/oecreview/Archive/16133-16554/ISSM-16455-16456.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16455-16456.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16455-16456.diff	(revision 16556)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.m	(revision 16455)
++++ ../trunk-jpl/src/m/consistency/checkfield.m	(revision 16456)
+@@ -163,6 +163,20 @@
+ 	end
+ end
+ 
++%Check row of strings
++if getfieldvalue(options,'stringrow',0),
++	if size(field,1)~=1,
++		md = checkmessage(md,getfieldvalue(options,'message',...
++			['field ''' fieldname ''' should have only one row']));
++	end
++	for i=1:size(field,2),
++		if ~ischar(field{i}),
++			md = checkmessage(md,getfieldvalue(options,'message',...
++				['field ''' fieldname ''' values should a cell of chars']));
++		end
++	end
++end
++
+ %check file
+ if getfieldvalue(options,'file',0),
+ 	if ~exist(field,'file')
Index: issm/oecreview/Archive/16133-16554/ISSM-16456-16457.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16456-16457.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16456-16457.diff	(revision 16556)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16456)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16457)
+@@ -137,6 +137,12 @@
+ 		if not os.path.exists(field):
+ 			md = md.checkmessage("file provided in '%s': '%s' does not exist" % (fieldname,field))
+ 
++	#Check row of strings
++	if options.exist('stringrow'):
++		if not numpy.size(field,1)==1:
++			md = md.checkmessage(options.getfieldvalue('message',\
++					"field '%s' should have 1 row" %fieldname))
++
+ 	#Check forcings (size and times)
+ 	if options.getfieldvalue('forcing',0):
+ 		if   numpy.size(field,0)==md.mesh.numberofvertices:
Index: issm/oecreview/Archive/16133-16554/ISSM-16457-16458.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16457-16458.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16457-16458.diff	(revision 16556)
@@ -0,0 +1,113 @@
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16457)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16458)
+@@ -55,8 +55,7 @@
+ 		md = checkfield(md,'transient.isthermal','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'transient.isgia','numel',[1],'values',[0,1])
+-		if md.transient.requested_outputs:
+-			md = checkfield(md,'transient.requested_outputs','cell',1)
++		md = checkfield(md,'transient.requested_outputs','stringrow',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/steadystate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.m	(revision 16457)
++++ ../trunk-jpl/src/m/classes/steadystate.m	(revision 16458)
+@@ -33,6 +33,7 @@
+ 			if md.timestepping.time_step~=0,
+ 				md = checkmessage(md,['for a steadystate computation, timestepping.time_step must be zero.']);
+ 			end
++			md = checkfield(md,'steadystate.requested_outputs','stringrow',1);
+ 
+ 			if isnan(md.stressbalance.reltol),
+ 				md = checkmessage(md,['for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!']);
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 16457)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 16458)
+@@ -44,9 +44,7 @@
+ 			md = checkfield(md,'transient.isgroundingline','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isgia','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'transient.isdamage','numel',[1],'values',[0 1]);
+-			if ~isempty(md.transient.requested_outputs),
+-				md = checkfield(md,'transient.requested_outputs','size',[1 NaN]);
+-			end
++			md = checkfield(md,'transient.requested_outputs','stringrow',1);
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 16457)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 16458)
+@@ -64,8 +64,7 @@
+ 		md = checkfield(md,'masstransport.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'masstransport.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'masstransport.min_thickness','>',0)
+-		if md.masstransport.requested_outputs:
+-			md = checkfield(md,'masstransport.requested_outputs','cell',1)
++		md = checkfield(md,'masstransport.requested_outputs','stringrow',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16457)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16458)
+@@ -122,8 +122,7 @@
+ 		md = checkfield(md,'stressbalance.maxiter','size',[1],'>=',1)
+ 		md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices,6])
+ 		md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices,3])
+-		if md.stressbalance.requested_outputs:
+-			md = checkfield(md,'stressbalance.requested_outputs','cell',1);
++		md = checkfield(md,'stressbalance.requested_outputs','stringrow',1);
+ 
+ 		#singular solution
+ #		if ~any((~isnan(md.stressbalance.spcvx)+~isnan(md.stressbalance.spcvy))==2),
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16457)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16458)
+@@ -50,8 +50,7 @@
+ 		if numpy.isnan(md.stressbalance.reltol):
+ 			md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
+ 
+-		if md.steadystate.requested_outputs:
+-			md = checkfield(md,'steadystate.requested_outputs','cell',1)
++		md = checkfield(md,'steadystate.requested_outputs','stringrow',1)
+ 
+ 		return md
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16457)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16458)
+@@ -90,9 +90,7 @@
+ 			md = checkfield(md,'stressbalance.maxiter','size',[1 1],'>=',1);
+ 			md = checkfield(md,'stressbalance.referential','size',[md.mesh.numberofvertices 6]);
+ 			md = checkfield(md,'stressbalance.loadingforce','size',[md.mesh.numberofvertices 3]);
+-			if ~isempty(md.stressbalance.requested_outputs),
+-				md = checkfield(md,'stressbalance.requested_outputs','size',[1 NaN]);
+-			end
++			md = checkfield(md,'stressbalance.requested_outputs','stringrow',1);
+ 
+ 			%singular solution
+ 			if ~(any(~isnan(md.stressbalance.spcvx)) | any(~isnan(md.stressbalance.spcvy))),
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 16457)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 16458)
+@@ -83,9 +83,7 @@
+ 			md = checkfield(md,'masstransport.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
+ 			md = checkfield(md,'masstransport.stabilization','values',[0 1 2 3]);
+ 			md = checkfield(md,'masstransport.min_thickness','>',0);
+-			if ~isempty(md.masstransport.requested_outputs),
+-				md = checkfield(md,'masstransport.requested_outputs','size',[1 NaN]);
+-			end
++			md = checkfield(md,'masstransport.requested_outputs','stringrow',1);
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
Index: issm/oecreview/Archive/16133-16554/ISSM-16458-16459.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16458-16459.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16458-16459.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.m	(revision 16458)
++++ ../trunk-jpl/src/m/consistency/checkfield.m	(revision 16459)
+@@ -165,7 +165,7 @@
+ 
+ %Check row of strings
+ if getfieldvalue(options,'stringrow',0),
+-	if size(field,1)~=1,
++	if(size(field,1)~=1 & size(field,1)~=0),
+ 		md = checkmessage(md,getfieldvalue(options,'message',...
+ 			['field ''' fieldname ''' should have only one row']));
+ 	end
Index: issm/oecreview/Archive/16133-16554/ISSM-16459-16460.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16459-16460.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16459-16460.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16459)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16460)
+@@ -139,7 +139,7 @@
+ 
+ 	#Check row of strings
+ 	if options.exist('stringrow'):
+-		if not numpy.size(field,1)==1:
++		if not numpy.size(field,1)==1 and not numpy.size(field,1)==0:
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+ 					"field '%s' should have 1 row" %fieldname))
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16460-16461.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16460-16461.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16460-16461.diff	(revision 16556)
@@ -0,0 +1,689 @@
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16461)
+@@ -87,12 +87,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,VxEnum);
+-		InputToResultx(femmodel,VyEnum);
+-		InputToResultx(femmodel,VelEnum);
+-		InputToResultx(femmodel,PressureEnum);
+-		if(meshtype==Mesh3DEnum) InputToResultx(femmodel,VzEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
+ 
+ 	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16461)
+@@ -36,24 +36,21 @@
+ /*FUNCTION Results::Write{{{*/
+ void Results::Write(Parameters* parameters){
+ 
+-	int         i;
+-	FILE       *fid          = NULL;
+-	bool        io_gather=true;
++	FILE       *fid  = NULL;
++	bool        io_gather;
+ 
+ 	/*Recover file descriptor: */
+ 	parameters->FindParam(&fid,OutputFilePointerEnum);
+ 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+ 
+-	for(i=0;i<this->Size();i++){
++	for(int i=0;i<this->Size();i++){
+ 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+-
+-		/*write result to disk: */
+ 		result->WriteData(fid,io_gather);
+ 	}
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Results::Write{{{*/
++/*FUNCTION Results::AddResult(ElementResult* in_result){{{*/
+ int Results::AddResult(ElementResult* in_result){
+ 
+ 	/*First, go through dataset of inputs and check whether any input 
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16461)
+@@ -349,4 +349,82 @@
+ 	return DoubleMatExternalResultEnum;
+ } /*}}}*/
+ 
++/*Specifics instantiations for Vector*/
++template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
++	_error_("instanciation not correct");
++}
++/*}}}*/
++template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_value,int in_step, IssmDouble in_time){ /*{{{*/
++	id=in_id;
++	enum_type=in_enum_type;
++	M=0;
++	N=0;
++
++	step=in_step;
++	time=in_time;
++
++	value = in_value;
++} /*}}}*/
++template <> inline GenericExternalResult<Vector<IssmPDouble>*>::~GenericExternalResult(){ /*{{{*/
++	delete value;
++} /*}}}*/
++template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::Echo(void){ /*{{{*/
++
++	_printf_("GenericExternalResult<IssmPDouble*>:\n");
++	this->GenericEcho();
++	this->value->Echo();
++
++} /*}}}*/
++template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::DeepEcho(void){ /*{{{*/
++
++	this->Echo();
++
++} /*}}}*/
++template <> inline Object* GenericExternalResult<Vector<IssmPDouble>*>::copy(void){ /*{{{*/
++	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,this->enum_type,this->value,this->step,this->time);
++} /*}}}*/
++template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
++
++	char *name   = NULL;
++	int   length,rows,cols=1;
++
++	if(!io_gather){
++		_error_("not supported yet");
++	}
++
++	/*Serialize vector*/
++	IssmPDouble* serialvalues = this->value->ToMPISerial();
++	this->value->GetSize(&rows);
++
++	if(IssmComm::GetRank()==0){
++		/*First write enum: */
++		EnumToStringx(&name,this->enum_type);
++		length=(strlen(name)+1)*sizeof(char);
++		fwrite(&length,sizeof(int),1,fid);
++		fwrite(name,length,1,fid);
++		xDelete<char>(name);
++
++		/*Now write time and step: */
++		IssmPDouble passiveDouble=reCast<IssmPDouble>(time);
++		fwrite(&passiveDouble,sizeof(IssmPDouble),1,fid);
++		fwrite(&step,sizeof(int),1,fid);
++
++		/*writing a IssmDouble array, type is 3:*/
++		int type=3;
++		fwrite(&type,sizeof(int),1,fid);
++		fwrite(&rows,sizeof(int),1,fid);
++		fwrite(&cols,sizeof(int),1,fid);
++		fwrite(serialvalues,cols*rows*sizeof(IssmPDouble),1,fid);
++	}
++
++	/*Clean up*/
++	xDelete<IssmPDouble>(serialvalues);
++
++}
++/*}}}*/
++template <> inline int GenericExternalResult<Vector<IssmPDouble>*>::ObjectEnum(void){ /*{{{*/
++	return NoneEnum;
++	/*???? FIXME*/
++} /*}}}*/
++
+ #endif  /* _EXTERNAL_RESULTOBJECT_H */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16461)
+@@ -479,11 +479,10 @@
+ /*}}}*/
+ void FemModel::RequestedOutputsx(char** requested_outputs, int numoutputs){/*{{{*/
+ 
+-	char*    output_string;
+-	int      step;
+-	IssmDouble   time;
+-	IssmDouble   output_value;
+-	Element *element      = NULL;
++	char       *output_string;
++	int         step;
++	IssmDouble  time;
++	IssmDouble  output_value;
+ 
+ 	/*Get time and step*/
+ 	parameters->FindParam(&step,StepEnum);
+@@ -518,7 +517,7 @@
+ 			else{
+ 				/*create this output in the element inputs, and then transfer to results:*/
+ 				for(int j=0;j<elements->Size();j++){
+-					element=(Element*)elements->GetObjectByOffset(j);
++					Element* element=(Element*)elements->GetObjectByOffset(j);
+ 					element->RequestedOutput(StringToEnumx(output_string),step,time);
+ 				}
+ 			}
+@@ -526,6 +525,119 @@
+ 	}
+ }
+ /*}}}*/
++void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs){/*{{{*/
++
++	/*Intermediaries*/
++	bool        isvec;
++	int         step,output_enum;
++	IssmDouble  time;
++	IssmDouble  double_result;
++	char       *output_string = NULL;
++
++	/*recover results*/
++	Results* results = *presults;
++	if(!results) results = new Results();
++
++	/*Get time and step*/
++	parameters->FindParam(&step,StepEnum);
++	parameters->FindParam(&time,TimeEnum);
++
++	/*Go through all requested output*/
++	for(int i=0;i<numoutputs;i++){
++
++		output_string = requested_outputs[i];
++		output_enum   = StringToEnumx(output_string,false);
++		isvec         = false;
++
++		/*If string is not an enum, it is defined in output definitions*/
++		if(output_enum<0){
++			double_result = OutputDefinitionsResponsex(this,output_string);
++		}
++		else{
++			switch(output_enum){
++
++				#ifdef _HAVE_RESPONSES_
++				/*Scalar output*/
++				case IceVolumeEnum:                this->IceVolumex(&double_result);                break;
++				case IceVolumeAboveFloatationEnum: this->IceVolumeAboveFloatationx(&double_result); break;
++				case MinVelEnum:                   this->MinVelx(&double_result);                   break;
++				case MaxVelEnum:                   this->MaxVelx(&double_result);                   break;
++				case MinVxEnum:                    this->MinVxx(&double_result);                    break;
++				case MaxVxEnum:                    this->MaxVxx(&double_result);                    break;
++				case MaxAbsVxEnum:                 this->MaxAbsVxx(&double_result);                 break;
++				case MinVyEnum:                    this->MinVyx(&double_result);                    break;
++				case MaxVyEnum:                    this->MaxVyx(&double_result);                    break;
++				case MaxAbsVyEnum:                 this->MaxAbsVyx(&double_result);                 break;
++				case MinVzEnum:                    this->MinVzx(&double_result);                    break;
++				case MaxVzEnum:                    this->MaxVzx(&double_result);                    break;
++				case MaxAbsVzEnum:                 this->MaxAbsVzx(&double_result);                 break;
++				case MassFluxEnum:                 this->MassFluxx(&double_result);                 break;
++				case TotalSmbEnum:                 this->TotalSmbx(&double_result);                 break;
++
++			   /*Scalar control output*/
++				#ifdef _HAVE_CONTROL_
++				case SurfaceAbsVelMisfitEnum:       SurfaceAbsVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
++				case SurfaceRelVelMisfitEnum:       SurfaceRelVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
++				case SurfaceLogVelMisfitEnum:       SurfaceLogVelMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);        break;
++				case SurfaceLogVxVyMisfitEnum:      SurfaceLogVxVyMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);       break;
++				case SurfaceAverageVelMisfitEnum:   SurfaceAverageVelMisfitx(&double_result,this);                                                  break;
++				case ThicknessAbsMisfitEnum:        ThicknessAbsMisfitx(&double_result,elements,nodes,vertices,loads,materials,parameters);         break;
++				case ThicknessAbsGradientEnum:      this->ThicknessAbsGradientx(&double_result);                                                    break;
++				case ThicknessAlongGradientEnum:    ThicknessAlongGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);     break;
++				case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
++				case RheologyBbarAbsGradientEnum:   RheologyBbarAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters);    break;
++				case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters); break;
++				case BalancethicknessMisfitEnum:    BalancethicknessMisfitx(&double_result);                                                        break;
++				#endif
++
++			   /*Vector */
++				default:
++
++					/*Vector layout*/
++					int interpolation,size;
++
++					/*Get interpolation (and compute input if necessary)*/
++					for(int j=0;j<elements->Size();j++){
++						Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(j));
++						element->ResultInterpolation(&interpolation,output_enum);
++					}
++
++					/*Allocate vector depending on interpolation*/
++					switch(interpolation){
++						case P0Enum: size = this->elements->NumberOfElements(); break;
++						case P1Enum: size = this->vertices->NumberOfVertices(); break;
++						default:     _error_("Interpolation "<<EnumToStringx(interpolation)<<" not supported yet");
++
++					}
++					Vector<IssmPDouble> *vector_result = new Vector<IssmDouble>(this->vertices->NumberOfVertices());
++
++					/*Fill in vector*/
++					for(int j=0;j<elements->Size();j++){
++						Element* element=(Element*)elements->GetObjectByOffset(j);
++						element->ResultToVector(vector_result,output_enum);
++					}
++					vector_result->Assemble();
++
++					results->AddObject(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
++					isvec = true;
++					break;
++
++				#else
++				default: _error_("ISSM was not compiled with responses capabilities, exiting!");
++				#endif
++			}
++		}
++
++		/*Add result to Results*/
++		if(!isvec){
++			results->AddObject(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
++		}
++	}
++
++	/*Assign pointer and clean up*/
++	*presults = results;
++}
++/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16461)
+@@ -62,6 +62,8 @@
+ 		virtual void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes)=0;
+ 		virtual void   PatchFill(int* pcount, Patch* patch)=0;
+ 		virtual void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
++		virtual void   ResultInterpolation(int* pinterpolation,int output_enum)=0;
++		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
+ 		virtual void   DeleteResults(void)=0;
+ 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16461)
+@@ -2592,6 +2592,77 @@
+ 	delete gauss;
+ }
+ /*}}}*/
++/*FUNCTION Tria::ResultInterpolation{{{*/
++void Tria::ResultInterpolation(int* pinterpolation,int output_enum){
++
++	Input* input=this->inputs->GetInput(output_enum);
++
++	/*If this input is not already in Inputs, maybe it needs to be computed?*/
++	if(!input){
++		switch(output_enum){
++			case StressTensorxxEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorxyEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorxzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensoryyEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensoryzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorzzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			default:
++				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
++		}
++	}
++
++	/*Assign output pointer*/
++	*pinterpolation = input->GetResultInterpolation();
++
++}
++/*}}}*/
++/*FUNCTION Tria::ResultToVector{{{*/
++void Tria::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
++
++	Input* input=this->inputs->GetInput(output_enum);
++	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
++
++	switch(input->GetResultInterpolation()){
++		case P0Enum:
++			_error_("not implemented...");
++			break;
++		case P1Enum:
++
++			IssmDouble   values[NUMVERTICES];
++			IssmPDouble pvalues[NUMVERTICES]; 
++			int          sidlist[NUMVERTICES];
++
++			GetVertexSidList(&sidlist[0]);
++			GetInputListOnVertices(&values[0],output_enum);
++			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
++
++			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
++			break;
++		default:
++			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
++	}
++
++
++}
++/*}}}*/
+ /*FUNCTION Tria::RequestedOutput{{{*/
+ void Tria::RequestedOutput(int output_enum,int step,IssmDouble time){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16461)
+@@ -107,6 +107,8 @@
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+ 		void        RequestedOutput(int output_enum,int step,IssmDouble time);
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
++		void        ResultInterpolation(int* pinterpolation,int output_enum);
++		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+ 		void        PatchFill(int* pcount, Patch* patch);
+ 		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+ 		void        ResetCoordinateSystem(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16461)
+@@ -3034,6 +3034,81 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Penta::ResultInterpolation{{{*/
++void Penta::ResultInterpolation(int* pinterpolation,int output_enum){
++
++	Input* input=this->inputs->GetInput(output_enum);
++
++	/*If this input is not already in Inputs, maybe it needs to be computed?*/
++	if(!input){
++		switch(output_enum){
++			case ViscousHeatingEnum:
++				this->ViscousHeatingCreateInput();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorxxEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorxyEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorxzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensoryyEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensoryzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			case StressTensorzzEnum: 
++				this->ComputeStressTensor();
++				input=this->inputs->GetInput(output_enum);
++				break;
++			default:
++				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
++		}
++	}
++
++	/*Assign output pointer*/
++	*pinterpolation = input->GetResultInterpolation();
++
++}
++/*}}}*/
++/*FUNCTION Penta::ResultToVector{{{*/
++void Penta::ResultToVector(Vector<IssmPDouble>* vector,int output_enum){
++
++	Input* input=this->inputs->GetInput(output_enum);
++	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
++
++	switch(input->GetResultInterpolation()){
++		case P0Enum:
++			_error_("not implemented...");
++			break;
++		case P1Enum:
++
++			IssmDouble   values[NUMVERTICES];
++			IssmPDouble pvalues[NUMVERTICES]; 
++			int          sidlist[NUMVERTICES];
++
++			GetVertexSidList(&sidlist[0]);
++			GetInputListOnVertices(&values[0],output_enum);
++			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
++
++			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
++			break;
++		default:
++			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
++	}
++
++
++}
++/*}}}*/
+ /*FUNCTION Penta::ResetCoordinateSystem{{{*/
+ void  Penta::ResetCoordinateSystem(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16461)
+@@ -301,7 +301,7 @@
+ 	int numberofelements;
+ 
+ 	local_nelem=this->Size();
+-	ISSM_MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
++	ISSM_MPI_Allreduce((void*)&local_nelem,(void*)&numberofelements,1,ISSM_MPI_INT,ISSM_MPI_SUM,IssmComm::GetComm());
+ 
+ 	return numberofelements;
+ }
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16461)
+@@ -100,6 +100,8 @@
+ 		void   InputToResult(int enum_type,int step,IssmDouble time);
+ 		void   RequestedOutput(int output_enum,int step,IssmDouble time);
+ 		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
++		void   ResultInterpolation(int* pinterpolation,int output_enum);
++		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+ 		void   PatchFill(int* pcount, Patch* patch);
+ 		void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+ 		void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16461)
+@@ -118,6 +118,8 @@
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results){_error_("not implemented yet");};
+ 		void        PatchFill(int* pcount, Patch* patch){_error_("not implemented yet");};
+ 		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){_error_("not implemented yet");};
++		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
++		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
+ 		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
+ 		void	      SmbGradients(){_error_("not implemented yet");};
+ 		IssmDouble  SurfaceArea(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16461)
+@@ -38,6 +38,7 @@
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int  GetResultInterpolation(void){return P0Enum;};
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16461)
+@@ -39,6 +39,7 @@
+ 		Input* PointwiseMin(Input* inputB){_error_("not supported yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
+ 		ElementResult* SpawnResult(int step, IssmDouble time){_error_("not supported yet");};
++		int  GetResultInterpolation(void){_error_("not implemented");};
+ 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void   Configure(Parameters* parameters);
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16461)
+@@ -72,5 +72,6 @@
+ 		virtual Input* PointwiseMax(Input* inputmax)=0;
+ 		virtual Input* PointwiseMin(Input* inputmin)=0;
+ 		virtual ElementResult* SpawnResult(int step, IssmDouble time)=0;
++		virtual int GetResultInterpolation(void)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16461)
+@@ -89,6 +89,7 @@
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		ElementResult* SpawnGradient(int step, IssmDouble time);
++		int  GetResultInterpolation(void){_error_("not implemented yet");};
+ 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist);
+ 		void ScaleGradient(IssmDouble scale);
+ 		void SetGradient(Input* gradient_in);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16461)
+@@ -85,6 +85,7 @@
+ 		void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+ 		ElementResult* SpawnGradient(int step, IssmDouble time){_error_("not implemented yet");};
++		int GetResultInterpolation(void){_error_("not implemented yet");};
+ 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){_error_("not implemented yet");};
+ 		void ScaleGradient(IssmDouble scale){_error_("not implemented yet");};
+ 		void SetGradient(Input* gradient_in){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16461)
+@@ -123,7 +123,14 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION TriaInput::GetResultInterpolation{{{*/
++int  TriaInput::GetResultInterpolation(void){
+ 
++	return P1Enum;
++
++}
++/*}}}*/
++
+ /*Object functions*/
+ /*FUNCTION TriaInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
+ void TriaInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16461)
+@@ -39,6 +39,7 @@
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int  GetResultInterpolation(void){return P0Enum;};
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16461)
+@@ -39,6 +39,7 @@
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int  GetResultInterpolation(void){return P0Enum;};
+ 		void Configure(Parameters* parameters);
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16461)
+@@ -39,6 +39,7 @@
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int    GetResultInterpolation(void);
+ 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void   Configure(Parameters* parameters);
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16461)
+@@ -136,7 +136,14 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION PentaInput::GetResultInterpolation{{{*/
++int  PentaInput::GetResultInterpolation(void){
+ 
++	return P1Enum;
++
++}
++/*}}}*/
++
+ /*Object functions*/
+ /*FUNCTION PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
+ void PentaInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16461)
+@@ -39,6 +39,7 @@
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int  GetResultInterpolation(void);
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+ 		/*numerics*/
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16461)
+@@ -43,6 +43,7 @@
+ 		Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
++		int  GetResultInterpolation(void){_error_("not implemented");};
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+ 		/*numerics: {{{*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16460)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16461)
+@@ -81,6 +81,7 @@
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
++		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
+ 		void RequestedOutputsx(char** requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
Index: issm/oecreview/Archive/16133-16554/ISSM-16461-16462.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16461-16462.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16461-16462.diff	(revision 16556)
@@ -0,0 +1,160 @@
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 16462)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorxy'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.py	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3103.py	(revision 16462)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=['StressTensor']
++md.stressbalance.requested_outputs=['default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
+ md.toolkits.DefaultAnalysis=issmmumpssolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 16462)
+@@ -5,7 +5,7 @@
+ md.cluster=generic('name',oshostname(),'np',2);
+ 
+ %output
+-md.stressbalance.requested_outputs={'StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6'};
+ md.outputdefinition.definitions={...
+ 	massfluxatgate('MassFlux1',['../Exp/MassFlux1.exp']),...
+ 	massfluxatgate('MassFlux2',['../Exp/MassFlux2.exp']),...
+Index: ../trunk-jpl/test/NightlyRun/test3101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3101.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3101.m	(revision 16462)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorxy'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmmumpssolver();
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 16462)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',1);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmgslsolver();
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 16462)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'SSA','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.stressbalance.requested_outputs=['StressTensor']
++md.stressbalance.requested_outputs=['default','StressTensorxx','StressTensoryy','StressTensorxy']
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3021.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3021.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3021.m	(revision 16462)
+@@ -3,10 +3,10 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'SSA','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'StressTensorxx','StressTensoryy','StressTensorxy'};
+ md.autodiff.isautodiff=false;
+ md.toolkits.DefaultAnalysis=issmsolver();
+-md.verbose=verbose('1111111');
++md.verbose=verbose('all');
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 16462)
+@@ -15,7 +15,7 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+ #outputs
+-md.stressbalance.requested_outputs=['StressTensor','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
++md.stressbalance.requested_outputs=['default','StressTensorxx','StressTensoryy','StressTensorxy','MassFlux1','MassFlux2','MassFlux3','MassFlux4','MassFlux5','MassFlux6']
+ md.outputdefinition.definitions=[
+ 		massfluxatgate('MassFlux1','../Exp/MassFlux1.exp'),
+ 		massfluxatgate('MassFlux2','../Exp/MassFlux2.exp'),
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 16462)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ md=solve(md,StressbalanceSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3103.m	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3103.m	(revision 16462)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'HO','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.stressbalance.requested_outputs={'StressTensor'};
++md.stressbalance.requested_outputs={'default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz'};
+ md.autodiff.isautodiff=true;
+ md.toolkits.DefaultAnalysis=issmmumpssolver();
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 16462)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',1)
+-md.stressbalance.requested_outputs=['StressTensor']
++md.stressbalance.requested_outputs=['default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
+ md.toolkits.DefaultAnalysis=issmgslsolver()
+ md.autodiff.isautodiff=True
+ md=solve(md,StressbalanceSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 16461)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 16462)
+@@ -13,7 +13,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.stressbalance.requested_outputs=['StressTensor']
++md.stressbalance.requested_outputs=['default','StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
+ md=solve(md,StressbalanceSolutionEnum())
+ 
+ #Fields and tolerances to track changes
Index: issm/oecreview/Archive/16133-16554/ISSM-16462-16463.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16462-16463.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16462-16463.diff	(revision 16556)
@@ -0,0 +1,110 @@
+Index: ../trunk-jpl/src/m/classes/stressbalance.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16462)
++++ ../trunk-jpl/src/m/classes/stressbalance.py	(revision 16463)
+@@ -5,6 +5,7 @@
+ from EnumDefinitions import *
+ from checkfield import *
+ from WriteData import *
++from MatlabFuncs import *
+ 
+ class stressbalance(object):
+ 	"""
+@@ -101,8 +102,24 @@
+ 		#parameter is often used.
+ 		self.rift_penalty_lock=10
+ 
++		#output default:
++		self.requested_outputs=['default']
++
+ 		return self
+ 	#}}}
++	def defaultoutputs(self,md): # {{{
++
++		if strcmp(md.mesh.meshtype(),'3D'):
++			list = ['Vx','Vy','Vz','Vel','Pressure']
++		elif strcmp(md.mesh.meshtype(),'2Dhorizontal'):
++			list = ['Vx','Vy','Vel','Pressure']
++		elif strcmp(md.mesh.meshtype(),'2Dvertical'):
++			list = ['Vx','Vy','Vel','Pressure']
++		else:
++			raise TypeError('mesh type not supported yet');
++		return list
++
++	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		#Early return
+@@ -170,8 +187,16 @@
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
+ 		WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
+-		WriteData(fid,'object',self,'class','stressbalance','fieldname','requested_outputs','format','StringArray')
++
+ 		WriteData(fid,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
+ 		WriteData(fid,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/stressbalance.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16462)
++++ ../trunk-jpl/src/m/classes/stressbalance.m	(revision 16463)
+@@ -72,6 +72,9 @@
+ 			 %parameter is often used.
+ 			 obj.rift_penalty_lock=10;
+ 
++			 %output default:
++			 obj.requested_outputs={'default'};
++
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -116,6 +119,19 @@
+ 				md = checkfield(md,'stressbalance.FSreconditioning','>',0);
+ 			end
+ 		end % }}}
++		function list=defaultoutputs(self,md) % {{{
++
++			if strcmp(meshtype(md.mesh),'3D'),
++				list = {'Vx','Vy','Vz','Vel','Pressure'};
++			elseif strcmp(meshtype(md.mesh),'2Dhorizontal'),
++				list = {'Vx','Vy','Vel','Pressure'};
++			elseif strcmp(meshtype(md.mesh),'2Dvertical'),
++				list = {'Vx','Vy','Vel','Pressure'};
++			else
++				error('mesh type not supported yet');
++			end
++
++		end % }}}
+ 		function disp(obj) % {{{
+ 
+ 			disp(sprintf('   StressBalance solution parameters:'));
+@@ -169,10 +185,19 @@
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
+ 			WriteData(fid,'object',obj,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
+-			WriteData(fid,'object',obj,'class','stressbalance','fieldname','requested_outputs','format','StringArray');
++
+ 			WriteData(fid,'data',obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
+ 			WriteData(fid,'data',obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
++
++			%process requested outputs
++			outputs = obj.requested_outputs;
++			pos  = find(ismember(outputs,'default'));
++			if ~isempty(pos),
++				outputs(pos) = [];                         %remove 'default' from outputs
++				outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
++			end
++			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray');
+ 		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16463-16464.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16463-16464.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16463-16464.diff	(revision 16556)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16463)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16464)
+@@ -77,10 +77,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,ThicknessEnum);
+-		InputToResultx(femmodel,BedEnum);
+-		InputToResultx(femmodel,SurfaceEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
+ 
+ 	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
+Index: ../trunk-jpl/src/m/classes/masstransport.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.py	(revision 16463)
++++ ../trunk-jpl/src/m/classes/masstransport.py	(revision 16464)
+@@ -37,6 +37,11 @@
+ 
+ 		return string
+ 		#}}}
++	def defaultoutputs(self,md): # {{{
++
++		return ['Thickness','Surface','Bed']
++
++	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
+@@ -51,6 +56,8 @@
+ 		#Hydrostatic adjustment
+ 		self.hydrostatic_adjustment='Absolute'
+ 
++		#default output
++		self.requested_outputs=['default']
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -76,5 +83,12 @@
+ 		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray');
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 16463)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 16464)
+@@ -59,6 +59,11 @@
+ 					error('constructor not supported');
+ 			end
+ 		end % }}}
++		function list=defaultoutputs(self,md) % {{{
++
++			list = {'Thickness','Surface','Bed'};
++
++		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+ 			%Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
+@@ -72,6 +77,9 @@
+ 
+ 			%Hydrostatic adjustment
+ 			obj.hydrostatic_adjustment='Absolute';
++
++			%default output
++			obj.requested_outputs={'default'};
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -108,7 +116,15 @@
+ 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
++			
++			%process requested outputs
++			outputs = obj.requested_outputs;
++			pos  = find(ismember(outputs,'default'));
++			if ~isempty(pos),
++				outputs(pos) = [];                         %remove 'default' from outputs
++				outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
++			end
++			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray');
+ 		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16464-16465.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16464-16465.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16464-16465.diff	(revision 16556)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/consistency/checkfield.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16464)
++++ ../trunk-jpl/src/m/consistency/checkfield.py	(revision 16465)
+@@ -139,9 +139,9 @@
+ 
+ 	#Check row of strings
+ 	if options.exist('stringrow'):
+-		if not numpy.size(field,1)==1 and not numpy.size(field,1)==0:
++		if not isinstance(field,list):
+ 			md = md.checkmessage(options.getfieldvalue('message',\
+-					"field '%s' should have 1 row" %fieldname))
++					"field '%s' should be a list" %fieldname))
+ 
+ 	#Check forcings (size and times)
+ 	if options.getfieldvalue('forcing',0):
Index: issm/oecreview/Archive/16133-16554/ISSM-16465-16466.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16465-16466.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16465-16466.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 16465)
++++ ../trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp	(revision 16466)
+@@ -40,6 +40,7 @@
+ 		upper_row=upper_row+alllocalsizes[i];
+ 		for(j=lower_row;j<upper_row;j++)RowRank[j]=i;
+ 	}
++	xDelete<int>(alllocalsizes);
+ 
+ 	return RowRank;
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16466-16467.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16466-16467.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16466-16467.diff	(revision 16556)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16466)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16467)
+@@ -157,6 +157,9 @@
+ 		// the solver wrapper makes sure the matrix and the right hand side don't change
+ 		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
+ 		parameters->AddObject(theAdolcEDF_p);
++
++		/*Free ressources: */
++		xDelete<char>(options);
+ 		/*}}}*/
+ 	#endif
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16467-16468.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16467-16468.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16467-16468.diff	(revision 16556)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16467)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16468)
+@@ -609,7 +609,7 @@
+ 						default:     _error_("Interpolation "<<EnumToStringx(interpolation)<<" not supported yet");
+ 
+ 					}
+-					Vector<IssmPDouble> *vector_result = new Vector<IssmDouble>(this->vertices->NumberOfVertices());
++					Vector<IssmPDouble> *vector_result = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
+ 
+ 					/*Fill in vector*/
+ 					for(int j=0;j<elements->Size();j++){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16467)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16468)
+@@ -2644,7 +2644,7 @@
+ 		case P0Enum:
+ 			_error_("not implemented...");
+ 			break;
+-		case P1Enum:
++		case P1Enum:{
+ 
+ 			IssmDouble   values[NUMVERTICES];
+ 			IssmPDouble pvalues[NUMVERTICES]; 
+@@ -2654,8 +2654,9 @@
+ 			GetInputListOnVertices(&values[0],output_enum);
+ 			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
+ 
+-			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
++			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],INS_VAL);
+ 			break;
++					}
+ 		default:
+ 			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
+ 	}
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16467)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16468)
+@@ -3090,7 +3090,7 @@
+ 		case P0Enum:
+ 			_error_("not implemented...");
+ 			break;
+-		case P1Enum:
++		case P1Enum:{
+ 
+ 			IssmDouble   values[NUMVERTICES];
+ 			IssmPDouble pvalues[NUMVERTICES]; 
+@@ -3100,8 +3100,9 @@
+ 			GetInputListOnVertices(&values[0],output_enum);
+ 			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
+ 
+-			vector->SetValues(NUMVERTICES,sidlist,values,INS_VAL);
++			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],INS_VAL);
+ 			break;
++					}
+ 		default:
+ 			_error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet");
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16468-16469.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16468-16469.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16468-16469.diff	(revision 16556)
@@ -0,0 +1,136 @@
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 16468)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 16469)
+@@ -45,7 +45,7 @@
+ 	if(my_rank==0){
+ 		parameters->FindParam(&solutiontype,SolutionTypeEnum);
+ 		EnumToStringx(&solutiontypestring,solutiontype);
+-		results->AddObject(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
++		results->AddResult(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
+ 		xDelete<char>(solutiontypestring);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16468)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16469)
+@@ -57,14 +57,13 @@
+ 	 * with the same name is already in. If so, erase the corresponding 
+ 	 * object before adding this new one: */
+ 	vector<Object*>::iterator object;
+-	ElementResult* result=NULL;
+ 
+ 	/*In debugging mode, check that the input is not a NULL pointer*/
+ 	_assert_(in_result);
+ 
+ 	for(object=objects.begin() ; object<objects.end(); object++){
+ 
+-		result=dynamic_cast<ElementResult*>(*object);
++		ElementResult* result=dynamic_cast<ElementResult*>(*object);
+ 
+ 		if(result->InstanceEnum()==in_result->InstanceEnum()){
+ 			if(result->GetStep()==in_result->GetStep()){
+@@ -78,3 +77,45 @@
+ 	return 1;
+ }
+ /*}}}*/
++/*FUNCTION Results::AddResult(ExternalResult* in_result){{{*/
++int Results::AddResult(ExternalResult* in_result){
++
++	/*First, go through dataset of inputs and check whether any input 
++	 * with the same name is already in. If so, erase the corresponding 
++	 * object before adding this new one: */
++
++	/*In debugging mode, check that the input is not a NULL pointer*/
++	_assert_(in_result);
++
++	for(int i=0;i<this->Size();i++){
++		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
++
++		if(result->InstanceEnum()==in_result->InstanceEnum()){
++			if(result->GetStep()==in_result->GetStep()){
++				this->DeleteObject(result);
++				break;
++			}
++		}
++	}
++	this->AddObject(in_result);
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION Results::DeleteResult(ExternalResult* in_result){{{*/
++int Results::DeleteResult(int result_enum,int result_step){
++
++	for(int i=0;i<this->Size();i++){
++		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
++
++		if(result->InstanceEnum()==result_enum){
++			if(result->GetStep()==result_step){
++				this->DeleteObject(result);
++				break;
++			}
++		}
++	}
++
++	return 1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16468)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16469)
+@@ -370,7 +370,7 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::Echo(void){ /*{{{*/
+ 
+-	_printf_("GenericExternalResult<IssmPDouble*>:\n");
++	_printf_("GenericExternalResult<Vector<IssmPDouble>*>:\n");
+ 	this->GenericEcho();
+ 	this->value->Echo();
+ 
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 16468)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 16469)
+@@ -6,6 +6,7 @@
+ /*forward declarations */
+ class Parameters;
+ class ElementResult;
++class ExternalResult;
+ 
+ /*!\brief Declaration of Results class.
+  *
+@@ -21,6 +22,8 @@
+ 
+ 		/*Mehthos*/
+ 		int AddResult(ElementResult* result);
++		int AddResult(ExternalResult* result);
++		int DeleteResult(int result_enum,int result_step);
+ 		void Write(Parameters* parameters);
+ };
+ #endif //ifndef _RESULTS_H_
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16468)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16469)
+@@ -225,15 +225,16 @@
+ 
+ 			/*Serialize and add to results*/
+ 			vector_serial=vector->ToMPISerial();
++			results->DeleteResult(resultsenums[i],resultssteps[i]);
+ 			if(my_rank==0){
+ 				/*No need to add this vector for all cpus*/
+ 				#ifdef _HAVE_ADOLC_
+ 				IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+ 				for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
+-				results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
++				results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
+ 				xDelete<IssmPDouble>(vector_serial_passive);
+ 				#else
+-				results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
++				results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
+ 				#endif
+ 			}
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16469-16470.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16469-16470.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16469-16470.diff	(revision 16556)
@@ -0,0 +1,2830 @@
+Index: ../trunk-jpl/src/c/analyses/enthalpy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 16470)
+@@ -1,35 +0,0 @@
+-/*!\file: enthalpy_core.cpp
+- * \brief: core of the enthalpy solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../modules/modules.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void enthalpy_core(FemModel* femmodel){
+-
+-	/*intermediary*/
+-	bool   save_results;
+-
+-	//first recover parameters common to all solutions
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	if(VerboseSolution()) _printf0_("   computing enthalpy\n");
+-	femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum);
+-	solutionsequence_nonlinear(femmodel,true);
+-
+-	/*transfer enthalpy to enthalpy picard for the next step: */
+-	InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,TemperatureEnum);
+-		InputToResultx(femmodel,EnthalpyEnum);
+-		InputToResultx(femmodel,WaterfractionEnum);
+-		InputToResultx(femmodel,WatercolumnEnum);
+-		InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16470)
+@@ -43,13 +43,6 @@
+ 			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+ 			#endif
+ 			break;
+-		case EnthalpySolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&enthalpy_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+ 		case BalancethicknessSolutionEnum:
+ 			#ifdef _HAVE_BALANCED_
+ 			solutioncore=&balancethickness_core;
+Index: ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16470)
+@@ -13,9 +13,11 @@
+ 
+ 	/*parameters: */
+ 	bool save_results;
++	int  meshtype;
+ 
+ 	/*Recover some parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 
+ 	if(VerboseSolution()) _printf0_("computing slope...\n");
+ 
+@@ -27,8 +29,14 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("saving results:\n");
+-		InputToResultx(femmodel,SurfaceSlopeXEnum);
+-		InputToResultx(femmodel,SurfaceSlopeYEnum);
++		if(meshtype!=Mesh2DverticalEnum){
++			const char* outputs [] = {"SurfaceSlopeX"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++		}
++		else{
++			const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++		}
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16470)
+@@ -12,14 +12,18 @@
+ void thermal_core(FemModel* femmodel){
+ 
+ 	/*intermediary*/
+-	bool   save_results;
+-	bool   dakota_analysis  = false;
+-	int    solution_type;
++	bool   save_results,isenthalpy;
++	bool   dakota_analysis;
++	int    solution_type,numoutputs;
++	char** requested_outputs = NULL;
+ 
+-	//first recover parameters common to all solutions
++	/*first recover parameters common to all solutions*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	femmodel->parameters->FindParam(&numoutputs,ThermalNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,ThermalRequestedOutputsEnum);
+ 
+ 	if(dakota_analysis && solution_type!=TransientSolutionEnum){
+ 		InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
+@@ -32,20 +36,33 @@
+ 		ResetConstraintsx(femmodel);
+ 	}
+ 
+-	if(VerboseSolution()) _printf0_("   setting basal Dirichlet boundary conditions\n");
+-	femmodel->UpdateBasalConstraintsEnthalpyx();
++	if(isenthalpy){
+ 
+-	if(VerboseSolution()) _printf0_("   computing temperatures\n");
+-	femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-	solutionsequence_thermal_nonlinear(femmodel);
++		if(VerboseSolution()) _printf0_("   computing enthalpy\n");
++		femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum);
++		solutionsequence_nonlinear(femmodel,true);
+ 
+-	if(VerboseSolution()) _printf0_("   computing melting\n");
+-	femmodel->SetCurrentConfiguration(MeltingAnalysisEnum);
+-	solutionsequence_linear(femmodel);
++		/*transfer enthalpy to enthalpy picard for the next step: */
++		InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
+ 
++		/*Post process*/
++		PostprocessingEnthalpyx(femmodel);
++	}
++	else{
++		if(VerboseSolution()) _printf0_("   setting basal Dirichlet boundary conditions\n");
++		femmodel->UpdateBasalConstraintsEnthalpyx();
++
++		if(VerboseSolution()) _printf0_("   computing temperatures\n");
++		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
++		solutionsequence_thermal_nonlinear(femmodel);
++
++		if(VerboseSolution()) _printf0_("   computing melting\n");
++		femmodel->SetCurrentConfiguration(MeltingAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,TemperatureEnum);
+-		InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16470)
+@@ -25,7 +25,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,ThicknessEnum);
++		const char* outputs [] = {"Thickness"};
++		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16470)
+@@ -21,7 +21,7 @@
+ 	/*parameters: */
+ 	int    i;
+ 	IssmDouble starttime,finaltime,dt,yts;
+-	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isenthalpy,isdelta18o,isgia;
++	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isdelta18o,isgia;
+ 	bool   save_results,dakota_analysis;
+ 	bool   time_adapt=false;
+ 	int    output_frequency;
+@@ -48,7 +48,6 @@
+ 	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
+ 	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
+ 	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+-	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+ 	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+@@ -115,13 +114,7 @@
+ 		if(isthermal && meshtype==Mesh3DEnum){
+ 			if(VerboseSolution()) _printf0_("   computing temperatures\n");
+ 			#ifdef _HAVE_THERMAL_
+-			if(isenthalpy==0){
+-				thermal_core(femmodel);
+-			}
+-			else{
+-				enthalpy_core(femmodel);
+-				PostprocessingEnthalpyx(femmodel);
+-			}
++			thermal_core(femmodel);
+ 			#else
+ 			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+ 			#endif
+@@ -151,9 +144,8 @@
+ 			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
+ 			#endif
+ 			if(save_results){
+-				InputToResultx(femmodel,SurfaceEnum);
+-				InputToResultx(femmodel,BedEnum);
+-				InputToResultx(femmodel,MaskGroundediceLevelsetEnum);
++				const char* outputs [] = {"Surface","Bed","MaskGroundediceLevelset"};
++				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
+ 			}
+ 		}
+ 		if(isgia){
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16470)
+@@ -31,8 +31,8 @@
+ 	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+ 
+ 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16470)
+@@ -67,9 +67,8 @@
+ 
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+-				InputToResultx(femmodel,WatercolumnEnum);
+-				InputToResultx(femmodel,HydrologyWaterVxEnum);
+-				InputToResultx(femmodel,HydrologyWaterVyEnum);
++				const char* outputs [] = {"Watercolumn","HydrologyWaterVx","HydrologyWaterVy"};
++				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
+ 
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+@@ -91,9 +90,13 @@
+ 				InputToResultx(femmodel,SedimentHeadEnum);
+ 				InputToResultx(femmodel,SedimentHeadResidualEnum);
+ 				if(isefficientlayer){
+-					InputToResultx(femmodel,EplHeadEnum);
+-					InputToResultx(femmodel,HydrologydcMaskEplactiveEnum);
++					const char* outputs [] = {"SedimentHead","SedimentHeadResidual","EplHead","HydrologydcMaskEplactive"};
++					femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],4);
+ 				}
++				else{
++					const char* outputs [] = {"SedimentHead","SedimentHeadResidual"};
++					femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++				}
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+ 				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16470)
+@@ -32,15 +32,15 @@
+ 	int         maxiter;
+ 	IssmDouble  reltol;
+ 	int         numoutputs        = 0;
+-	char**      requested_outputs = NULL;
++	char** requested_outputs = NULL;
+ 
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum);
+-	femmodel->parameters->FindParam(&numoutputs,SteadystateNumRequestedOutputsEnum);
+ 	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+ 	femmodel->parameters->FindParam(&reltol,SteadystateReltolEnum);
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	femmodel->parameters->FindParam(&numoutputs,SteadystateNumRequestedOutputsEnum);
+ 	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,SteadystateRequestedOutputsEnum);
+ 
+ 	/*intialize counters: */
+@@ -50,15 +50,9 @@
+ 
+ 		if(VerboseSolution()) _printf0_("   computing temperature and velocity for step: " << step << "\n");
+ 		#ifdef _HAVE_THERMAL_
+-		if(isenthalpy==0){
+-			thermal_core(femmodel);
+-			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-			GetSolutionFromInputsx(&tg,femmodel);
+-		}
+-		else{
+-			enthalpy_core(femmodel);
+-			GetSolutionFromInputsx(&tg,femmodel);
+-		}
++		thermal_core(femmodel);
++		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);/*Could be MeltingAnalysis...*/
++		GetSolutionFromInputsx(&tg,femmodel);
+ 		#else
+ 		_error_("ISSM was not compiled with thermal capabilities. Exiting");
+ 		#endif
+@@ -84,18 +78,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,VxEnum);
+-		InputToResultx(femmodel,VyEnum);
+-		InputToResultx(femmodel,VzEnum);
+-		InputToResultx(femmodel,VelEnum);
+-		InputToResultx(femmodel,PressureEnum);
+-		InputToResultx(femmodel,TemperatureEnum);
+-		if(isenthalpy)  InputToResultx(femmodel,WaterfractionEnum);
+-		if(isenthalpy)  InputToResultx(femmodel,EnthalpyEnum);
+-        	if(isenthalpy)  InputToResultx(femmodel,WatercolumnEnum);
+-		//if(!isenthalpy) InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+-        	InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
+-		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 	}
+ 
+ 	/*Free ressources:*/
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16470)
+@@ -31,8 +31,14 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,BedSlopeXEnum);
+-		if(meshtype!=Mesh2DverticalEnum) InputToResultx(femmodel,BedSlopeYEnum);
++		if(meshtype!=Mesh2DverticalEnum){
++			const char* outputs [] = {"BedSlopeX"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++		}
++		else{
++			const char* outputs [] = {"BedSlopeX","BedSlopeY"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++		}
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16470)
+@@ -34,13 +34,15 @@
+ 	solutionsequence_adjoint_linear(femmodel);
+ 
+ 	/*Save results*/
+-	if(save_results){
++	if(save_results || true){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,AdjointxEnum);
+-		InputToResultx(femmodel,AdjointyEnum);
+ 		if (isFS){
+-			InputToResultx(femmodel,AdjointzEnum);
+-			InputToResultx(femmodel,AdjointpEnum);
++			const char* outputs [] = {"Adjointx","Adjointy","Adjointz","Adjointp"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],4);
+ 		}
++		else{
++			const char* outputs [] = {"Adjointx","Adjointy"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16470)
+@@ -48,18 +48,13 @@
+ 			break;
+ 
+ 		case ThermalSolutionEnum:
+-			numanalyses=2;
++			numanalyses=3;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=ThermalAnalysisEnum;
+ 			analyses[1]=MeltingAnalysisEnum;
++			analyses[2]=EnthalpyAnalysisEnum;
+ 			break;
+ 
+-		case EnthalpySolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=EnthalpyAnalysisEnum;
+-			break;
+-
+ 		case HydrologySolutionEnum:
+ 			numanalyses=5;
+ 			analyses=xNew<int>(numanalyses);
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16470)
+@@ -30,9 +30,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,SurfaceSlopeXEnum);
+-		InputToResultx(femmodel,SurfaceSlopeYEnum);
+-		InputToResultx(femmodel,VelEnum);
++		const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY","Vel"};
++		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16470)
+@@ -33,6 +33,7 @@
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,AdjointEnum);
++		const char* outputs [] = {"Adjoint"};
++		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16469)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16470)
+@@ -22,7 +22,6 @@
+ void stressbalance_core(FemModel* femmodel);
+ void hydrology_core(FemModel* femmodel);
+ void thermal_core(FemModel* femmodel);
+-void enthalpy_core(FemModel* femmodel);
+ void surfaceslope_core(FemModel* femmodel);
+ void bedslope_core(FemModel* femmodel);
+ void meshdeformation_core(FemModel* femmodel);
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16469)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16470)
+@@ -49,10 +49,10 @@
+ 	StressbalanceAbstolEnum,
+ 	StressbalanceIsnewtonEnum,
+ 	StressbalanceMaxiterEnum,
+-	StressbalanceNumRequestedOutputsEnum,
+ 	StressbalancePenaltyFactorEnum,
+ 	StressbalanceReferentialEnum,
+ 	StressbalanceReltolEnum,
++	StressbalanceNumRequestedOutputsEnum,
+ 	StressbalanceRequestedOutputsEnum,
+ 	StressbalanceRestolEnum,
+ 	StressbalanceRiftPenaltyLockEnum,
+@@ -227,7 +227,6 @@
+ 	SettingsIoGatherEnum,
+ 	SettingsLowmemEnum,
+ 	SettingsOutputFrequencyEnum,
+-	SettingsResultsAsPatchesEnum,
+ 	SettingsWaitonlockEnum,
+ 	SurfaceforcingsDelta18oEnum,
+ 	SurfaceforcingsDelta18oSurfaceEnum,
+@@ -257,13 +256,15 @@
+ 	SurfaceforcingsBPosEnum,
+ 	SurfaceforcingsBNegEnum,
+ 	ThermalIsenthalpyEnum,
+-    	ThermalIsdynamicbasalspcEnum,
++	ThermalIsdynamicbasalspcEnum,
+ 	ThermalMaxiterEnum,
+ 	ThermalPenaltyFactorEnum,
+ 	ThermalPenaltyLockEnum,
+ 	ThermalPenaltyThresholdEnum,
+ 	ThermalSpctemperatureEnum,
+ 	ThermalStabilizationEnum,
++	ThermalNumRequestedOutputsEnum,
++	ThermalRequestedOutputsEnum,
+ 	GiaMantleViscosityEnum,
+ 	GiaLithosphereThicknessEnum,
+ 	ThicknessEnum,
+@@ -307,7 +308,6 @@
+ 	StressbalanceSolutionEnum,
+ 	StressbalanceVerticalAnalysisEnum,
+ 	EnthalpyAnalysisEnum,
+-	EnthalpySolutionEnum,
+ 	FlaimAnalysisEnum,
+ 	FlaimSolutionEnum,
+ 	HydrologyShreveAnalysisEnum,
+@@ -538,9 +538,6 @@
+ 	DoubleMatExternalResultEnum,
+ 	IntExternalResultEnum,
+ 	JEnum,
+-	PatchEnum,
+-	PatchNodesEnum,
+-	PatchVerticesEnum,
+ 	PentaP1ElementResultEnum,
+ 	StringExternalResultEnum,
+ 	StepEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16470)
+@@ -57,10 +57,10 @@
+ 		case StressbalanceAbstolEnum : return "StressbalanceAbstol";
+ 		case StressbalanceIsnewtonEnum : return "StressbalanceIsnewton";
+ 		case StressbalanceMaxiterEnum : return "StressbalanceMaxiter";
+-		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
+ 		case StressbalancePenaltyFactorEnum : return "StressbalancePenaltyFactor";
+ 		case StressbalanceReferentialEnum : return "StressbalanceReferential";
+ 		case StressbalanceReltolEnum : return "StressbalanceReltol";
++		case StressbalanceNumRequestedOutputsEnum : return "StressbalanceNumRequestedOutputs";
+ 		case StressbalanceRequestedOutputsEnum : return "StressbalanceRequestedOutputs";
+ 		case StressbalanceRestolEnum : return "StressbalanceRestol";
+ 		case StressbalanceRiftPenaltyLockEnum : return "StressbalanceRiftPenaltyLock";
+@@ -235,7 +235,6 @@
+ 		case SettingsIoGatherEnum : return "SettingsIoGather";
+ 		case SettingsLowmemEnum : return "SettingsLowmem";
+ 		case SettingsOutputFrequencyEnum : return "SettingsOutputFrequency";
+-		case SettingsResultsAsPatchesEnum : return "SettingsResultsAsPatches";
+ 		case SettingsWaitonlockEnum : return "SettingsWaitonlock";
+ 		case SurfaceforcingsDelta18oEnum : return "SurfaceforcingsDelta18o";
+ 		case SurfaceforcingsDelta18oSurfaceEnum : return "SurfaceforcingsDelta18oSurface";
+@@ -272,6 +271,8 @@
+ 		case ThermalPenaltyThresholdEnum : return "ThermalPenaltyThreshold";
+ 		case ThermalSpctemperatureEnum : return "ThermalSpctemperature";
+ 		case ThermalStabilizationEnum : return "ThermalStabilization";
++		case ThermalNumRequestedOutputsEnum : return "ThermalNumRequestedOutputs";
++		case ThermalRequestedOutputsEnum : return "ThermalRequestedOutputs";
+ 		case GiaMantleViscosityEnum : return "GiaMantleViscosity";
+ 		case GiaLithosphereThicknessEnum : return "GiaLithosphereThickness";
+ 		case ThicknessEnum : return "Thickness";
+@@ -313,7 +314,6 @@
+ 		case StressbalanceSolutionEnum : return "StressbalanceSolution";
+ 		case StressbalanceVerticalAnalysisEnum : return "StressbalanceVerticalAnalysis";
+ 		case EnthalpyAnalysisEnum : return "EnthalpyAnalysis";
+-		case EnthalpySolutionEnum : return "EnthalpySolution";
+ 		case FlaimAnalysisEnum : return "FlaimAnalysis";
+ 		case FlaimSolutionEnum : return "FlaimSolution";
+ 		case HydrologyShreveAnalysisEnum : return "HydrologyShreveAnalysis";
+@@ -528,9 +528,6 @@
+ 		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
+ 		case IntExternalResultEnum : return "IntExternalResult";
+ 		case JEnum : return "J";
+-		case PatchEnum : return "Patch";
+-		case PatchNodesEnum : return "PatchNodes";
+-		case PatchVerticesEnum : return "PatchVertices";
+ 		case PentaP1ElementResultEnum : return "PentaP1ElementResult";
+ 		case StringExternalResultEnum : return "StringExternalResult";
+ 		case StepEnum : return "Step";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16470)
+@@ -57,10 +57,10 @@
+ 	      else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;
+ 	      else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum;
+ 	      else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum;
+-	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"StressbalancePenaltyFactor")==0) return StressbalancePenaltyFactorEnum;
+ 	      else if (strcmp(name,"StressbalanceReferential")==0) return StressbalanceReferentialEnum;
+ 	      else if (strcmp(name,"StressbalanceReltol")==0) return StressbalanceReltolEnum;
++	      else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"StressbalanceRequestedOutputs")==0) return StressbalanceRequestedOutputsEnum;
+ 	      else if (strcmp(name,"StressbalanceRestol")==0) return StressbalanceRestolEnum;
+ 	      else if (strcmp(name,"StressbalanceRiftPenaltyLock")==0) return StressbalanceRiftPenaltyLockEnum;
+@@ -238,7 +238,6 @@
+ 	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+ 	      else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum;
+ 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
+-	      else if (strcmp(name,"SettingsResultsAsPatches")==0) return SettingsResultsAsPatchesEnum;
+ 	      else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsDelta18o")==0) return SurfaceforcingsDelta18oEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsDelta18oSurface")==0) return SurfaceforcingsDelta18oSurfaceEnum;
+@@ -259,11 +258,11 @@
+ 	      else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
++	      else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
+-	      else if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
++	      if (strcmp(name,"SurfaceforcingsS0p")==0) return SurfaceforcingsS0pEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
+@@ -278,6 +277,8 @@
+ 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
+ 	      else if (strcmp(name,"ThermalSpctemperature")==0) return ThermalSpctemperatureEnum;
+ 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
++	      else if (strcmp(name,"ThermalNumRequestedOutputs")==0) return ThermalNumRequestedOutputsEnum;
++	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
+ 	      else if (strcmp(name,"GiaMantleViscosity")==0) return GiaMantleViscosityEnum;
+ 	      else if (strcmp(name,"GiaLithosphereThickness")==0) return GiaLithosphereThicknessEnum;
+ 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+@@ -319,7 +320,6 @@
+ 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
+ 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
+ 	      else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum;
+-	      else if (strcmp(name,"EnthalpySolution")==0) return EnthalpySolutionEnum;
+ 	      else if (strcmp(name,"FlaimAnalysis")==0) return FlaimAnalysisEnum;
+ 	      else if (strcmp(name,"FlaimSolution")==0) return FlaimSolutionEnum;
+ 	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
+@@ -540,9 +540,6 @@
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+-	      else if (strcmp(name,"Patch")==0) return PatchEnum;
+-	      else if (strcmp(name,"PatchNodes")==0) return PatchNodesEnum;
+-	      else if (strcmp(name,"PatchVertices")==0) return PatchVerticesEnum;
+ 	      else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+ 	      else if (strcmp(name,"Step")==0) return StepEnum;
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 16470)
+@@ -7,18 +7,17 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../../classes/classes.h"
+ 
+-IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,char* output_string){
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,const char* output_string){
+ 
+-	int i;
+-	Definition* definition=NULL;
+-	DataSet* output_definitions=NULL;
+-	IssmDouble return_value;
++	Definition *definition         = NULL;
++	DataSet    *output_definitions = NULL;
++	IssmDouble  return_value;
+ 
+ 	/*Ok, go find the output definitions dataset in the parameters, where our responses are hiding: */
+ 	femmodel->parameters->FindParam(&output_definitions,OutputdefinitionEnum); _assert_(output_definitions);
+ 
+ 	/*Now, go through the output definitions, and retrieve the object which corresponds to our requested response, output_string: */
+-	for (i=0;i<output_definitions->Size();i++){
++	for(int i=0;i<output_definitions->Size();i++){
+ 		
+ 		definition=dynamic_cast<Definition*>(output_definitions->GetObjectByOffset(i));
+ 
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h	(revision 16469)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h	(revision 16470)
+@@ -7,6 +7,6 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,char* output_string);
++IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,const char* output_string);
+ 
+ #endif  /* _OUTPUTDEFINITIONSRESPONSEXX_H */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16470)
+@@ -11,9 +11,16 @@
+ 
+ void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
++	bool dakota_analysis;
++	bool isenthalpy;
++
+ 	/*Now, is the model 3d? otherwise, do nothing: */
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+ 
++	/*Is enthalpy requested?*/
++	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
++	if(!isenthalpy) return;
++
+ 	/*Fetch data needed: */
+ 	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+ 
+@@ -27,7 +34,6 @@
+ 		}
+ 	}
+ 
+-	bool dakota_analysis;
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+@@ -46,6 +52,7 @@
+ 	iomodel->FetchDataToInput(elements,PressureEnum);
+ 	iomodel->FetchDataToInput(elements,TemperatureEnum);
+ 	iomodel->FetchDataToInput(elements,WaterfractionEnum);
++	iomodel->FetchDataToInput(elements,EnthalpyEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
+ 	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16470)
+@@ -8,7 +8,7 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
++void CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16470)
+@@ -74,7 +74,6 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsAsPatchesEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsstressbalanceEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(TransientIsmasstransportEnum));
+@@ -151,6 +150,11 @@
+ 	if(numoutputs)parameters->AddObject(new StringArrayParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(&requestedoutputs,numoutputs,MasstransportRequestedOutputsEnum);
+ 
++	iomodel->FetchData(&requestedoutputs,&numoutputs,ThermalRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(ThermalNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new StringArrayParam(ThermalRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,ThermalRequestedOutputsEnum);
++
+ 	/*Deal with mass flux segments: {{{*/
+ 	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
+ 	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16469)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16470)
+@@ -62,8 +62,6 @@
+ 					./classes/Vertex.cpp\
+ 					./classes/Hook.h\
+ 					./classes/Hook.cpp\
+-					./classes/Patch.h\
+-					./classes/Patch.cpp\
+ 					./classes/ElementResults/ElementResultLocal.h\
+ 					./classes/ElementResults/DoubleElementResult.h\
+ 					./classes/ElementResults/DoubleElementResult.cpp\
+@@ -425,7 +423,6 @@
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+ 					   ./analyses/thermal_core.cpp\
+-					   ./analyses/enthalpy_core.cpp\
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
+ #}}}
+ #Control sources  {{{
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16469)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16470)
+@@ -95,7 +95,6 @@
+ 					./classes/Node.cpp
+ 					./classes/Vertex.cpp
+ 					./classes/Hook.cpp
+-					./classes/Patch.cpp
+ 					./classes/ElementResults/DoubleElementResult.cpp
+ 					./classes/ElementResults/TriaP1ElementResult.cpp
+ 					./classes/ElementResults/BoolElementResult.cpp
+@@ -278,7 +277,6 @@
+ 					   ./modules/ConstraintsStatex/ThermalIsPresent.cpp
+ 					   ./modules/ResetConstraintsx/ThermalConstraintsReset.cpp 
+ 					   ./analyses/thermal_core.cpp
+-					   ./analyses/enthalpy_core.cpp
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp)
+ #}}}
+ #Control sources  {{{
+Index: ../trunk-jpl/src/c/classes/Patch.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Patch.h	(revision 16470)
+@@ -1,44 +0,0 @@
+-/*!\file: Patch.h
+- * \brief prototypes for Patch.h
+- */ 
+-
+-/*A Patch object is used to store all results held in elements, in a serial way, and to dump them to disk. 
+-
+-	Each row of the Patch object is made of the following information: 
+-	- the result enum_type, 
+-	- the step and time, 
+-	- the id of the element, 
+-	- the interpolation type, 
+-	- the vertices ids, 
+-	- and the values at the nodes (could be different from the vertices).
+-
+-	For ex: 
+-	1. on a Beam element, Vx, at step 1, time .5, element id 1, interpolation type P0 (constant), vertices ids 1 and 2, one constant value 4.5
+-	   VxEnum 1  .5  1 P0  1 2       4.5 NaN  NaN
+-	2. on a Tria element, Vz, at step 2, time .8, element id 2, interpolation type P1 (linear), vertices ids 1 3 and 4, with values at 3 nodes 4.5, 3.2, 2.5
+-	   VzEnum 2  .8  2 P1  1 3 4     4.5 3.2  2.5
+-*/
+-
+-#ifndef _PATCH_H_
+-#define  _PATCH_H_
+-
+-/*Headers:*/
+-class Patch{
+-
+-	public:
+-
+-		int         numrows;       //number of results held in Patch object
+-		int         numcols;       //number of columns
+-		int         maxvertices;   //largest amount of vertices on a given element, determined by geometry
+-		int         maxnodes;      //the largest amout of nodes on a given element, determined by interpolation
+-		IssmDouble *values;        //result values
+-
+-		Patch();
+-		Patch(int numrows, int maxvertices, int maxnodes);
+-		~Patch();
+-		void fillelementinfo(int row, int element_id, int* vertices_ids, int num_vertices);
+-		void fillresultinfo(int row,int enum_type,int step, IssmDouble time, int interpolation, IssmDouble* nodal_values, int num_nodes);
+-		void Gather(void);
+-
+-};
+-#endif //ifndef _PATCH_H_
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 16470)
+@@ -1,160 +0,0 @@
+-/*!\file Patch.c
+- * \brief: implementation of the Patch object
+- */
+-
+-/*Include files */
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <stdio.h>
+-#include <string.h>
+-#include <math.h>
+-#include "./classes.h"
+-#include "../shared/shared.h"
+-
+-/*Object constructors and destructors:*/
+-/*FUNCTION Patch::Patch() default constructor {{{*/
+-Patch::Patch(){
+-	this->numrows     = 0;
+-	this->numcols     = 0;
+-	this->maxvertices = 0;
+-	this->maxnodes    = 0;
+-	this->values      = NULL;
+-}
+-/*}}}*/
+-/*FUNCTION Patch::Patch(int numrows, int maxvertices, int maxnodes){{{*/
+-Patch::Patch(int in_numrows, int in_maxvertices, int in_maxnodes){
+-
+-	this->numrows=in_numrows;
+-	this->maxvertices=in_maxvertices;
+-	this->maxnodes=in_maxnodes;
+-	this->numcols=1  //enum_type
+-		+1           //step
+-		+1           //time 
+-		+1           //element id
+-		+1           //interpolation type
+-		+maxvertices //vertices
+-		+maxnodes;   //nodes
+-
+-	//Allocate values and fill with NaN:
+-	if (this->numcols*this->numrows==0){
+-		this->values=NULL;
+-	}
+-	else{
+-		this->values=xNew<IssmDouble>(this->numcols*this->numrows);
+-		for(int i=0;i<this->numrows;i++){
+-			for(int j=0;j<this->numcols;j++){
+-				this->values[i*this->numcols+j]=NAN;
+-			}
+-		}
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION Patch::~Patch(){{{*/
+-Patch::~Patch(){
+-	xDelete<IssmDouble>(values);
+-}
+-/*}}}*/
+-
+-/*Object methods*/
+-/*FUNCTION Patch::fillelementinfo{{{*/
+-void Patch::fillelementinfo(int count, int element_id, int* vertices_ids, int num_vertices){
+-
+-	int i;
+-	IssmDouble* row=NULL;
+-
+-	/*point to the start of the row: */
+-	row=this->values+count*this->numcols;
+-
+-	/*Let's remember what is on a row: 
+-	 enum_type step time element_id interpolation vertices_ids nodal_values
+-	 */
+-	row[3]=element_id;
+-	for(i=0;i<num_vertices;i++){
+-		row[5+i]=vertices_ids[i];
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION Patch::fillresultinfo{{{*/
+-void Patch::fillresultinfo(int count,int enum_type,int step, IssmDouble time, int interpolation, IssmDouble* nodal_values, int num_nodes){
+-
+-	int i;
+-	IssmDouble* row=NULL;
+-
+-	/*point to the start of the row: */
+-	row=this->values+count*this->numcols;
+-
+-	/*Let's remember what is on a row: 
+-	 enum_type step time element_id interpolation vertices_ids nodal_values */
+-	row[0]=enum_type;
+-	row[1]=(IssmDouble)step;
+-	row[2]=time;
+-	row[4]=interpolation;
+-	for(i=0;i<num_nodes;i++){
+-		row[5+this->maxvertices+i]=nodal_values[i];
+-	}
+-
+-}
+-/*}}}*/
+-/*FUNCTION Patch::Gather{{{*/
+-void Patch::Gather(void){
+-
+-	int         count;
+-	int         my_rank;
+-	int         num_procs;
+-	int         total_numrows;
+-	int         node_numrows;
+-	IssmDouble     *total_values  = NULL;
+-	ISSM_MPI_Status  status;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
+-
+-	/*First, figure out total number of rows combining all the cpus: */
+-	ISSM_MPI_Reduce(&this->numrows,&total_numrows,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&total_numrows,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-
+-	/*return if patch empty*/
+-	if(total_numrows==0) return;
+-
+-	/*Now, allocate buffer to holds all the values, on node 0: */
+-	if(my_rank==0)total_values=xNew<IssmDouble>(this->numcols*total_numrows);
+-
+-	/*Start by copying node 0 values onto total_values: */
+-	if(my_rank==0){
+-		count=0;
+-		xMemCpy<IssmDouble>(total_values+count,this->values,this->numcols*this->numrows);
+-		count+=this->numrows*this->numcols;
+-	}
+-
+-	/*Now, ask other nodes to send their values: */
+-	for(int i=1;i<num_procs;i++){
+-		if (my_rank==i){ 
+-			ISSM_MPI_Send(&this->numrows,1,ISSM_MPI_INT,0,1,IssmComm::GetComm());   
+-			if (this->numrows)ISSM_MPI_Send(this->values,this->numrows*this->numcols,ISSM_MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+-		}
+-		if (my_rank==0){
+-			ISSM_MPI_Recv(&node_numrows,1,ISSM_MPI_INT,i,1,IssmComm::GetComm(),&status); 
+-			if (node_numrows)ISSM_MPI_Recv(total_values+count,node_numrows*this->numcols,ISSM_MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
+-			count+=node_numrows*this->numcols;
+-		}
+-	}	
+-
+-	/*Now, node 0 has total_values, of size total_numrows*this->numcols. Update the fields in the patch, to reflect this new 
+-	 * reality. For other cpus, no point in keeping their data anymore: */
+-	if(my_rank==0){
+-		this->numrows=total_numrows;
+-		xDelete<IssmDouble>(this->values);
+-		this->values=total_values;
+-	}
+-	else{
+-		this->numrows=0;
+-		xDelete<IssmDouble>(this->values);
+-	}
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16470)
+@@ -116,7 +116,6 @@
+ #include "./Hook.h"
+ #include "./DofIndexing.h"
+ #include "./IoModel.h"
+-#include "./Patch.h"
+ #include "./Update.h"
+ #include "./FemModel.h"
+ #include "./GiaDeflectionCoreArgs.h"
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16470)
+@@ -92,7 +92,7 @@
+ 			time      = in_time;
+ 		}
+ 		/*}}}*/
+-		GenericExternalResult(int in_id, char* in_enum_string,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
++		GenericExternalResult(int in_id,const char* in_enum_string,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+ 			id        = in_id;
+ 			enum_type = -1;
+ 			enum_string = xNew<char>(strlen(in_enum_string)+1); xMemCpy<char>(enum_string,in_enum_string,strlen(in_enum_string)+1);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16470)
+@@ -532,7 +532,7 @@
+ 	int         step,output_enum;
+ 	IssmDouble  time;
+ 	IssmDouble  double_result;
+-	char       *output_string = NULL;
++	const char *output_string = NULL;
+ 
+ 	/*recover results*/
+ 	Results* results = *presults;
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16470)
+@@ -34,7 +34,6 @@
+ 		IssmDouble  GetTime(void){return time;};
+ 		int     GetStep(void){return step;};
+ 		int     NumberOfNodalValues(void);
+-		void    PatchFill(int row, Patch* patch);
+ 		/*}}}*/
+ 		/*TriaP1ElementResult management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16470)
+@@ -82,16 +82,6 @@
+ 	return 6;
+ }
+ /*}}}*/
+-/*FUNCTION PentaP1ElementResult::PatchFill{{{*/
+-void PentaP1ElementResult::PatchFill(int row, Patch* patch){
+-
+-	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+-	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+-	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+-	patch->fillresultinfo(row,this->enum_type,this->step,this->time,P1Enum,this->values,6);
+-
+-}
+-/*}}}*/
+ /*FUNCTION PentaP1ElementResult::GetVectorFromResults{{{*/
+ void PentaP1ElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+ 
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16470)
+@@ -79,16 +79,6 @@
+ 	return 1;
+ }
+ /*}}}*/
+-/*FUNCTION DoubleElementResult::PatchFill{{{*/
+-void DoubleElementResult::PatchFill(int row, Patch* patch){
+-
+-	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+-	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+-	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+-	patch->fillresultinfo(row,this->enum_type,this->step,this->time,P0Enum,&this->value,1);
+-
+-}
+-/*}}}*/
+ /*FUNCTION DoubleElementResult::GetVectorFromResults{{{1*/
+ void DoubleElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+ 
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16470)
+@@ -79,17 +79,6 @@
+ 	return 1;
+ }
+ /*}}}*/
+-/*FUNCTION BoolElementResult::PatchFill{{{*/
+-void BoolElementResult::PatchFill(int row, Patch* patch){
+-
+-	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+-	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+-	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+-	IssmDouble IssmDoublevalue=this->value?1:0;
+-	patch->fillresultinfo(row,this->enum_type,this->step,this->time,P0Enum,&IssmDoublevalue,1);
+-
+-}
+-/*}}}*/
+ /*FUNCTION BoolElementResult::GetVectorFromResults{{{*/
+ void BoolElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+ 
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16470)
+@@ -35,7 +35,6 @@
+ 		IssmDouble  GetTime(void){return time;};
+ 		int     GetStep(void){return step;};
+ 		int     NumberOfNodalValues(void);
+-		void    PatchFill(int row, Patch* patch);
+ 		/*}}}*/
+ 		/*PentaP1ElementResult management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16470)
+@@ -36,7 +36,6 @@
+ 		IssmDouble  GetTime(void){return time;};
+ 		int     GetStep(void){return step;};
+ 		int     NumberOfNodalValues(void);
+-		void    PatchFill(int row, Patch* patch);
+ 
+ 		/*DoubleElementResult management*/
+ 		int  InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16470)
+@@ -36,7 +36,6 @@
+ 		IssmDouble  GetTime(void){return time;};
+ 		int     GetStep(void){return step;};
+ 		int     NumberOfNodalValues(void);
+-		void    PatchFill(int row, Patch* patch);
+ 		/*}}}*/
+ 		/*BoolElementResult management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16470)
+@@ -81,16 +81,6 @@
+ 	return 3;
+ }
+ /*}}}*/
+-/*FUNCTION TriaP1ElementResult::PatchFill{{{*/
+-void TriaP1ElementResult::PatchFill(int row, Patch* patch){
+-
+-	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+-	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+-	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+-	patch->fillresultinfo(row,this->enum_type,this->step,this->time,P1Enum,this->values,3);
+-
+-}
+-/*}}}*/
+ /*FUNCTION TriaP1ElementResult::GetVectorFromResults{{{*/
+ void TriaP1ElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+ 
+Index: ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16470)
+@@ -7,7 +7,6 @@
+ 
+ /*Headers:*/
+ #include "../../datastructures/datastructures.h"
+-class Patch;
+ class Parameters;
+ 
+ class ElementResult:public Object{
+@@ -18,7 +17,6 @@
+ 		virtual IssmDouble GetTime(void) = 0;
+ 		virtual int        GetStep(void) = 0;
+ 		virtual int        NumberOfNodalValues(void) = 0;
+-		virtual void       PatchFill(int row, Patch *patch)=0;
+ 		virtual int        InstanceEnum() = 0;
+ 		virtual void       GetVectorFromResults(Vector <IssmDouble> *vector,int*doflist,int*connectivitylist,int numdof)=0;
+ 		virtual void       GetElementVectorFromResults(Vector <IssmDouble> *vector,int dof)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16470)
+@@ -14,7 +14,6 @@
+ 
+ class DataSet;
+ class Parameters;
+-class Patch;
+ class Elements;
+ class Loads;
+ class Node;
+@@ -59,8 +58,6 @@
+ 		virtual void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
+ 		virtual void   ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
+ 		virtual void   ComputeStrainRate(Vector<IssmDouble>* eps)=0;
+-		virtual void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes)=0;
+-		virtual void   PatchFill(int* pcount, Patch* patch)=0;
+ 		virtual void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
+ 		virtual void   ResultInterpolation(int* pinterpolation,int output_enum)=0;
+ 		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16470)
+@@ -2450,57 +2450,6 @@
+ 	return found;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::PatchFill{{{*/
+-void  Tria::PatchFill(int* prow, Patch* patch){
+-
+-	int i,row;
+-	int vertices_ids[3];
+-
+-	/*recover pointer: */
+-	row=*prow;
+-
+-	for(i=0;i<3;i++) vertices_ids[i]=vertices[i]->Id(); //vertices id start at column 3 of the patch.
+-
+-	for(i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-
+-		/*For this result,fill the information in the Patch object (element id + vertices ids), and then hand 
+-		 *it to the result object, to fill the rest: */
+-		patch->fillelementinfo(row,this->sid+1,vertices_ids,3);
+-		elementresult->PatchFill(row,patch);
+-
+-		/*increment rower: */
+-		row++;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*prow=row;
+-}
+-/*}}}*/
+-/*FUNCTION Tria::PatchSize{{{*/
+-void  Tria::PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){
+-
+-	int     i;
+-	int     numrows       = 0;
+-	int     numnodes      = 0;
+-	int     temp_numnodes = 0;
+-
+-	/*Go through all the results objects, and update the counters: */
+-	for (i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-		/*first, we have one more result: */
+-		numrows++;
+-		/*now, how many vertices and how many nodal values for this result? :*/
+-		temp_numnodes=elementresult->NumberOfNodalValues(); //ask result object.
+-		if(temp_numnodes>numnodes)numnodes=temp_numnodes;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pnumrows=numrows;
+-	*pnumvertices=NUMVERTICES;
+-	*pnumnodes=numnodes;
+-}
+-/*}}}*/
+ /*FUNCTION Tria::PositiveDegreeDay{{{*/
+ void  Tria::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16470)
+@@ -109,8 +109,6 @@
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+-		void        PatchFill(int* pcount, Patch* patch);
+-		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+ 		void        ResetCoordinateSystem(void);
+ 		void	      SmbGradients();
+ 		IssmDouble  SurfaceArea(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16470)
+@@ -2881,57 +2881,6 @@
+ 	return found;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::PatchFill{{{*/
+-void  Penta::PatchFill(int* pcount, Patch* patch){
+-
+-	int i,count;
+-	int vertices_ids[6];
+-
+-	/*recover pointer: */
+-	count=*pcount;
+-
+-	/*will be needed later: */
+-	for(i=0;i<6;i++) vertices_ids[i]=vertices[i]->Id(); //vertices id start at column 3 of the patch.
+-
+-	for(i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-
+-		/*For this result,fill the information in the Patch object (element id + vertices ids), and then hand 
+-		 *it to the result object, to fill the rest: */
+-		patch->fillelementinfo(count,this->sid+1,vertices_ids,6);
+-		elementresult->PatchFill(count,patch);
+-
+-		/*increment counter: */
+-		count++;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pcount=count;
+-}/*}}}*/
+-/*FUNCTION Penta::PatchSize{{{*/
+-void  Penta::PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){
+-
+-	int     i;
+-	int     numrows       = 0;
+-	int     numnodes      = 0;
+-	int     temp_numnodes = 0;
+-
+-	/*Go through all the results objects, and update the counters: */
+-	for (i=0;i<this->results->Size();i++){
+-		ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-		/*first, we have one more result: */
+-		numrows++;
+-		/*now, how many vertices and how many nodal values for this result? :*/
+-		temp_numnodes=elementresult->NumberOfNodalValues(); //ask result object.
+-		if(temp_numnodes>numnodes)numnodes=temp_numnodes;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pnumrows=numrows;
+-	*pnumvertices=NUMVERTICES;
+-	*pnumnodes=numnodes;
+-}
+-/*}}}*/
+ /*FUNCTION Penta::PositiveDegreeDay{{{*/
+ void  Penta::PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){
+ 
+@@ -3435,7 +3384,6 @@
+ 	IssmDouble yts;
+ 	bool       dakota_analysis;
+ 	bool       isFS;
+-	IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
+ 	int        numnodes;
+ 	int*       penta_node_ids = NULL;
+ 
+@@ -3443,11 +3391,6 @@
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&beta,MaterialsBetaEnum);
+-	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+-	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+-	iomodel->Constant(&meltingpoint,MaterialsMeltingpointEnum);
+-	iomodel->Constant(&latentheat,MaterialsLatentheatEnum);
+ 
+ 	/*Checks if debuging*/
+ 	_assert_(iomodel->elements);
+@@ -3635,25 +3578,6 @@
+ 				}
+ 			}
+ 			break;
+-
+-
+-		case EnthalpyAnalysisEnum:
+-			/*Initialize mesh velocity*/
+-			for(i=0;i<6;i++)nodeinputs[i]=0;
+-			if (iomodel->Data(TemperatureEnum) && iomodel->Data(WaterfractionEnum) && iomodel->Data(PressureEnum)) {
+-				for(i=0;i<6;i++){
+-					if(iomodel->Data(TemperatureEnum)[penta_vertex_ids[i]-1] < meltingpoint-beta*iomodel->Data(PressureEnum)[penta_vertex_ids[i]-1]){
+-						nodeinputs[i]=heatcapacity*(iomodel->Data(TemperatureEnum)[penta_vertex_ids[i]-1]-referencetemperature);
+-					}
+-					else nodeinputs[i]=heatcapacity*
+-					 (meltingpoint-beta*iomodel->Data(PressureEnum)[penta_vertex_ids[i]-1]-referencetemperature)
+-						+latentheat*iomodel->Data(WaterfractionEnum)[penta_vertex_ids[i]-1];
+-				}
+-				this->inputs->AddInput(new PentaInput(EnthalpyEnum,nodeinputs,P1Enum));
+-			}
+-			else _error_("temperature and waterfraction required for the enthalpy solution");
+-			break;
+-
+ 		default:
+ 			/*No update for other solution types*/
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16470)
+@@ -15,7 +15,6 @@
+ #include "../Params/Parameters.h"
+ #include "../ExternalResults/Results.h"
+ #include "../ExternalResults/GenericExternalResult.h"
+-#include "../Patch.h"
+ #include "../../toolkits/toolkits.h"
+ #include "../../shared/shared.h"
+ 
+@@ -60,80 +59,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Elements::ResultsToPatch{{{*/
+-Patch* Elements::ResultsToPatch(void){ 
+-
+-	/*output: */
+-	Patch* patch=NULL;
+-
+-	/*intermediary: */
+-	int i;
+-	int count;
+-	int numrows;
+-	int numvertices;
+-	int numnodes;
+-	int max_numvertices;
+-	int max_numnodes;
+-	int element_numvertices;
+-	int element_numrows;
+-	int element_numnodes;
+-
+-	/*We are going to extract from the results within the elements, the desired results , and create a table 
+-	 * of patch information, that will hold, for each element that computed the result that 
+-	 * we desire, the enum_type of the result, the step and time, the id of the element, the interpolation type, the vertices ids, and the values 
+-	 * at the nodes (could be different from the vertices). This will be used for visualization purposes. 
+-	 * For example, we could build the following patch table, for velocities: 
+-	 * 
+-	 1. on a Beam element, Vx, at step 1, time .5, element id 1, interpolation type P0 (constant), vertices ids 1 and 2, one constant value 4.5
+-	 VxEnum 1  .5  1 P0  1 2       4.5 NaN  NaN
+-	 2. on a Tria element, Vz, at step 2, time .8, element id 2, interpolation type P1 (linear), vertices ids 1 3 and 4, with values at 3 nodes 4.5, 3.2, 2.5
+-	 VzEnum 2  .8  2 P1  1 3 4     4.5 3.2  2.5
+-	 * ... etc ...
+-	 *
+-	 * So what do we need to build the table: the maximum number of vertices included in the table, 
+-	 * and the maximum number of nodal values, as well as the number of rows. Once we have that, 
+-	 * we ask the elements to fill their own row in the table, by looping on the elememnts. 
+-	 *
+-	 * We will use the Patch object, which will store all of the information needed, and will be able 
+-	 * to output itself to disk on its own. See object/Patch.h for format of this object.*/
+-
+-	/*First, determine maximum number of vertices, nodes, and number of results: */
+-	numrows=0;
+-	numvertices=0;
+-	numnodes=0;
+-
+-	for(i=0;i<this->Size();i++){
+-
+-		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+-		element->PatchSize(&element_numrows,&element_numvertices,&element_numnodes);
+-
+-		numrows+=element_numrows;
+-		if(element_numvertices>numvertices)numvertices=element_numvertices;
+-		if(element_numnodes>numnodes)numnodes=element_numnodes;
+-	}
+-
+-	/*Synchronize across cluster, so as to not end up with different sizes for each patch on each cpu: */
+-	ISSM_MPI_Reduce (&numvertices,&max_numvertices,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&max_numvertices,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	numvertices=max_numvertices;
+-
+-	ISSM_MPI_Reduce (&numnodes,&max_numnodes,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm() );
+-	ISSM_MPI_Bcast(&max_numnodes,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+-	numnodes=max_numnodes;
+-
+-	/*Ok, initialize Patch object: */
+-	patch=new Patch(numrows,numvertices,numnodes);
+-
+-	/*Now, go through elements, and fill the Patch object: */
+-	count=0;
+-	for(i=0;i<this->Size();i++){
+-		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+-		element->PatchFill(&count,patch);
+-	}
+-
+-	return patch;
+-}
+-/*}}}*/
+ /*FUNCTION Elements::SetCurrentConfiguration{{{*/
+ void Elements::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+ 
+@@ -155,7 +80,6 @@
+ 	int my_rank;
+ 	int num_procs;
+ 
+-	Patch               *patch              = NULL;
+ 	int                 *resultsenums       = NULL;
+ 	int                 *resultssizes       = NULL;
+ 	int                 *resultssteps       = NULL;
+@@ -163,9 +87,8 @@
+ 	IssmDouble          *vector_serial      = NULL;
+ 	Vector<IssmDouble> *vector = NULL;
+ 	bool                io_gather;
+-	bool                results_as_patches;
+-	int                 numberofvertices     ,numberofelements;
+-	int                 numberofresults      ,vectorsize;
++	int                 numberofvertices,numberofelements;
++	int                 numberofresults ,vectorsize;
+ 	int                 rank;
+ 	int                 minrank;
+ 
+@@ -175,94 +98,68 @@
+ 
+ 	/*Recover parameters: */
+ 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+-	parameters->FindParam(&results_as_patches,SettingsResultsAsPatchesEnum);
+ 	parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
+ 	parameters->FindParam(&numberofelements,MeshNumberofelementsEnum);
+ 
+-	if(!results_as_patches){
+-		/*No patch here, we prepare vectors*/
++	/*Get rank of first cpu that has results*/
++	if(this->Size()) rank=my_rank;
++	else rank=num_procs;
++	ISSM_MPI_Allreduce (&rank,&minrank,1,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
+ 
+-		/*Get rank of first cpu that has results*/
+-		if(this->Size()) rank=my_rank;
+-		else rank=num_procs;
+-		ISSM_MPI_Allreduce (&rank,&minrank,1,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
++	/*see what the first element of this partition has in stock (this is common to all partitions)*/
++	if(my_rank==minrank){
++		if(this->Size()==0) _error_("Cannot write results because there is no element??");
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
++		element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
++	}
++	ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+ 
+-		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+-		if(my_rank==minrank){
+-			if(this->Size()==0) _error_("Cannot write results because there is no element??");
+-			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+-			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+-		}
+-		ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++	/*Get out if there is no results. Otherwise broadcast info*/
++	if(!numberofresults) return;
++	if(my_rank!=minrank){
++		resultsenums=xNew<int>(numberofresults);
++		resultssizes=xNew<int>(numberofresults);
++		resultstimes=xNew<IssmDouble>(numberofresults);
++		resultssteps=xNew<int>(numberofresults);
++	}
++	ISSM_MPI_Bcast(resultsenums,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++	ISSM_MPI_Bcast(resultssizes,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++	ISSM_MPI_Bcast(resultstimes,numberofresults,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
++	ISSM_MPI_Bcast(resultssteps,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+ 
+-		/*Get out if there is no results. Otherwise broadcast info*/
+-		if(!numberofresults) return;
+-		if(my_rank!=minrank){
+-			resultsenums=xNew<int>(numberofresults);
+-			resultssizes=xNew<int>(numberofresults);
+-			resultstimes=xNew<IssmDouble>(numberofresults);
+-			resultssteps=xNew<int>(numberofresults);
+-		}
+-		ISSM_MPI_Bcast(resultsenums,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-		ISSM_MPI_Bcast(resultssizes,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-		ISSM_MPI_Bcast(resultstimes,numberofresults,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
+-		ISSM_MPI_Bcast(resultssteps,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
++	/*Loop over all results and get nodal vector*/
++	for(int i=0;i<numberofresults;i++){
+ 
+-		/*Loop over all results and get nodal vector*/
+-		for(int i=0;i<numberofresults;i++){
++		/*Get vector for result number i*/
++		if(resultssizes[i]==P1Enum)      vectorsize=numberofvertices;
++		else if(resultssizes[i]==P0Enum) vectorsize=numberofelements;
++		else _error_("Unkown result size: " << EnumToStringx(resultssizes[i]));
++		vector=new Vector<IssmDouble>(vectorsize);
+ 
+-			/*Get vector for result number i*/
+-			if(resultssizes[i]==P1Enum)      vectorsize=numberofvertices;
+-			else if(resultssizes[i]==P0Enum) vectorsize=numberofelements;
+-			else _error_("Unkown result size: " << EnumToStringx(resultssizes[i]));
+-			vector=new Vector<IssmDouble>(vectorsize);
++		for(int j=0;j<this->Size();j++){
++			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(j));
++			element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
++		}
++		vector->Assemble();
+ 
+-			for(int j=0;j<this->Size();j++){
+-				Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(j));
+-				element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
+-			}
+-			vector->Assemble();
+-
+-			/*Serialize and add to results*/
+-			vector_serial=vector->ToMPISerial();
+-			results->DeleteResult(resultsenums[i],resultssteps[i]);
+-			if(my_rank==0){
+-				/*No need to add this vector for all cpus*/
+-				#ifdef _HAVE_ADOLC_
+-				IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+-				for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
+-				results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
+-				xDelete<IssmPDouble>(vector_serial_passive);
+-				#else
+-				results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
+-				#endif
+-			}
+-
+-			/*clean up*/
+-			delete vector;
+-			xDelete<IssmDouble>(vector_serial);
++		/*Serialize and add to results*/
++		vector_serial=vector->ToMPISerial();
++		results->DeleteResult(resultsenums[i],resultssteps[i]);
++		if(my_rank==0){
++			/*No need to add this vector for all cpus*/
++#ifdef _HAVE_ADOLC_
++			IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
++			for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
++			results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
++			xDelete<IssmPDouble>(vector_serial_passive);
++#else
++			results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
++#endif
+ 		}
+-	}
+-	else{
+-		/*create patch object out of all results in this dataset: */
+-		patch=this->ResultsToPatch();
+ 
+-		/*Gather onto master cpu 0, if needed: */
+-		if(io_gather)patch->Gather();
+-
+-		/*create result object and add to results dataset:*/
+-		if (patch->maxvertices && patch->maxnodes){
+-			results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchVerticesEnum,patch->maxvertices,1,0));
+-			results->AddObject(new GenericExternalResult<int>(results->Size()+1,PatchNodesEnum,   patch->maxnodes,1,0));
+-			#ifdef _HAVE_ADOLC_
+-			IssmPDouble* values_passive=xNew<IssmPDouble>(patch->numrows*patch->numcols);
+-			for(int k=0;k<(patch->numrows*patch->numcols);k++)values_passive[k]=reCast<IssmPDouble>(patch->values[k]);
+-			results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  values_passive,patch->numrows,patch->numcols,1,0));
+-			xDelete<IssmPDouble>(values_passive);
+-			#else
+-			results->AddObject(new GenericExternalResult<double*>(results->Size()+1,PatchEnum,  patch->values,patch->numrows,patch->numcols,1,0));
+-			#endif
+-		}
++		/*clean up*/
++		delete vector;
++		xDelete<IssmDouble>(vector_serial);
+ 	}
+ 
+ 	/*Free ressources:*/
+@@ -270,7 +167,6 @@
+ 	xDelete<int>(resultssizes);
+ 	xDelete<int>(resultssteps);
+ 	xDelete<IssmDouble>(resultstimes);
+-	delete patch;
+ }
+ /*}}}*/
+ /*FUNCTION Elements::MaxNumNodes{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16470)
+@@ -102,8 +102,6 @@
+ 		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void   ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+-		void   PatchFill(int* pcount, Patch* patch);
+-		void   PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes);
+ 		void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+ 		void   ResetCoordinateSystem(void);
+ 		void   SmbGradients();
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.h	(revision 16470)
+@@ -8,7 +8,6 @@
+ class Vertices;
+ class Loads;
+ class Nodes;
+-class Patch;
+ class Results;
+ 
+ /*! \brief Declaration of Elements class 
+@@ -29,7 +28,6 @@
+ 		int    MaxNumNodes(void);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		void   ToResults(Results* results,Parameters* parameters);
+-		Patch* ResultsToPatch(void);
+ 		int    NumberOfElements(void);
+ 		void   InputDuplicate(int input_enum,int output_enum);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16469)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16470)
+@@ -116,8 +116,6 @@
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){_error_("not implemented yet");};
+ 		void        RequestedOutput(int output_enum,int step,IssmDouble time){_error_("not implemented yet");};
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results){_error_("not implemented yet");};
+-		void        PatchFill(int* pcount, Patch* patch){_error_("not implemented yet");};
+-		void        PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes){_error_("not implemented yet");};
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
+ 		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/m/solve/MatlabProcessPatch.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/MatlabProcessPatch.py	(revision 16469)
++++ ../trunk-jpl/src/m/solve/MatlabProcessPatch.py	(revision 16470)
+@@ -1,19 +0,0 @@
+-def MatlabProcessPatch(structure):
+-	"""
+-	PROCESSPATCH - create a structure from a patch
+- 
+-	   Usage:
+-	      Result=ProcessPatch(Result);
+-	"""
+-
+-	#loop over steps
+-	for structurei in structure:
+-
+-		#return if there is no field Patch
+-		if not hasattr(structurei,'Patch'):
+-			continue
+-
+-		raise SystemError("MatlabProcessPatch not implemented in Python.")
+-
+-	return structure
+-
+Index: ../trunk-jpl/src/m/solve/MatlabProcessPatch.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/MatlabProcessPatch.m	(revision 16469)
++++ ../trunk-jpl/src/m/solve/MatlabProcessPatch.m	(revision 16470)
+@@ -1,65 +0,0 @@
+-function structure=MatlabProcessPatch(structure)
+-%PROCESSPATCH - create a structure from a patch
+-%
+-%   Usage:
+-%      Result=ProcessPatch(Result);
+-
+-%return if there is no field Patch
+-if (~isfield(structure,'Patch')),
+-	return;
+-end
+-
+-%loop over steps
+-for i=1:length(structure),
+-
+-	%Get Patch for current step
+-	Patch=structure(i).Patch;
+-	numvertices=structure(i).PatchVertices;
+-
+-	%check that Patch is not empty
+-	if length(Patch)==0 continue; end
+-
+-	%Get number of fields;
+-	fields=unique(Patch(:,1));
+-	steps=unique(Patch(:,2));
+-
+-	%parse steps
+-	for j=1:length(steps),
+-
+-		posstep=find(Patch(:,2)==steps(j));
+-
+-		%Take all the lines of the Patch for this timestep
+-		temporarypatch=Patch(posstep,:);
+-		time=temporarypatch(1,3);
+-		step=temporarypatch(1,2);
+-
+-		%parse fields
+-		for i=1:length(fields),
+-
+-			%get name
+-			fieldname=EnumToString(fields(i));
+-
+-			%get line positions
+-			pos=find(temporarypatch(:,1)==fields(i));
+-
+-			%Fill Result structure
+-			structure(step).steps=step;
+-			structure(step).time=time;
+-			structure(step).(fieldname).element=temporarypatch(pos,4);
+-			structure(step).(fieldname).interpolation=temporarypatch(pos,5);
+-			structure(step).(fieldname).index=temporarypatch(pos,6:5+numvertices);
+-			if structure(step).(fieldname).interpolation==P1Enum(),
+-				structure(step).(fieldname).value=temporarypatch(pos,6+numvertices:end);
+-			end
+-			if structure(step).(fieldname).interpolation==P0Enum(),
+-				structure(step).(fieldname).value=temporarypatch(pos,6+numvertices);
+-			end
+-
+-		end
+-	end
+-end
+-
+-%remove fields
+-structure=rmfield(structure,'Patch');
+-structure=rmfield(structure,'PatchVertices');
+-structure=rmfield(structure,'PatchNodes');
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 16469)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 16470)
+@@ -3,7 +3,6 @@
+ from collections import OrderedDict
+ import results as resultsclass
+ from MatlabFuncs import *
+-from MatlabProcessPatch import *
+ 
+ def parseresultsfromdisk(filename,iosplit):
+ 	"""
+@@ -18,9 +17,6 @@
+ 	else:
+ 		results=parseresultsfromdiskioserial(filename)
+ 
+-	#process patch if necessary
+-	results=MatlabProcessPatch(results)
+-
+ 	return results
+ 
+ def parseresultsfromdiskioserial(filename):    # {{{
+@@ -95,10 +91,7 @@
+ 		setattr(results[result['step']-1],'time',result['time']) 
+ 
+ 		#Add result
+-		if strcmpi(result['fieldname'],'Patch'):
+-			setattr(results[result['step']-1],result['fieldname'],[0,result['N']])
+-		else:
+-			setattr(results[result['step']-1],result['fieldname'],float('NaN'))
++		setattr(results[result['step']-1],result['fieldname'],float('NaN'))
+ 
+ 		#read next result
+ 		result=ReadDataDimensions(fid)
+@@ -108,20 +101,9 @@
+ 	result=ReadDataDimensions(fid)
+ 	while result:
+ 
+-		#Add result
+-		if strcmpi(result['fieldname'],'Patch'):
+-			patchdimensions=getattr(results[result['step']-1],result['fieldname'])
+-			setattr(results[result['step']-1],result['fieldname'],[patchdimensions[0]+result['M'],result['N']])
+-
+ 		#read next result
+ 		result=ReadDataDimensions(fid)
+ 
+-	#allocate patches
+-	for result in results.itervalues():
+-		if 'Patch' in result:
+-			setattr(result,'Patch',numpy.zeros((result['Patch'][0],result['Patch'][1])))
+-			setattr(result,'counter',0)    #use to index into the patch
+-
+ 	#third pass, this time to read the real information
+ 	fid.seek(0)    #rewind
+ 	result=ReadData(fid)
+@@ -136,14 +118,7 @@
+ 		setattr(results[result['step']-1],'time',result['time']) 
+ 
+ 		#Add result
+-		if strcmpi(result['fieldname'],'Patch'):
+-			counter=results[result['step']-1].counter
+-			counter2=counter+result['field'].shape[0]-1
+-			getattr(results[result['step']-1],result['fieldname'])[counter:counter2,:]=result['field']
+-			#increment counter: 
+-			results[result['step']-1].counter=counter2+1
+-		else:
+-			setattr(results[result['step']-1],result['fieldname'],result['field'])
++		setattr(results[result['step']-1],result['fieldname'],result['field'])
+ 
+ 		#read next result
+ 		result=ReadData(fid)
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 16469)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 16470)
+@@ -10,8 +10,6 @@
+ 	results=parseresultsfromdiskioserial(filename);
+ end
+ 
+-%process patch if necessary
+-results=MatlabProcessPatch(results);
+ 
+ function results=parseresultsfromdiskioserial(filename) % {{{
+ %PARSERESULTSFROMDISK - ...
+@@ -75,11 +73,7 @@
+ 	results(result.step).time=result.time; 
+ 
+ 	%Add result
+-	if strcmpi(result.fieldname,'Patch'),
+-		results(result.step).(result.fieldname)=[0 result.N];
+-	else
+-		results(result.step).(result.fieldname)=NaN;
+-	end
++	results(result.step).(result.fieldname)=NaN;
+ 
+ 	%read next result
+ 	result=ReadDataDimensions(fid);
+@@ -89,23 +83,10 @@
+ fseek(fid,0,-1); %rewind
+ result=ReadDataDimensions(fid);
+ while ~isempty(result),
+-
+-	%Add result
+-	if strcmpi(result.fieldname,'Patch'),
+-		patchdimensions=results(result.step).(result.fieldname);
+-		results(result.step).(result.fieldname)=[patchdimensions(1)+result.M result.N];
+-	end
+-
+ 	%read next result
+ 	result=ReadDataDimensions(fid);
+ end
+ 
+-%allocate patches
+-for i=1:length(results),
+-	results(i).Patch=zeros(results(i).Patch(1),results(i).Patch(2));
+-	results(i).counter=1; %use to index into the patch
+-end
+-
+ %third pass, this time to read the real information
+ fseek(fid,0,-1); %rewind
+ result=ReadData(fid);
+@@ -116,17 +97,8 @@
+ 	results(result.step).time=result.time; 
+ 
+ 	%Add result
+-	if strcmpi(result.fieldname,'Patch'),
+-		counter=results(result.step).counter;
+-		counter2=counter+size(result.field,1)-1;
+-		results(result.step).(result.fieldname)(counter:counter2,:)=result.field;
++	results(result.step).(result.fieldname)=result.field;
+ 
+-		%increment counter: 
+-		results(result.step).counter=counter2+1;
+-	else
+-		results(result.step).(result.fieldname)=result.field;
+-	end
+-
+ 	%read next result
+ 	try,
+ 		result=ReadData(fid);
+Index: ../trunk-jpl/src/m/solve/process_solve_options.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 16469)
++++ ../trunk-jpl/src/m/solve/process_solve_options.py	(revision 16470)
+@@ -18,7 +18,7 @@
+ 	#solution_type: check on this option, error out otherwise
+ 	solution_type=options.getfieldvalue('solution_type')
+ 	if solution_type not in (StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),\
+-			SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),\
++			SteadystateSolutionEnum(),TransientSolutionEnum(),\
+ 			BalancethicknessSolutionEnum(),BalancevelocitySolutionEnum(),\
+ 			BedSlopeSolutionEnum(),SurfaceSlopeSolutionEnum(),\
+ 			HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum()):
+Index: ../trunk-jpl/src/m/solve/process_solve_options.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16469)
++++ ../trunk-jpl/src/m/solve/process_solve_options.m	(revision 16470)
+@@ -9,7 +9,7 @@
+ %solution_type: check on this option, error out otherwise
+ solution_type=getfieldvalue(options,'solution_type');
+ if ~ismember(solution_type,[StressbalanceSolutionEnum(),MasstransportSolutionEnum(),ThermalSolutionEnum(),...
+-		SteadystateSolutionEnum(),TransientSolutionEnum(),EnthalpySolutionEnum(),...
++		SteadystateSolutionEnum(),TransientSolutionEnum(),...
+ 		BalancethicknessSolutionEnum(),BalancethicknessSoftSolutionEnum(),...
+ 		BalancevelocitySolutionEnum(),BedSlopeSolutionEnum(),...
+ 		SurfaceSlopeSolutionEnum(),HydrologySolutionEnum(),FlaimSolutionEnum(),GiaSolutionEnum(),DamageEvolutionSolutionEnum()]),
+Index: ../trunk-jpl/src/m/geometry/NowickiProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16469)
++++ ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16470)
+@@ -11,7 +11,6 @@
+ %Constant for theoretical profile
+ delta = 0.1;          % ratio of water density and ice density -1
+ hg    = 1;            % ice thickness at grounding line
+-sea   = hg/(1+delta); % sea level
+ lamda = 0.1;          % ration of deviatoric stress and water pressure
+ beta  = 5;            % friction coefficient
+ ms    = 0.005;        % surface accumulation rat
+@@ -35,5 +34,5 @@
+ %downstream of the GL
+ for i = ceil(numel(x)/2):numel(x)
+ 	h(i) = (x(i)/(4*(delta+1)*q)+hg^(-2))^(-0.5); % ice thickness for ice shelf from (3.1)
+-	b(i) = sea-h(i)*(1/(1+delta));
++	b(i) = -h(i)*(1/(1+delta));
+ end
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16469)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16470)
+@@ -19,12 +19,8 @@
+ 
+ 	elif solutiontype == ThermalSolutionEnum():
+ 		numanalyses=2 
+-		analyses=[ThermalAnalysisEnum(),MeltingAnalysisEnum()]
++		analyses=[EnthalpyAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+ 
+-	elif solutiontype == EnthalpySolutionEnum():
+-		numanalyses=1 
+-		analyses=[EnthalpyAnalysisEnum()]
+-
+ 	elif solutiontype == MasstransportSolutionEnum():
+ 		numanalyses=1 
+ 		analyses=[MasstransportAnalysisEnum()]
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16469)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16470)
+@@ -54,12 +54,8 @@
+ 
+ 	case ThermalSolutionEnum(),
+ 		numanalyses=2; 
+-		analyses=[ThermalAnalysisEnum();MeltingAnalysisEnum()];
++		analyses=[EnthalpyAnalysisEnum;ThermalAnalysisEnum();MeltingAnalysisEnum()];
+ 
+-	case EnthalpySolutionEnum(),
+-		numanalyses=1; 
+-		analyses=[EnthalpyAnalysisEnum()];
+-
+ 	case MasstransportSolutionEnum(),
+ 		numanalyses=1; 
+ 		analyses=[MasstransportAnalysisEnum()];
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 16469)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 16470)
+@@ -20,7 +20,7 @@
+ 	return;
+ end
+ 
+-if (isempty(data) | ~isstruct(data)),
++if isempty(data)
+ 	%first load x,y, etc ... to speed up plot
+ 
+ 	if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
+@@ -69,21 +69,6 @@
+ 		z=zeros(size(x2d));
+ 		elements=elements2d;
+ 	end
+-else
+-	%Process Patch
+-	if (md.mesh.dimension==2),
+-		elements=transpose(reshape(1:3*md.mesh.numberofelements,3,md.mesh.numberofelements));
+-		x=transpose(reshape(md.mesh.x(data.index)',1,3*md.mesh.numberofelements));
+-		y=transpose(reshape(md.mesh.y(data.index)',1,3*md.mesh.numberofelements));
+-		z=zeros(3*md.mesh.numberofelements,1);
+-		is2d=1;
+-	else
+-		elements=transpose(reshape(1:6*md.mesh.numberofelements,6,md.mesh.numberofelements));
+-		x=transpose(reshape(md.mesh.x(data.index)',1,6*md.mesh.numberofelements));
+-		y=transpose(reshape(md.mesh.y(data.index)',1,6*md.mesh.numberofelements));
+-		z=transpose(reshape(md.mesh.z(data.index)',1,6*md.mesh.numberofelements));
+-		is2d=0;
+-	end
+ end
+ 
+ %units
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 16469)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 16470)
+@@ -36,97 +36,74 @@
+ 	numberofelements2d=NaN;
+ end
+ 
+-%Process Patch
+-if isstruct(data) 
+-	if (isprop(data,'index') & isprop(data,'value')),
+-		if data.interpolation(1)==P1Enum(),
+-			data=data.value;
+-			data=data';
+-			data=data(:);
+-			datatype=4;
+-		elseif data.interpolation(1)==P0Enum(),
+-			data=data.value;
+-			datatype=5;
+-		else
+-			error(['interpolation ' data.interpolation(1) ' not supported yet']);
+-		end
+-	else
+-		error('structure other than Patch not supported yet');
+-	end
+-else
+-	%initialize datatype
+-	datatype=0;
+-end
++%initialize datatype
++datatype=0;
+ 
+ %get datasize
+ datasize=size(data);
+ 
+-%non patch processing
+-if datatype~=4 & datatype~=5,
++%transpose data if necessary
++if (size(data,2) > size(data,1)),
++	data=data';
++end
++datasize=size(data);
+ 
+-	%transpose data if necessary
+-	if (size(data,2) > size(data,1)),
+-		data=data';
+-	end
+-	datasize=size(data);
++%convert to double if necessary
++if ~isnumeric(data);
++	disp('processdata info message: data is not numeric (logical?). Converted to double');
++	data=double(data);
++end
+ 
+-	%convert to double if necessary
+-	if ~isnumeric(data);
+-		disp('processdata info message: data is not numeric (logical?). Converted to double');
+-		data=double(data);
+-	end
++%check length
++if datasize(1)~=md.mesh.numberofvertices & datasize(1)~=md.mesh.numberofelements & datasize(1)~=md.mesh.numberofvertices*6 & (md.mesh.dimension==3 & ~(datasize(1)==numberofelements2d | datasize(1)==numberofvertices2d))
++	error('plotmodel error message: data not supported yet');
++end
+ 
+-	%check length
+-	if datasize(1)~=md.mesh.numberofvertices & datasize(1)~=md.mesh.numberofelements & datasize(1)~=md.mesh.numberofvertices*6 & (md.mesh.dimension==3 & ~(datasize(1)==numberofelements2d | datasize(1)==numberofvertices2d))
+-		error('plotmodel error message: data not supported yet');
+-	end
++%quiver?
++if datasize(2)>1,
++	datatype=3;
+ 
+-	%quiver?
+-	if datasize(2)>1,
+-		datatype=3;
+-
+-		%check number of columns, add zeros if necessary,
+-		if (md.mesh.dimension==3)
+-			if datasize(2)==2,
+-				data=[data, zeros(datasize(1),1)];
+-			elseif datasize(2)~=3,
+-				error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
+-			end
++	%check number of columns, add zeros if necessary,
++	if (md.mesh.dimension==3)
++		if datasize(2)==2,
++			data=[data, zeros(datasize(1),1)];
++		elseif datasize(2)~=3,
++			error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
++		end
+ 		%elseif ((md.mesh.dimension==2) & datasize(2)~=2),
+ 		%	error('plotmodel error message: data provided should have 2 columns for quiver plot, and 1 for regular plot');
+-		end
+ 	end
++end
+ 
+-	%treat the case datasize(1)=6*nodes
+-	if datasize(1)==6*md.mesh.numberofvertices
+-		%keep the only norm of data
+-		data1=data(1:6:md.mesh.numberofvertices*6,:);
+-		data2=data(2:6:md.mesh.numberofvertices*6,:);
+-		data=sqrt(data1.^2+data2.^2);
+-		datasize(1)=md.mesh.numberofvertices;
+-		%---> go to node data
+-	end
++%treat the case datasize(1)=6*nodes
++if datasize(1)==6*md.mesh.numberofvertices
++	%keep the only norm of data
++	data1=data(1:6:md.mesh.numberofvertices*6,:);
++	data2=data(2:6:md.mesh.numberofvertices*6,:);
++	data=sqrt(data1.^2+data2.^2);
++	datasize(1)=md.mesh.numberofvertices;
++	%---> go to node data
++end
+ 
+-	%treat the case datasize(1)=nodes2d
+-	if (md.mesh.dimension==3 & datasize(1)==numberofvertices2d),
+-		data=project3d(md,'vector',data,'type','node');
+-		datasize(1)=md.mesh.numberofvertices;
+-		%---> go to node data
+-	end
++%treat the case datasize(1)=nodes2d
++if (md.mesh.dimension==3 & datasize(1)==numberofvertices2d),
++	data=project3d(md,'vector',data,'type','node');
++	datasize(1)=md.mesh.numberofvertices;
++	%---> go to node data
++end
+ 
+-	%treat the case datasize(1)=nodes2d
+-	if (md.mesh.dimension==3 & datasize(1)==numberofelements2d),
+-		data=project3d(md,'vector',data,'type','element');
+-		datasize(1)=md.mesh.numberofelements;
+-		%---> go to node data
+-	end
++%treat the case datasize(1)=nodes2d
++if (md.mesh.dimension==3 & datasize(1)==numberofelements2d),
++	data=project3d(md,'vector',data,'type','element');
++	datasize(1)=md.mesh.numberofelements;
++	%---> go to node data
++end
+ 
+-	%smoothing?
+-	if exist(options,'smooth')
+-		data=averaging(md,data,getfieldvalue(options,'smooth'));
+-		datasize(1)=md.mesh.numberofvertices;
+-		%---> go to node data
+-	end
++%smoothing?
++if exist(options,'smooth')
++	data=averaging(md,data,getfieldvalue(options,'smooth'));
++	datasize(1)=md.mesh.numberofvertices;
++	%---> go to node data
+ end
+ 
+ %element data
+Index: ../trunk-jpl/src/m/plot/plot_unit.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.m	(revision 16469)
++++ ../trunk-jpl/src/m/plot/plot_unit.m	(revision 16470)
+@@ -56,35 +56,6 @@
+ 			plot_quiver3(x,y,z,data(:,1),data(:,2),data(:,3),options);
+ 		end
+ 
+-	%Patch plot P1
+-	case 4,
+-
+-		if is2d,
+-			patch( 'Faces',elements,'Vertices',[x y],'CData',data,'FaceColor','interp','EdgeColor',edgecolor);
+-		else
+-			A=elements(:,1); B=elements(:,2); C=elements(:,3); D=elements(:,4); E=elements(:,5); F=elements(:,6);
+-			patch( 'Faces', [A B C], 'Vertices', [x y z],'CData', data,'FaceColor','interp','EdgeColor',edgecolor);
+-			patch( 'Faces', [D E F], 'Vertices', [x y z],'CData', data,'FaceColor','interp','EdgeColor',edgecolor);
+-			patch( 'Faces', [A B E D], 'Vertices', [x y z],'CData', data,'FaceColor','interp','EdgeColor',edgecolor);
+-			patch( 'Faces', [B E F C ], 'Vertices', [x y z],'CData', data,'FaceColor','interp','EdgeColor',edgecolor);
+-			patch( 'Faces', [C A D F ], 'Vertices', [x y z],'CData', data,'FaceColor','interp','EdgeColor',edgecolor);
+-		end
+-
+-	%Patch plot P0
+-	case 5,
+-
+-		if is2d,
+-			A=elements(:,1); B=elements(:,2); C=elements(:,3); 
+-			patch( 'Faces', [A B C], 'Vertices', [x y z],'CData', data(:),'FaceColor','flat','EdgeColor',edgecolor);
+-		else
+-			A=elements(:,1); B=elements(:,2); C=elements(:,3); D=elements(:,4); E=elements(:,5); F=elements(:,6);
+-			patch( 'Faces', [A B C],  'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
+-			patch( 'Faces', [D E F],  'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
+-			patch( 'Faces', [A B E D],'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
+-			patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
+-			patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', data,'FaceColor','flat','EdgeColor',edgecolor);
+-		end
+-
+ 	otherwise,
+ 		error(['case ' num2str(datatype) ' not supported']);
+ 
+Index: ../trunk-jpl/src/m/classes/initialization.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.m	(revision 16469)
++++ ../trunk-jpl/src/m/classes/initialization.m	(revision 16470)
+@@ -55,7 +55,7 @@
+ 				end
+ 				md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]);
+ 			end
+-			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum(),
++			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy)
+ 				md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices 1]);
+ 				md = checkfield(md,'initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices 1]);
+ 			end
+@@ -105,6 +105,14 @@
+ 			WriteData(fid,'data',obj.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum);
+ 			WriteData(fid,'data',obj.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum);
+ 			WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);
++
++			if md.thermal.isenthalpy,
++				tpmp = md.materials.meltingpoint - md.materials.beta*md.initialization.pressure;
++				pos  = find(md.initialization.temperature>tpmp);
++				enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
++				enthalpy(pos) = md.materials.heatcapacity*tpmp(pos) - md.constants.referencetemperature + md.materials.latentheat*md.initialization.waterfraction(pos);
++				WriteData(fid,'data',enthalpy,'format','DoubleMat','mattype',1,'enum',EnthalpyEnum());
++			end
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 16469)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 16470)
+@@ -21,6 +21,7 @@
+ 		self.penalty_factor    = 0
+ 		self.isenthalpy        = 0
+ 		self.isdynamicbasalspc = 0;
++		self.requested_outputs = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -35,8 +36,17 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'isdynamicbasalspc','enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 		return string
+ 		#}}}
++	def defaultoutputs(self,md): # {{{
++
++		if self.isenthalpy:
++			return ['Enthalpy','Temperature','Waterfraction','Watercolumn','BasalforcingsMeltingRate']
++		else:
++			return ['Temperature','BasalforcingsMeltingRate']
++
++	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#Number of unstable constraints acceptable
+@@ -56,6 +66,9 @@
+ 
+ 		#will basal boundary conditions be set dynamically
+ 		self.isdynamicbasalspc=0;
++
++		#default output
++		self.requested_outputs=['default']
+ 		return self
+ 
+ 	#}}}
+@@ -67,12 +80,13 @@
+ 
+ 		md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+-		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
++		if EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy and md.mesh.dimension==3:
+ 			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices])))
+ 			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+ 			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 			md = checkfield(md,'thermal.isdynamicbasalspc','numel',[1],'values',[0,1]);
++			md = checkfield(md,'thermal.requested_outputs','stringrow',1)
+ 
+ 		return md
+ 	# }}}
+@@ -85,4 +99,12 @@
+ 		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/settings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.py	(revision 16469)
++++ ../trunk-jpl/src/m/classes/settings.py	(revision 16470)
+@@ -14,7 +14,6 @@
+ 	def __init__(self): # {{{
+ 		self.io_gather           = 0
+ 		self.lowmem              = 0
+-		self.results_as_patches  = 0
+ 		self.output_frequency    = 0
+ 		self.waitonlock          = 0
+ 
+@@ -27,7 +26,6 @@
+ 
+ 		string="%s\n%s"%(string,fielddisplay(self,"io_gather","I/O gathering strategy for result outputs (default 1)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"lowmem","is the memory limited ? (0 or 1)"))
+-		string="%s\n%s"%(string,fielddisplay(self,"results_as_patches","provide results as patches for each element (0 or 1)"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"output_frequency","frequency at which results are saved in all solutions with multiple time_steps"))
+ 		string="%s\n%s"%(string,fielddisplay(self,"waitonlock","maximum number of minutes to wait for batch results, or return 0"))
+ 		return string
+@@ -43,9 +41,6 @@
+ 		#results frequency by default every step
+ 		self.output_frequency=1
+ 
+-		#do not use patches by default (difficult to plot)
+-		self.results_as_patches=0
+-
+ 		#this option can be activated to load automatically the results
+ 		#onto the model after a parallel run by waiting for the lock file
+ 		#N minutes that is generated once the solution has converged
+@@ -57,7 +52,6 @@
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 		md = checkfield(md,'settings.io_gather','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'settings.lowmem','numel',[1],'values',[0,1])
+-		md = checkfield(md,'settings.results_as_patches','numel',[1],'values',[0,1])
+ 		md = checkfield(md,'settings.output_frequency','numel',[1],'>=',1)
+ 		md = checkfield(md,'settings.waitonlock','numel',[1])
+ 
+@@ -66,7 +60,6 @@
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','io_gather','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','lowmem','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','results_as_patches','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','output_frequency','format','Integer')
+ 		if self.waitonlock>0:
+ 			WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',True,'format','Boolean');
+Index: ../trunk-jpl/src/m/classes/thermal.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.m	(revision 16469)
++++ ../trunk-jpl/src/m/classes/thermal.m	(revision 16470)
+@@ -13,6 +13,7 @@
+ 		penalty_factor    = 0;
+ 		isenthalpy        = 0;
+ 		isdynamicbasalspc = 0;
++		requested_outputs = {};
+ 	end
+ 	methods
+ 		function obj = thermal(varargin) % {{{
+@@ -23,6 +24,15 @@
+ 					error('constructor not supported');
+ 			end
+ 		end % }}}
++		function list = defaultoutputs(self,md) % {{{
++
++			if self.isenthalpy,
++				list = {'Enthalpy','Temperature','Waterfraction','Watercolumn','BasalforcingsMeltingRate'};
++			else
++				list = {'Temperature','BasalforcingsMeltingRate'};
++			end
++
++		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+ 			%Number of unstable constraints acceptable
+@@ -42,6 +52,9 @@
+ 
+ 			%will basal boundary conditions be set dynamically
+ 			obj.isdynamicbasalspc=0;
++
++			%default output
++			obj.requested_outputs={'default'};
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+@@ -50,7 +63,7 @@
+ 
+ 			md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0 1 2]);
+ 			md = checkfield(md,'thermal.spctemperature','forcing',1);
+-			if (ismember(EnthalpyAnalysisEnum(),analyses) & (md.thermal.isenthalpy | solution==EnthalpySolutionEnum()) & md.mesh.dimension==3),
++			if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy & md.mesh.dimension==3),
+ 				pos=find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN);
+ 				replicate=repmat(md.geometry.surface-md.mesh.z,1,size(md.thermal.spctemperature,2));
+ 				md = checkfield(md,'thermal.spctemperature(find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos),'message','spctemperature should be below the adjusted melting point');
+@@ -60,6 +73,8 @@
+ 					md = checkfield(md,'thermal.isdynamicbasalspc','numel', [1],'values',[1], 'message',['for enthalpy run thermal.isdynamicbasalspc should be 1']);
+ 				end
+ 	    end
++
++		 md = checkfield(md,'thermal.requested_outputs','stringrow',1);
+     end % }}} 
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Thermal solution parameters:'));
+@@ -72,6 +87,7 @@
+ 			fielddisplay(obj,'penalty_factor','scaling exponent (default is 3)');
+ 			fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
+ 			fielddisplay(obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
+ 
+ 		end % }}}
+ 		function marshall(obj,md,fid) % {{{
+@@ -83,6 +99,15 @@
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','isenthalpy','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isdynamicbasalspc','format','Boolean');
++
++			%process requested outputs
++			outputs = obj.requested_outputs;
++			pos  = find(ismember(outputs,'default'));
++			if ~isempty(pos),
++				outputs(pos) = [];                         %remove 'default' from outputs
++				outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
++			end
++			WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray');
+         	end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/settings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/settings.m	(revision 16469)
++++ ../trunk-jpl/src/m/classes/settings.m	(revision 16470)
+@@ -7,7 +7,6 @@
+ 	properties (SetAccess=public) 
+ 		io_gather           = 0;
+ 		lowmem              = 0;
+-		results_as_patches  = 0;
+ 		output_frequency    = 0;
+ 		waitonlock          = 0;
+ 		upload_server       = '';
+@@ -37,9 +36,6 @@
+ 			%results frequency by default every step
+ 			obj.output_frequency=1;
+ 
+-			%do not use patches by default (difficult to plot)
+-			obj.results_as_patches=0;
+-
+ 			%this option can be activated to load automatically the results
+ 			%onto the model after a parallel run by waiting for the lock file
+ 			%N minutes that is generated once the solution has converged
+@@ -54,7 +50,6 @@
+ 
+ 			md = checkfield(md,'settings.io_gather','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'settings.lowmem','numel',[1],'values',[0 1]);
+-			md = checkfield(md,'settings.results_as_patches','numel',[1],'values',[0 1]);
+ 			md = checkfield(md,'settings.output_frequency','numel',[1],'>=',1);
+ 			md = checkfield(md,'settings.waitonlock','numel',[1]);
+ 
+@@ -64,7 +59,6 @@
+ 
+ 			fielddisplay(obj,'io_gather','I/O gathering strategy for result outputs (default 1)');
+ 			fielddisplay(obj,'lowmem','is the memory limited ? (0 or 1)');
+-			fielddisplay(obj,'results_as_patches','provide results as patches for each element (0 or 1)');
+ 			fielddisplay(obj,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');
+ 			fielddisplay(obj,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');
+ 			fielddisplay(obj,'upload_server','server hostname where model should be uploaded');
+@@ -77,7 +71,6 @@
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','io_gather','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','lowmem','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','results_as_patches','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','output_frequency','format','Integer');
+ 			if obj.waitonlock>0,
+ 				WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',true,'format','Boolean');
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 16469)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 16470)
+@@ -67,7 +67,7 @@
+ 			if strcmp(md.mesh.meshtype(),'3D'):
+ 				md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices])
+-		if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum():
++		if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy):
+ 			md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
+ 			md = checkfield(md,'initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices])
+ 		if HydrologyShreveAnalysisEnum() in analyses:
+@@ -86,4 +86,12 @@
+ 		WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum())
+ 		WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum())
+ 		WriteData(fid,'data',self.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum())
++
++		if md.thermal.isenthalpy:
++			tpmp = md.materials.meltingpoint - md.materials.beta*md.initialization.pressure;
++			pos  = numpy.nonzero(md.initialization.temperature > tpmp)[0]
++			enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
++			enthalpy[pos] = md.materials.heatcapacity*tpmp[pos].reshape(-1,1) - md.constants.referencetemperature + md.materials.latentheat*md.initialization.waterfraction[pos].reshape(-1,1)
++			WriteData(fid,'data',enthalpy,'format','DoubleMat','mattype',1,'enum',EnthalpyEnum());
++
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/steadystate.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.m	(revision 16469)
++++ ../trunk-jpl/src/m/classes/steadystate.m	(revision 16470)
+@@ -24,7 +24,15 @@
+ 
+ 			%Relative tolerance for the steadystate convertgence
+ 			obj.reltol=0.01;
++
++			%default output
++			obj.requested_outputs={'default'};
+ 		end % }}}
++		function list=defaultoutputs(self,md) % {{{
++
++			list =  [md.stressbalance.defaultoutputs(md) md.thermal.defaultoutputs(md)];
++
++		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			%Early return
+@@ -50,7 +58,15 @@
+ 		function marshall(obj,md,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','reltol','format','Double');
+ 			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
++
++			%process requested outputs
++			outputs = obj.requested_outputs;
++			pos  = find(ismember(outputs,'default'));
++			if ~isempty(pos),
++				outputs(pos) = [];                         %remove 'default' from outputs
++				outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
++			end
++			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16469)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16470)
+@@ -28,6 +28,11 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional requested outputs'))
+ 		return string
+ 		#}}}
++	def defaultoutputs(self,md): # {{{
++
++		return md.stressbalance.defaultoutputs(md)+md.thermal.defaultoutputs(md)
++
++	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#maximum of steady state iterations
+@@ -36,6 +41,8 @@
+ 		#Relative tolerance for the steadystate convertgence
+ 		self.reltol=0.01
+ 
++		#default output
++		self.requested_outputs=['default']
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -57,5 +64,13 @@
+ 	def marshall(self,md,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
+ 		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray')
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++			print outputs
++		WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
+Index: ../trunk-jpl/src/m/classes/masstransport.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/masstransport.m	(revision 16469)
++++ ../trunk-jpl/src/m/classes/masstransport.m	(revision 16470)
+@@ -59,7 +59,7 @@
+ 					error('constructor not supported');
+ 			end
+ 		end % }}}
+-		function list=defaultoutputs(self,md) % {{{
++		function list = defaultoutputs(self,md) % {{{
+ 
+ 			list = {'Thickness','Surface','Bed'};
+ 
+Index: ../trunk-jpl/src/m/regional/regionaltransient2d.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 16469)
++++ ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 16470)
+@@ -101,9 +101,9 @@
+ 	numElements=arrayfun(@(x) numel(x.step), md1.results.TransientSolution);
+ 	for t=find(numElements==1)
+ 		if ~isempty(md1.results.TransientSolution(t).Vel) & mod(count,stepres)==0,
+-			vx=PatchToVec(md1.results.TransientSolution(t).Vx);
+-			vy=PatchToVec(md1.results.TransientSolution(t).Vy);
+-			thickness=PatchToVec(md1.results.TransientSolution(t).Thickness);
++			vx=md1.results.TransientSolution(t).Vx;
++			vy=md1.results.TransientSolution(t).Vy;
++			thickness=md1.results.TransientSolution(t).Thickness;
+ 			spcx=[spcx InterpFromMeshToMesh2d(md1.mesh.elements,md1.mesh.x,md1.mesh.y,vx,md2.mesh.x,md2.mesh.y)];
+ 			spcy=[spcy InterpFromMeshToMesh2d(md1.mesh.elements,md1.mesh.x,md1.mesh.y,vy,md2.mesh.x,md2.mesh.y)];
+ 			spct=[spct InterpFromMeshToMesh2d(md1.mesh.elements,md1.mesh.x,md1.mesh.y,thickness,md2.mesh.x,md2.mesh.y)];
+Index: ../trunk-jpl/src/m/interp/PatchToVec.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/PatchToVec.m	(revision 16469)
++++ ../trunk-jpl/src/m/interp/PatchToVec.m	(revision 16470)
+@@ -1,21 +0,0 @@
+-function vec=PatchToVec(Patch)
+-%PATCHTOVEC - converts a patch to a vector by averaging over each vertex
+-%
+-%   Usage:
+-%      vec=PatchToVec(Patch)
+-
+-%if the patch is P0: we have element values, return an element vector
+-switch(size(Patch.value,2)),
+-	case 1,
+-		vec(Patch.element)=Patch.value;
+-	case 3,
+-		connectivity=sparse(Patch.index(:),1,1);
+-		value       =sparse(Patch.index(:),1,Patch.value(:));
+-		vec=full(value./connectivity);
+-	case 6,
+-		connectivity=sparse(Patch.index(:),1,1);
+-		value       =sparse(Patch.index(:),1,Patch.value(:));
+-		vec=full(value./connectivity);
+-	otherwise,
+-		error('interpolation not supported yet');
+-	end
+Index: ../trunk-jpl/src/m/enum/EnthalpySolutionEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnthalpySolutionEnum.m	(revision 16469)
++++ ../trunk-jpl/src/m/enum/EnthalpySolutionEnum.m	(revision 16470)
+@@ -1,11 +0,0 @@
+-function macro=EnthalpySolutionEnum()
+-%ENTHALPYSOLUTIONENUM - Enum of EnthalpySolution
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=EnthalpySolutionEnum()
+-
+-macro=StringToEnum('EnthalpySolution');
+Index: ../trunk-jpl/src/m/enum/PatchEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PatchEnum.m	(revision 16469)
++++ ../trunk-jpl/src/m/enum/PatchEnum.m	(revision 16470)
+@@ -1,11 +0,0 @@
+-function macro=PatchEnum()
+-%PATCHENUM - Enum of Patch
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PatchEnum()
+-
+-macro=StringToEnum('Patch');
+Index: ../trunk-jpl/src/m/enum/PatchVerticesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PatchVerticesEnum.m	(revision 16469)
++++ ../trunk-jpl/src/m/enum/PatchVerticesEnum.m	(revision 16470)
+@@ -1,11 +0,0 @@
+-function macro=PatchVerticesEnum()
+-%PATCHVERTICESENUM - Enum of PatchVertices
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PatchVerticesEnum()
+-
+-macro=StringToEnum('PatchVertices');
+Index: ../trunk-jpl/src/m/enum/PatchNodesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PatchNodesEnum.m	(revision 16469)
++++ ../trunk-jpl/src/m/enum/PatchNodesEnum.m	(revision 16470)
+@@ -1,11 +0,0 @@
+-function macro=PatchNodesEnum()
+-%PATCHNODESENUM - Enum of PatchNodes
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PatchNodesEnum()
+-
+-macro=StringToEnum('PatchNodes');
+Index: ../trunk-jpl/src/m/enum/SettingsResultsAsPatchesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SettingsResultsAsPatchesEnum.m	(revision 16469)
++++ ../trunk-jpl/src/m/enum/SettingsResultsAsPatchesEnum.m	(revision 16470)
+@@ -1,11 +0,0 @@
+-function macro=SettingsResultsAsPatchesEnum()
+-%SETTINGSRESULTSASPATCHESENUM - Enum of SettingsResultsAsPatches
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SettingsResultsAsPatchesEnum()
+-
+-macro=StringToEnum('SettingsResultsAsPatches');
+Index: ../trunk-jpl/src/m/enum/ThermalRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ThermalRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ThermalRequestedOutputsEnum.m	(revision 16470)
+@@ -0,0 +1,11 @@
++function macro=ThermalRequestedOutputsEnum()
++%THERMALREQUESTEDOUTPUTSENUM - Enum of ThermalRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ThermalRequestedOutputsEnum()
++
++macro=StringToEnum('ThermalRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/ThermalNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ThermalNumRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ThermalNumRequestedOutputsEnum.m	(revision 16470)
+@@ -0,0 +1,11 @@
++function macro=ThermalNumRequestedOutputsEnum()
++%THERMALNUMREQUESTEDOUTPUTSENUM - Enum of ThermalNumRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=ThermalNumRequestedOutputsEnum()
++
++macro=StringToEnum('ThermalNumRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16469)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16470)
+@@ -49,10 +49,10 @@
+ def StressbalanceAbstolEnum(): return StringToEnum("StressbalanceAbstol")[0]
+ def StressbalanceIsnewtonEnum(): return StringToEnum("StressbalanceIsnewton")[0]
+ def StressbalanceMaxiterEnum(): return StringToEnum("StressbalanceMaxiter")[0]
+-def StressbalanceNumRequestedOutputsEnum(): return StringToEnum("StressbalanceNumRequestedOutputs")[0]
+ def StressbalancePenaltyFactorEnum(): return StringToEnum("StressbalancePenaltyFactor")[0]
+ def StressbalanceReferentialEnum(): return StringToEnum("StressbalanceReferential")[0]
+ def StressbalanceReltolEnum(): return StringToEnum("StressbalanceReltol")[0]
++def StressbalanceNumRequestedOutputsEnum(): return StringToEnum("StressbalanceNumRequestedOutputs")[0]
+ def StressbalanceRequestedOutputsEnum(): return StringToEnum("StressbalanceRequestedOutputs")[0]
+ def StressbalanceRestolEnum(): return StringToEnum("StressbalanceRestol")[0]
+ def StressbalanceRiftPenaltyLockEnum(): return StringToEnum("StressbalanceRiftPenaltyLock")[0]
+@@ -227,7 +227,6 @@
+ def SettingsIoGatherEnum(): return StringToEnum("SettingsIoGather")[0]
+ def SettingsLowmemEnum(): return StringToEnum("SettingsLowmem")[0]
+ def SettingsOutputFrequencyEnum(): return StringToEnum("SettingsOutputFrequency")[0]
+-def SettingsResultsAsPatchesEnum(): return StringToEnum("SettingsResultsAsPatches")[0]
+ def SettingsWaitonlockEnum(): return StringToEnum("SettingsWaitonlock")[0]
+ def SurfaceforcingsDelta18oEnum(): return StringToEnum("SurfaceforcingsDelta18o")[0]
+ def SurfaceforcingsDelta18oSurfaceEnum(): return StringToEnum("SurfaceforcingsDelta18oSurface")[0]
+@@ -264,6 +263,8 @@
+ def ThermalPenaltyThresholdEnum(): return StringToEnum("ThermalPenaltyThreshold")[0]
+ def ThermalSpctemperatureEnum(): return StringToEnum("ThermalSpctemperature")[0]
+ def ThermalStabilizationEnum(): return StringToEnum("ThermalStabilization")[0]
++def ThermalNumRequestedOutputsEnum(): return StringToEnum("ThermalNumRequestedOutputs")[0]
++def ThermalRequestedOutputsEnum(): return StringToEnum("ThermalRequestedOutputs")[0]
+ def GiaMantleViscosityEnum(): return StringToEnum("GiaMantleViscosity")[0]
+ def GiaLithosphereThicknessEnum(): return StringToEnum("GiaLithosphereThickness")[0]
+ def ThicknessEnum(): return StringToEnum("Thickness")[0]
+@@ -305,7 +306,6 @@
+ def StressbalanceSolutionEnum(): return StringToEnum("StressbalanceSolution")[0]
+ def StressbalanceVerticalAnalysisEnum(): return StringToEnum("StressbalanceVerticalAnalysis")[0]
+ def EnthalpyAnalysisEnum(): return StringToEnum("EnthalpyAnalysis")[0]
+-def EnthalpySolutionEnum(): return StringToEnum("EnthalpySolution")[0]
+ def FlaimAnalysisEnum(): return StringToEnum("FlaimAnalysis")[0]
+ def FlaimSolutionEnum(): return StringToEnum("FlaimSolution")[0]
+ def HydrologyShreveAnalysisEnum(): return StringToEnum("HydrologyShreveAnalysis")[0]
+@@ -520,9 +520,6 @@
+ def DoubleMatExternalResultEnum(): return StringToEnum("DoubleMatExternalResult")[0]
+ def IntExternalResultEnum(): return StringToEnum("IntExternalResult")[0]
+ def JEnum(): return StringToEnum("J")[0]
+-def PatchEnum(): return StringToEnum("Patch")[0]
+-def PatchNodesEnum(): return StringToEnum("PatchNodes")[0]
+-def PatchVerticesEnum(): return StringToEnum("PatchVertices")[0]
+ def PentaP1ElementResultEnum(): return StringToEnum("PentaP1ElementResult")[0]
+ def StringExternalResultEnum(): return StringToEnum("StringExternalResult")[0]
+ def StepEnum(): return StringToEnum("Step")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16470-16471.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16470-16471.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16470-16471.diff	(revision 16556)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/m/classes/steadystate.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/steadystate.py	(revision 16470)
++++ ../trunk-jpl/src/m/classes/steadystate.py	(revision 16471)
+@@ -71,6 +71,5 @@
+ 		if len(indices) > 0:
+ 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
+ 			outputs    =outputscopy
+-			print outputs
+ 		WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
Index: issm/oecreview/Archive/16133-16554/ISSM-16471-16472.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16471-16472.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16471-16472.diff	(revision 16556)
@@ -0,0 +1,129 @@
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 16471)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 16472)
+@@ -14,16 +14,19 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0.
+-md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.initialization.watercolumn=numpy.zeros((md.mesh.numberofvertices,1))
+-md=solve(md,EnthalpySolutionEnum())
++md.thermal.isenthalpy = 1
++md.thermal.isdynamicbasalspc = 1
+ 
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,ThermalSolutionEnum())
++
+ #Fields and tolerances to track changes
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+ field_tolerances=[1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results.EnthalpySolution.Enthalpy,\
+-	md.results.EnthalpySolution.Waterfraction,\
+-	md.results.EnthalpySolution.Temperature,\
++	md.results.ThermalSolution.Enthalpy,\
++	md.results.ThermalSolution.Waterfraction,\
++	md.results.ThermalSolution.Temperature,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 16471)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 16472)
+@@ -4,16 +4,19 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0;
+-md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,EnthalpySolutionEnum());
++md.thermal.isenthalpy = 1;
++md.thermal.isdynamicbasalspc = 1;
+ 
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,ThermalSolutionEnum());
++
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+ field_tolerances={1e-13,1.45e-10,1e-13};
+ field_values={...
+-	(md.results.EnthalpySolution.Enthalpy),...
+-	(md.results.EnthalpySolution.Waterfraction),...
+-	(md.results.EnthalpySolution.Temperature),...
++	(md.results.ThermalSolution.Enthalpy),...
++	(md.results.ThermalSolution.Waterfraction),...
++	(md.results.ThermalSolution.Temperature),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 16471)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 16472)
+@@ -4,16 +4,19 @@
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'SSA','all');
+ md.timestepping.time_step=0.;
+-md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.initialization.watercolumn=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,EnthalpySolutionEnum());
++md.thermal.isenthalpy = 1;
++md.thermal.isdynamicbasalspc = 1;
+ 
++md.cluster=generic('name',oshostname(),'np',3);
++md=solve(md,ThermalSolutionEnum());
++
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+ field_tolerances={1e-13,1e-13,1e-13};
+ field_values={...
+-	(md.results.EnthalpySolution.Enthalpy),...
+-	(md.results.EnthalpySolution.Waterfraction),...
+-	(md.results.EnthalpySolution.Temperature),...
++	(md.results.ThermalSolution.Enthalpy),...
++	(md.results.ThermalSolution.Waterfraction),...
++	(md.results.ThermalSolution.Temperature),...
+ 	};
+Index: ../trunk-jpl/test/NightlyRun/test411.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.py	(revision 16471)
++++ ../trunk-jpl/test/NightlyRun/test411.py	(revision 16472)
+@@ -14,7 +14,7 @@
+ md.extrude(3,2.)
+ md=setflowequation(md,'HO','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.timestepping.time_step=0
++md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ #Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 16471)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 16472)
+@@ -14,16 +14,19 @@
+ md.extrude(3,1.)
+ md=setflowequation(md,'SSA','all')
+ md.timestepping.time_step=0
+-md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros(md.mesh.numberofvertices)
+ md.initialization.watercolumn=numpy.zeros(md.mesh.numberofvertices)
+-md=solve(md,EnthalpySolutionEnum())
++md.thermal.isenthalpy = 1;
++md.thermal.isdynamicbasalspc = 1;
+ 
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,ThermalSolutionEnum())
++
+ #Fields and tolerances to track changes
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+ field_tolerances=[1e-13,1.45e-10,1e-13]
+ field_values=[\
+-	md.results.EnthalpySolution.Enthalpy,\
+-	md.results.EnthalpySolution.Waterfraction,\
+-	md.results.EnthalpySolution.Temperature,\
++	md.results.ThermalSolution.Enthalpy,\
++	md.results.ThermalSolution.Waterfraction,\
++	md.results.ThermalSolution.Temperature,\
+ 	]
Index: issm/oecreview/Archive/16133-16554/ISSM-16472-16473.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16472-16473.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16472-16473.diff	(revision 16556)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16472)
++++ ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16473)
+@@ -30,13 +30,14 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("saving results:\n");
+ 		if(meshtype!=Mesh2DverticalEnum){
++			const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++
++		}
++		else{
+ 			const char* outputs [] = {"SurfaceSlopeX"};
+ 			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 		}
+-		else{
+-			const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
+-		}
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16472)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16473)
+@@ -32,13 +32,13 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		if(meshtype!=Mesh2DverticalEnum){
++			const char* outputs [] = {"BedSlopeX","BedSlopeY"};
++			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++		}
++		else{
+ 			const char* outputs [] = {"BedSlopeX"};
+ 			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 		}
+-		else{
+-			const char* outputs [] = {"BedSlopeX","BedSlopeY"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
+-		}
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16472)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16473)
+@@ -618,7 +618,7 @@
+ 					}
+ 					vector_result->Assemble();
+ 
+-					results->AddObject(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
++					results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
+ 					isvec = true;
+ 					break;
+ 
+@@ -630,7 +630,7 @@
+ 
+ 		/*Add result to Results*/
+ 		if(!isvec){
+-			results->AddObject(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
++			results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
+ 		}
+ 	}
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16473-16474.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16473-16474.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16473-16474.diff	(revision 16556)
@@ -0,0 +1,570 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16474)
+@@ -11,14 +11,14 @@
+ 
+ 	int i,j;
+ 	
+-	Parameters *parameters = NULL;
+-	DataSet* output_definitions=NULL;
+-	int*     output_definition_enums;
+-	int      num_output_definitions;
+-	int      numgates;
+-	char**   gatenames=NULL;
+-	IssmDouble** gatesegments=NULL;
+-	int*         gatesegments_M=NULL;
++	Parameters  *parameters              = NULL;
++	DataSet     *output_definitions      = NULL;
++	int         *output_definition_enums = NULL;
++	int          num_output_definitions;
++	int          numgates;
++	char       **gatenames               = NULL;
++	IssmDouble **gatesegments            = NULL;
++	int         *gatesegments_M          = NULL;
+ 
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+@@ -42,8 +42,8 @@
+ 				}
+ 				/*Free ressources:*/
+ 				for(j=0;j<numgates;j++){
+-					char* string=gatenames[j]; xDelete<char>(string);
+-					IssmDouble* gate=gatesegments[j]; xDelete<IssmDouble>(gate);
++					char*       string = gatenames[j];    xDelete<char>(string);
++					IssmDouble* gate   = gatesegments[j]; xDelete<IssmDouble>(gate);
+ 				}
+ 				xDelete<char*>(gatenames);
+ 				xDelete<IssmDouble*>(gatesegments);
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16474)
+@@ -65,8 +65,8 @@
+ 
+ 		ElementResult* result=dynamic_cast<ElementResult*>(*object);
+ 
+-		if(result->InstanceEnum()==in_result->InstanceEnum()){
+-			if(result->GetStep()==in_result->GetStep()){
++		if(result->GetStep()==in_result->GetStep()){
++			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
+ 				this->DeleteObject(result);
+ 				break;
+ 			}
+@@ -90,8 +90,8 @@
+ 	for(int i=0;i<this->Size();i++){
+ 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+ 
+-		if(result->InstanceEnum()==in_result->InstanceEnum()){
+-			if(result->GetStep()==in_result->GetStep()){
++		if(result->GetStep()==in_result->GetStep()){
++			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
+ 				this->DeleteObject(result);
+ 				break;
+ 			}
+@@ -108,8 +108,8 @@
+ 	for(int i=0;i<this->Size();i++){
+ 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+ 
+-		if(result->InstanceEnum()==result_enum){
+-			if(result->GetStep()==result_step){
++		if(result->GetStep()==result_step){
++			if(strcmp(result->GetResultName(),EnumToStringx(result_enum))==0){
+ 				this->DeleteObject(result);
+ 				break;
+ 			}
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16474)
+@@ -22,8 +22,7 @@
+ 
+ 	private: 
+ 		int        id;
+-		int        enum_type; //in case we have an identifiable enum for this result
+-		char*      enum_string;  //in case this result is only identifiable by a unique string, though arbitrary.
++		char*      result_name;
+ 		ResultType value;
+ 		int        M;
+ 		int        N;
+@@ -33,28 +32,20 @@
+ 	public:
+ 		/*Diverse: must be in front, as it is used in what follows*/
+ 		void GenericEcho(void){/*{{{*/
+-			_printf_("   id: " << this->id << "\n");
+-			if(this->enum_type!=-1)_printf_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-			else _printf_("   string identified:  " << this->enum_string );
+-			_printf_("   step: " << this->step << "\n");
+-			_printf_("   time: " << this->time << "\n");
++			_printf_("   id          : " << this->id << "\n");
++			_printf_("   result_name : " << this->result_name<< "\n");
++			_printf_("   step        : " << this->step << "\n");
++			_printf_("   time        : " << this->time << "\n");
+ 		}
+ 		/*}}}*/
+ 		void GenericWriteData(FILE* fid){/*{{{*/ 
+ 
+-			int     length;
+ 			IssmPDouble  passiveDouble;
+-			char*   name = NULL;
+ 
+-			/*First write enum: */
+-			if(this->enum_type!=-1)EnumToStringx(&name,this->enum_type);
+-			else{
+-				name=xNew<char>(strlen(this->enum_string)+1); xMemCpy<char>(name,enum_string,strlen(this->enum_string)+1);
+-			}
+-			length=(strlen(name)+1)*sizeof(char);
++			/*First write name: */
++			int length=(strlen(this->result_name)+1)*sizeof(char);
+ 			fwrite(&length,sizeof(int),1,fid);
+-			fwrite(name,length,1,fid);
+-			xDelete<char>(name);
++			fwrite(this->result_name,length,1,fid);
+ 
+ 			/*Now write time and step: */
+ 			passiveDouble=reCast<IssmPDouble>(time);
+@@ -64,45 +55,46 @@
+ 
+ 		/*GenericExternalResult constructors and  destructors*/
+ 		GenericExternalResult(){ /*{{{*/
+-			id        = 0;
+-			enum_type = -1;
+-			enum_string= NULL;
+-			M         = 0;
+-			N         = 0;
+-			step      = 0;
+-			time      = 0;
++			id          = 0;
++			result_name = NULL;
++			M           = 0;
++			N           = 0;
++			step        = 0;
++			time        = 0;
+ 		} /*}}}*/
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+-			id        = 0;
+-			enum_type = -1;
+-			enum_string=NULL;
+-			M         = 0;
+-			N         = 0;
+-			step      = 0;
+-			time      = 0;
++			id          = 0;
++			result_name = NULL;
++			M           = 0;
++			N           = 0;
++			step        = 0;
++			time        = 0;
+ 			_error_("template GenericExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_N,int in_step,IssmDouble in_time) not implemented for this ResultType\n");
+ 		}
+ /*}}}*/
+ 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+ 			id        = in_id;
+-			enum_type = in_enum_type;
+-			enum_string = NULL;
+ 			value     = in_value;
+ 			step      = in_step;
+ 			time      = in_time;
++
++			/*Convert enum to name*/
++			EnumToStringx(&this->result_name,in_enum_type);
+ 		}
+ 		/*}}}*/
+-		GenericExternalResult(int in_id,const char* in_enum_string,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
++		GenericExternalResult(int in_id,const char* in_result_name,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+ 			id        = in_id;
+-			enum_type = -1;
+-			enum_string = xNew<char>(strlen(in_enum_string)+1); xMemCpy<char>(enum_string,in_enum_string,strlen(in_enum_string)+1);
+ 			value     = in_value;
+ 			step      = in_step;
+ 			time      = in_time;
++
++			/*Copy name*/
++			this->result_name = xNew<char>(strlen(in_result_name)+1);
++			xMemCpy<char>(this->result_name,in_result_name,strlen(in_result_name)+1);
+ 		}
+ 		/*}}}*/
+ 		~GenericExternalResult(){ /*{{{*/
+-			if(enum_string)xDelete<char>(enum_string);
++			xDelete<char>(result_name);
+ 		} /*}}}*/
+ 
+ 		/*Object virtual functions definitions:*/
+@@ -121,8 +113,7 @@
+ 			_error_("template ObjectEnum not implemented for this ResultType\n");
+ 		} /*}}}*/
+ 		Object* copy(void) { /*{{{*/
+-			if(enum_type!=-1) return new GenericExternalResult<ResultType>(this->id,this->enum_type,this->value,this->step,this->time);
+-			else              return new GenericExternalResult<ResultType>(this->id,this->enum_string,this->value,this->step,this->time);
++			return new GenericExternalResult<ResultType>(this->id,this->result_name,this->value,this->step,this->time);
+ 		} /*}}}*/
+ 
+ 		/*GenericExternalResult management: */
+@@ -153,19 +144,14 @@
+ 	fwrite(&passiveDouble,size*sizeof(IssmPDouble),1,fid);
+ 
+ } /*}}}*/
+-void GetResultName(char** pname){ /*{{{*/
+-	if(this->enum_type!=-1)EnumToStringx(pname,this->enum_type);
+-	else{
+-		char* name=xNew<char>(strlen(enum_string)+1); xMemCpy<char>(name,enum_string,strlen(enum_string)+1);
+-		*pname=name;
+-	}
++char* GetResultName(void){ /*{{{*/
++		char* name = xNew<char>(strlen(this->result_name)+1);
++		xMemCpy<char>(name,this->result_name,strlen(this->result_name)+1);
++		return name;
+ } /*}}}*/
+ int GetStep(void){ /*{{{*/
+ 	return this->step;
+ } /*}}}*/
+-int InstanceEnum(void){ /*{{{*/
+-	return this->enum_type;
+-} /*}}}*/
+ };
+ 
+ /*Specific instantiations for bool: */
+@@ -207,15 +193,18 @@
+ /*Specific instantiations for char*: */
+ template <> inline GenericExternalResult<char*>::GenericExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmDouble in_time){ /*{{{*/
+ 
+-	id=in_id;
+-	enum_type=in_enum_type;
+-	value=xNew<char>(strlen(in_value)+1);
++	id = in_id;
++	value = xNew<char>(strlen(in_value)+1);
+ 	xMemCpy<char>(value,in_value,(strlen(in_value)+1));
+-	step=in_step;
+-	time=in_time;
++	step  = in_step;
++	time  = in_time;
+ 
++	/*Convert enum to name*/
++	EnumToStringx(&this->result_name,in_enum_type);
++
+ } /*}}}*/
+ template <> inline GenericExternalResult<char*>::~GenericExternalResult(){ /*{{{*/
++	xDelete<char>(result_name);
+ 	xDelete<char>(value);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<char*>::DeepEcho(void){ /*{{{*/
+@@ -256,14 +245,15 @@
+ /*Specific instantiations for IssmPDouble*: */
+ template <> inline GenericExternalResult<IssmPDouble*>::GenericExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
+ 
+-	id=in_id;
+-	enum_type=in_enum_type;
+-	M=in_M;
+-	N=in_N;
++	id = in_id;
++	M  = in_M;
++	N  = in_N;
+ 
+-	step=in_step;
+-	time=in_time;
++	EnumToStringx(&this->result_name,in_enum_type);
+ 
++	step = in_step;
++	time = in_time;
++
+ 	/*Copy result in values*/
+ 	if(M*N){
+ 		value=xNew<IssmPDouble>(M*N);
+@@ -276,6 +266,7 @@
+ 	_error_("you cannot initialize a GenericExternalResult<IssmPDouble*> without providing the dimensions of the matrix! Please use a more appropriate constructor!");
+ } /*}}}*/
+ template <> inline GenericExternalResult<IssmPDouble*>::~GenericExternalResult(){ /*{{{*/
++	xDelete<char>(result_name);
+ 	xDelete<IssmPDouble>(value);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::Echo(void){ /*{{{*/
+@@ -303,12 +294,11 @@
+ 
+ } /*}}}*/
+ template <> inline Object* GenericExternalResult<IssmPDouble*>::copy(void){ /*{{{*/
+-	return new GenericExternalResult<IssmPDouble*>(this->id,this->enum_type,this->value,this->M,this->N,this->step,this->time);
++	return new GenericExternalResult<IssmPDouble*>(this->id,StringToEnumx(this->result_name),this->value,this->M,this->N,this->step,this->time);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+ 	int     my_rank;
+-	int     length;
+ 	int     type;
+ 	int     rows,cols;
+ 	char   *name    = NULL;
+@@ -323,11 +313,9 @@
+ 	}
+ 
+ 	/*First write enum: */
+-	EnumToStringx(&name,this->enum_type);
+-	length=(strlen(name)+1)*sizeof(char);
++	int length=(strlen(this->result_name)+1)*sizeof(char);
+ 	fwrite(&length,sizeof(int),1,fid);
+-	fwrite(name,length,1,fid);
+-	xDelete<char>(name);
++	fwrite(this->result_name,length,1,fid);
+ 
+ 	/*Now write time and step: */
+ 	passiveDouble=reCast<IssmPDouble>(time);
+@@ -355,17 +343,20 @@
+ }
+ /*}}}*/
+ template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_value,int in_step, IssmDouble in_time){ /*{{{*/
+-	id=in_id;
+-	enum_type=in_enum_type;
+-	M=0;
+-	N=0;
++	id = in_id;
++	M  = 0;
++	N  = 0;
+ 
+-	step=in_step;
+-	time=in_time;
++	/*Convert enum to name*/
++	EnumToStringx(&this->result_name,in_enum_type);
+ 
++	step = in_step;
++	time = in_time;
++
+ 	value = in_value;
+ } /*}}}*/
+ template <> inline GenericExternalResult<Vector<IssmPDouble>*>::~GenericExternalResult(){ /*{{{*/
++	xDelete<char>(this->result_name);
+ 	delete value;
+ } /*}}}*/
+ template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::Echo(void){ /*{{{*/
+@@ -381,7 +372,7 @@
+ 
+ } /*}}}*/
+ template <> inline Object* GenericExternalResult<Vector<IssmPDouble>*>::copy(void){ /*{{{*/
+-	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,this->enum_type,this->value,this->step,this->time);
++	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,StringToEnumx(this->result_name),this->value,this->step,this->time);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+@@ -397,12 +388,10 @@
+ 	this->value->GetSize(&rows);
+ 
+ 	if(IssmComm::GetRank()==0){
+-		/*First write enum: */
+-		EnumToStringx(&name,this->enum_type);
+-		length=(strlen(name)+1)*sizeof(char);
++		/*First write name: */
++		length=(strlen(this->result_name)+1)*sizeof(char);
+ 		fwrite(&length,sizeof(int),1,fid);
+-		fwrite(name,length,1,fid);
+-		xDelete<char>(name);
++		fwrite(this->result_name,length,1,fid);
+ 
+ 		/*Now write time and step: */
+ 		IssmPDouble passiveDouble=reCast<IssmPDouble>(time);
+Index: ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16474)
+@@ -24,9 +24,8 @@
+ 
+ 		virtual        ~ExternalResult(){};
+ 		/*Virtual functions:{{{*/
+-		virtual int   InstanceEnum()=0;
+ 		virtual void  WriteData(FILE* fid,bool io_gather)=0;
+-		virtual void  GetResultName(char**)=0;
++		virtual char* GetResultName(void)=0;
+ 		virtual int   GetStep(void)=0;
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16474)
+@@ -36,7 +36,7 @@
+ 		int     NumberOfNodalValues(void);
+ 		/*}}}*/
+ 		/*TriaP1ElementResult management: {{{*/
+-		int   InstanceEnum();
++		char* GetResultName();
+ 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+ 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16474)
+@@ -70,10 +70,12 @@
+ /*}}}*/
+ 
+ /*ElementResult management*/
+-/*FUNCTION PentaP1ElementResult::InstanceEnum{{{*/
+-int PentaP1ElementResult::InstanceEnum(void){
++/*FUNCTION PentaP1ElementResult::GetResultName{{{*/
++char* PentaP1ElementResult::GetResultName(void){
+ 
+-	return this->enum_type;
++	char* output = NULL;
++	EnumToStringx(&output,this->enum_type);
++	return output;
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16474)
+@@ -67,10 +67,12 @@
+ /*}}}*/
+ 
+ /*ElementResult management*/
+-/*FUNCTION DoubleElementResult::InstanceEnum{{{*/
+-int DoubleElementResult::InstanceEnum(void){
++/*FUNCTION DoubleElementResult::GetResultName{{{*/
++char* DoubleElementResult::GetResultName(void){
+ 
+-	return this->enum_type;
++	char* output = NULL;
++	EnumToStringx(&output,this->enum_type);
++	return output;
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16474)
+@@ -67,10 +67,12 @@
+ /*}}}*/
+ 
+ /*ElementResult management*/
+-/*FUNCTION BoolElementResult::InstanceEnum{{{*/
+-int BoolElementResult::InstanceEnum(void){
++/*FUNCTION BoolElementResult::GetResultName{{{*/
++char* BoolElementResult::GetResultName(void){
+ 
+-	return this->enum_type;
++	char* output = NULL;
++	EnumToStringx(&output,this->enum_type);
++	return output;
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16474)
+@@ -37,7 +37,7 @@
+ 		int     NumberOfNodalValues(void);
+ 		/*}}}*/
+ 		/*PentaP1ElementResult management: {{{*/
+-		int   InstanceEnum();
++		char* GetResultName();
+ 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+ 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16474)
+@@ -38,7 +38,7 @@
+ 		int     NumberOfNodalValues(void);
+ 
+ 		/*DoubleElementResult management*/
+-		int  InstanceEnum();
++		char* GetResultName();
+ 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+ 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+ };
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16474)
+@@ -38,9 +38,9 @@
+ 		int     NumberOfNodalValues(void);
+ 		/*}}}*/
+ 		/*BoolElementResult management: {{{*/
+-		int   InstanceEnum();
+-		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+-		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
++		char* GetResultName();
++		void  GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
++		void  GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+ 		/*}}}*/
+ };
+ #endif  /* _BOOLELEMENTRESULT_H */
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16474)
+@@ -69,10 +69,12 @@
+ /*}}}*/
+ 
+ /*ElementResult management*/
+-/*FUNCTION TriaP1ElementResult::InstanceEnum{{{*/
+-int TriaP1ElementResult::InstanceEnum(void){
++/*FUNCTION TriaP1ElementResult::GetResultName{{{*/
++char* TriaP1ElementResult::GetResultName(void){
+ 
+-	return this->enum_type;
++	char* output = NULL;
++	EnumToStringx(&output,this->enum_type);
++	return output;
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16473)
++++ ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16474)
+@@ -17,7 +17,7 @@
+ 		virtual IssmDouble GetTime(void) = 0;
+ 		virtual int        GetStep(void) = 0;
+ 		virtual int        NumberOfNodalValues(void) = 0;
+-		virtual int        InstanceEnum() = 0;
++		virtual char*      GetResultName() = 0;
+ 		virtual void       GetVectorFromResults(Vector <IssmDouble> *vector,int*doflist,int*connectivitylist,int numdof)=0;
+ 		virtual void       GetElementVectorFromResults(Vector <IssmDouble> *vector,int dof)=0;
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16474)
+@@ -1553,9 +1553,6 @@
+ 
+ 	/*Get result*/
+ 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+-	if(elementresult->InstanceEnum()!=enum_in){
+-		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
+-	}
+ 	if(interp==P1Enum){
+ 		int vertexpidlist[NUMVERTICES];
+ 		int connectivity[NUMVERTICES];
+@@ -2397,7 +2394,7 @@
+ 		/*populate enums*/
+ 		for(int i=0;i<this->results->Size();i++){
+ 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-			resultsenums[i]=elementresult->InstanceEnum();
++			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
+ 			resultstimes[i]=elementresult->GetTime();
+ 			resultssteps[i]=elementresult->GetStep();
+ 			if(elementresult->ObjectEnum()==TriaP1ElementResultEnum){
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16473)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16474)
+@@ -1660,9 +1660,6 @@
+ 
+ 	/*Get result*/
+ 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+-	if(elementresult->InstanceEnum()!=enum_in){
+-		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
+-	}  
+ 	if(interp==P1Enum){
+ 		int vertexpidlist[NUMVERTICES];
+ 		int connectivity[NUMVERTICES];
+@@ -2807,7 +2804,7 @@
+ 		/*populate enums*/
+ 		for(int i=0;i<this->results->Size();i++){
+ 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-			resultsenums[i]=elementresult->InstanceEnum();
++			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
+ 			resultstimes[i]=elementresult->GetTime();
+ 			resultssteps[i]=elementresult->GetStep();
+ 			if(elementresult->ObjectEnum()==PentaP1ElementResultEnum){
Index: issm/oecreview/Archive/16133-16554/ISSM-16474-16475.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16474-16475.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16474-16475.diff	(revision 16556)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/m/geometry/NowickiProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16474)
++++ ../trunk-jpl/src/m/geometry/NowickiProfile.m	(revision 16475)
+@@ -11,6 +11,7 @@
+ %Constant for theoretical profile
+ delta = 0.1;          % ratio of water density and ice density -1
+ hg    = 1;            % ice thickness at grounding line
++sea   = hg/(1+delta); % sea level
+ lamda = 0.1;          % ration of deviatoric stress and water pressure
+ beta  = 5;            % friction coefficient
+ ms    = 0.005;        % surface accumulation rat
+@@ -34,5 +35,5 @@
+ %downstream of the GL
+ for i = ceil(numel(x)/2):numel(x)
+ 	h(i) = (x(i)/(4*(delta+1)*q)+hg^(-2))^(-0.5); % ice thickness for ice shelf from (3.1)
+-	b(i) = -h(i)*(1/(1+delta));
++	b(i) = sea-h(i)*(1/(1+delta));
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16475-16476.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16475-16476.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16475-16476.diff	(revision 16556)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16475)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16476)
+@@ -46,12 +46,9 @@
+ 		InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
+ 
+ 		/*Post process*/
+-		PostprocessingEnthalpyx(femmodel);
++		if(solution_type!=SteadystateSolutionEnum) PostprocessingEnthalpyx(femmodel);
+ 	}
+ 	else{
+-		if(VerboseSolution()) _printf0_("   setting basal Dirichlet boundary conditions\n");
+-		femmodel->UpdateBasalConstraintsEnthalpyx();
+-
+ 		if(VerboseSolution()) _printf0_("   computing temperatures\n");
+ 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+ 		solutionsequence_thermal_nonlinear(femmodel);
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16475)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16476)
+@@ -51,7 +51,7 @@
+ 		if(VerboseSolution()) _printf0_("   computing temperature and velocity for step: " << step << "\n");
+ 		#ifdef _HAVE_THERMAL_
+ 		thermal_core(femmodel);
+-		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);/*Could be MeltingAnalysis...*/
++		if(!isenthalpy)femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);/*Could be MeltingAnalysis...*/
+ 		GetSolutionFromInputsx(&tg,femmodel);
+ 		#else
+ 		_error_("ISSM was not compiled with thermal capabilities. Exiting");
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16475)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16476)
+@@ -1401,14 +1401,3 @@
+ }
+ /*}}}*/
+ #endif
+-#ifdef _HAVE_THERMAL_
+-void FemModel::UpdateBasalConstraintsEnthalpyx(void){ /*{{{*/
+-
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->UpdateBasalConstraintsEnthalpy();
+-	}
+-
+-}
+-/*}}}*/
+-#endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16475)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16476)
+@@ -102,9 +102,6 @@
+ 		void HydrologyTransferx(void);
+ 		void HydrologyEPLupdateDomainx(void);
+ 		#endif
+-		#ifdef _HAVE_THERMAL_
+-		void UpdateBasalConstraintsEnthalpyx(void);
+-		#endif
+ };
+ 
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16476-16477.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16476-16477.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16476-16477.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 16476)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 16477)
+@@ -20,7 +20,7 @@
+ 	return;
+ end
+ 
+-if isempty(data)
++if ~isempty(data)
+ 	%first load x,y, etc ... to speed up plot
+ 
+ 	if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
Index: issm/oecreview/Archive/16133-16554/ISSM-16477-16478.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16477-16478.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16477-16478.diff	(revision 16556)
@@ -0,0 +1,476 @@
+Index: ../trunk-jpl/src/c/analyses/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16478)
+@@ -49,8 +49,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,GiaWEnum);
+-		InputToResultx(femmodel,GiadWdtEnum);
++		const char* outputs [] = {"GiaW","GiadWdt"};
++		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16478)
+@@ -161,14 +161,14 @@
+ 		/*unload results*/
+ 		if(save_results){
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+-			InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
+-			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
++			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 			if(isdelta18o){
+-				InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
+-				InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
++				const char* outputs [] = {"SurfaceforcingsMonthlytemperatures","SurfaceforcingsPrecipitation"};
++				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				InputToResultx(femmodel,MaskGroundediceLevelsetEnum);
++				const char* outputs [] = {"MaskGroundediceLevelset"};
++				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 			}
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+ 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16478)
+@@ -33,6 +33,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		InputToResultx(femmodel,DamageDEnum);
++		const char* outputs [] = {"DamageD"};
++		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16478)
+@@ -87,8 +87,6 @@
+ 			solutionsequence_hydro_nonlinear(femmodel);
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+-				InputToResultx(femmodel,SedimentHeadEnum);
+-				InputToResultx(femmodel,SedimentHeadResidualEnum);
+ 				if(isefficientlayer){
+ 					const char* outputs [] = {"SedimentHead","SedimentHeadResidual","EplHead","HydrologydcMaskEplactive"};
+ 					femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],4);
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16478)
+@@ -97,7 +97,7 @@
+ 
+ 	/*some results not computed by steadystate_core or stressbalance_core: */
+ 	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
+-		for(i=0;i<num_controls;i++) InputToResultx(femmodel,control_type[i]);
++		femmodel->OutputControlsx(&femmodel->results);
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 		IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16478)
+@@ -638,6 +638,24 @@
+ 	*presults = results;
+ }
+ /*}}}*/
++void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
++
++	/*Convert list of enums to list of string*/
++	char** enumlist = xNew<char*>(numoutputs);
++	for(int i=0;i<numoutputs;i++){
++		EnumToStringx(&enumlist[i],requested_outputs[i]);
++	}
++
++	/*Call main module*/
++	this->RequestedOutputsx(presults,enumlist,numoutputs);
++
++
++	/*clean up and return*/
++	for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
++	xDelete<char*>(enumlist);
++	return;
++}
++/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+@@ -1206,6 +1224,52 @@
+ 	*pJ=J;
+ }
+ /*}}}*/
++void FemModel::OutputControlsx(Results **presults){/*{{{*/
++
++	/*parameters: */
++	int         num_controls,step;
++	IssmDouble  time;
++	int        *control_type = NULL;
++
++	/*recover results*/
++	Results* results = *presults;
++	if(!results) results = new Results();
++
++	/*Get list of Controls*/
++	this->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	this->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++	this->parameters->FindParam(&step,StepEnum);
++	this->parameters->FindParam(&time,TimeEnum);
++
++	for(int i=0;i<num_controls;i++){
++
++		int control_enum = control_type[i];
++		int gradient_enum;
++
++		switch(i){
++			case 0: gradient_enum = Gradient1Enum; break;
++			case 1: gradient_enum = Gradient2Enum; break;
++			case 2: gradient_enum = Gradient3Enum; break;
++			default: _error_("more than 3 controls not implemented yet");
++		}
++
++		/*Allocate vector*/
++		Vector<IssmPDouble> *vector_control  = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
++		Vector<IssmPDouble> *vector_gradient = new Vector<IssmPDouble>(this->vertices->NumberOfVertices());
++
++		/*Fill in vector*/
++		for(int j=0;j<elements->Size();j++){
++			Element* element=(Element*)elements->GetObjectByOffset(j);
++			element->ControlToVectors(vector_control,vector_gradient,control_enum);
++		}
++		vector_control->Assemble();
++		vector_gradient->Assemble();
++
++		results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,control_enum,vector_control ,step,time));
++		results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,gradient_enum,vector_gradient,step,time));
++	}
++}
++/*}}}*/
+ #endif
+ #ifdef  _HAVE_DAKOTA_
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16478)
+@@ -120,6 +120,7 @@
+ 		virtual void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
++		virtual void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum)=0;
+ 		virtual void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
+ 		virtual void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
+ 		virtual void   InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16478)
+@@ -4872,6 +4872,42 @@
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+ }/*}}}*/
++/*FUNCTION Tria::ControlInputSetGradient{{{*/
++void Tria::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
++
++	Input* input=NULL;
++	if(control_enum==MaterialsRheologyBbarEnum || control_enum==DamageDbarEnum){
++		input=(Input*)material->inputs->GetInput(control_enum);
++	}
++	else{
++		input=inputs->GetInput(control_enum);
++	}
++	if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
++	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
++
++	int          sidlist[NUMVERTICES];
++	IssmPDouble   values[NUMVERTICES];
++	IssmPDouble gradients[NUMVERTICES]; 
++	IssmDouble  value,gradient;
++
++	GetVertexSidList(&sidlist[0]);
++
++	GaussTria* gauss=new GaussTria();
++	for (int iv=0;iv<NUMVERTICES;iv++){
++		gauss->GaussVertex(iv);
++
++		((ControlInput*)input)->GetInputValue(&value,gauss);
++		((ControlInput*)input)->GetGradientValue(&gradient,gauss);
++
++		values[iv]    = reCast<IssmPDouble>(value);
++		gradients[iv] = reCast<IssmPDouble>(gradient);
++	}
++	delete gauss;
++
++	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
++	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
++
++}/*}}}*/
+ /*FUNCTION Tria::Gradj {{{*/
+ void  Tria::Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index){
+ 	/*dJ/dalpha = ∂L/∂alpha = ∂J/∂alpha + ∂/∂alpha(KU-F)*/
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16478)
+@@ -160,6 +160,7 @@
+ 		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void       ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
++		void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
+ 		IssmDouble RheologyBbarAbsGradient(void);
+ 		IssmDouble ThicknessAbsMisfit(void);
+ 		IssmDouble SurfaceAbsVelMisfit(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16478)
+@@ -5331,6 +5331,46 @@
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+ }/*}}}*/
++/*FUNCTION Penta::ControlInputSetGradient{{{*/
++void Penta::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
++
++	Input* input=NULL;
++
++	if(control_enum==MaterialsRheologyBbarEnum){
++		input=(Input*)material->inputs->GetInput(MaterialsRheologyBEnum);
++	}
++	else if(control_enum==DamageDbarEnum){
++		input=(Input*)material->inputs->GetInput(DamageDEnum);
++	}
++	else{
++		input=inputs->GetInput(control_enum);
++	}
++	if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
++	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
++
++	int          sidlist[NUMVERTICES];
++	IssmPDouble   values[NUMVERTICES];
++	IssmPDouble gradients[NUMVERTICES]; 
++	IssmDouble  value,gradient;
++
++	GetVertexSidList(&sidlist[0]);
++
++	GaussPenta* gauss=new GaussPenta();
++	for (int iv=0;iv<NUMVERTICES;iv++){
++		gauss->GaussVertex(iv);
++
++		((ControlInput*)input)->GetInputValue(&value,gauss);
++		((ControlInput*)input)->GetGradientValue(&gradient,gauss);
++
++		values[iv]    = reCast<IssmPDouble>(value);
++		gradients[iv] = reCast<IssmPDouble>(gradient);
++	}
++	delete gauss;
++
++	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
++	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
++
++}/*}}}*/
+ /*FUNCTION Penta::CreateKMatrixAdjointHoriz{{{*/
+ ElementMatrix* Penta::CreateKMatrixAdjointHoriz(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16478)
+@@ -151,6 +151,7 @@
+ 		void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void   ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
++		void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
+ 		IssmDouble RheologyBbarAbsGradient(void);
+ 		IssmDouble ThicknessAbsMisfit(void);
+ 		IssmDouble SurfaceAbsVelMisfit(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16478)
+@@ -171,6 +171,7 @@
+ 		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index){_error_("not implemented yet");};
+ 		void       ControlInputScaleGradient(int enum_type,IssmDouble scale){_error_("not implemented yet");};
+ 		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
++		void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
+ 		IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
+ 		IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
+ 		IssmDouble SurfaceAbsVelMisfit(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16478)
+@@ -138,6 +138,13 @@
+ 	savedvalues->Extrude();
+ 	//gradient->Extrude();
+ }/*}}}*/
++/*FUNCTION ControlInput::GetResultInterpolation{{{*/
++int  ControlInput::GetResultInterpolation(void){
++
++	return values->GetResultInterpolation();
++
++}
++/*}}}*/
+ /*FUNCTION ControlInput::GetGradient{{{*/
+ void ControlInput::GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){
+ 	if(gradient) gradient->GetVectorFromInputs(gradient_vec,doflist);
+@@ -244,6 +251,14 @@
+ void ControlInput::GetInputValue(IssmDouble* pvalue,GaussPenta* gauss){
+ 	values->GetInputValue(pvalue,gauss);
+ }/*}}}*/
++/*FUNCTION ControlInput::GetGradientValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
++void ControlInput::GetGradientValue(IssmDouble* pvalue,GaussTria* gauss){
++	gradient->GetInputValue(pvalue,gauss);
++}/*}}}*/
++/*FUNCTION ControlInput::GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss){{{*/
++void ControlInput::GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss){
++	gradient->GetInputValue(pvalue,gauss);
++}/*}}}*/
+ /*FUNCTION ControlInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){{{*/
+ void ControlInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, GaussTria* gauss){
+ 	values->GetInputDerivativeValue(derivativevalues,xyz_list,gauss);
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16478)
+@@ -47,6 +47,8 @@
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+ 		/*numerics: {{{*/
++		void GetGradientValue(IssmDouble* pvalue,GaussTria* gauss);
++		void GetGradientValue(IssmDouble* pvalue,GaussPenta* gauss);
+ 		void SetInput(Input* in_input);
+ 		void GetInputValue(bool* pvalue);
+ 		void GetInputValue(int* pvalue);
+@@ -89,7 +91,7 @@
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+ 		ElementResult* SpawnGradient(int step, IssmDouble time);
+-		int  GetResultInterpolation(void){_error_("not implemented yet");};
++		int  GetResultInterpolation(void);
+ 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist);
+ 		void ScaleGradient(IssmDouble scale);
+ 		void SetGradient(Input* gradient_in);
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16477)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16478)
+@@ -81,12 +81,14 @@
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
++		void RequestedOutputsx(Results **presults,int* requested_outputs,int numoutputs);
+ 		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
+ 		void RequestedOutputsx(char** requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor);
+ 		#ifdef _HAVE_CONTROL_
++		void OutputControlsx(Results **presults);
+ 		void CostFunctionx( IssmDouble* pJ);
+ 		void ThicknessAbsGradientx( IssmDouble* pJ);
+ 		#endif
+Index: ../trunk-jpl/src/m/classes/transient.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.py	(revision 16477)
++++ ../trunk-jpl/src/m/classes/transient.py	(revision 16478)
+@@ -33,15 +33,22 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','list of additional outputs requested'))
+ 		return string
+ 		#}}}
++	def defaultoutputs(self,md): # {{{
++
++		return ['SurfaceforcingsMassBalance']
++
++	#}}}
+ 	def setdefaultparameters(self): # {{{
+ 		
+ 		#full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+-		self.ismasstransport=True
+-		self.isstressbalance=True
+-		self.isthermal=True
+-		self.isgroundingline=False
+-		self.isgia=False
++		self.ismasstransport = True
++		self.isstressbalance = True
++		self.isthermal       = True
++		self.isgroundingline = False
++		self.isgia           = False
+ 
++		#default output
++		self.requested_outputs=['default']
+ 		return self
+ 	#}}}
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+@@ -65,6 +72,12 @@
+ 		WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isgia','format','Boolean')
+-		WriteData(fid,'object',self,'fieldname','requested_outputs','format','StringArray')
++
++		#process requested outputs
++		outputs = self.requested_outputs
++		indices = [i for i, x in enumerate(outputs) if x == 'default']
++		if len(indices) > 0:
++			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
++			outputs    =outputscopy
++		WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray')
+ 	# }}}
+-
+Index: ../trunk-jpl/src/m/classes/transient.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/transient.m	(revision 16477)
++++ ../trunk-jpl/src/m/classes/transient.m	(revision 16478)
+@@ -25,14 +25,21 @@
+ 		function obj = setdefaultparameters(obj) % {{{
+ 
+ 			%full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
+-			obj.ismasstransport=1;
+-			obj.isstressbalance=1;
+-			obj.isthermal=1;
+-			obj.isgroundingline=0;
+-			obj.isgia=0;
+-			obj.isdamage=0;
++			obj.ismasstransport = 1;
++			obj.isstressbalance = 1;
++			obj.isthermal       = 1;
++			obj.isgroundingline = 0;
++			obj.isgia           = 0;
++			obj.isdamage        = 0;
+ 
++			%default output
++			obj.requested_outputs={'default'};
+ 		end % }}}
++		function list = defaultoutputs(self,md) % {{{
++
++			list = {'SurfaceforcingsMassBalance'};
++
++		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+ 			%Early return
+@@ -66,7 +73,15 @@
+ 			WriteData(fid,'object',obj,'fieldname','isgroundingline','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isgia','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','isdamage','format','Boolean');
+-			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','StringArray');
++
++			%process requested outputs
++			outputs = obj.requested_outputs;
++			pos  = find(ismember(outputs,'default'));
++			if ~isempty(pos),
++				outputs(pos) = [];                         %remove 'default' from outputs
++				outputs      = [outputs defaultoutputs(obj,md)]; %add defaults
++			end
++			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
+ 		end % }}}
+ 	end
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16478-16479.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16478-16479.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16478-16479.diff	(revision 16556)
@@ -0,0 +1,148 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16478)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16479)
+@@ -2591,16 +2591,17 @@
+ 			_error_("not implemented...");
+ 			break;
+ 		case P1Enum:{
+-
+-			IssmDouble   values[NUMVERTICES];
++			IssmDouble  values[NUMVERTICES];
+ 			IssmPDouble pvalues[NUMVERTICES]; 
+-			int          sidlist[NUMVERTICES];
++			int         connectivity[NUMVERTICES];
++			int         sidlist[NUMVERTICES];
+ 
+-			GetVertexSidList(&sidlist[0]);
+-			GetInputListOnVertices(&values[0],output_enum);
+-			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
++			this->GetVertexSidList(&sidlist[0]);
++			this->GetConnectivityList(&connectivity[0]);
++			this->GetInputListOnVertices(&values[0],output_enum);
++			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i])/reCast<IssmPDouble>(connectivity[i]);
+ 
+-			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],INS_VAL);
++			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],ADD_VAL);
+ 			break;
+ 					}
+ 		default:
+@@ -4872,7 +4873,7 @@
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+ }/*}}}*/
+-/*FUNCTION Tria::ControlInputSetGradient{{{*/
++/*FUNCTION Tria::ControlToVectors{{{*/
+ void Tria::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
+ 
+ 	Input* input=NULL;
+@@ -4885,12 +4886,14 @@
+ 	if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
+ 
+-	int          sidlist[NUMVERTICES];
+-	IssmPDouble   values[NUMVERTICES];
++	int         sidlist[NUMVERTICES];
++	int         connectivity[NUMVERTICES];
++	IssmPDouble values[NUMVERTICES];
+ 	IssmPDouble gradients[NUMVERTICES]; 
+ 	IssmDouble  value,gradient;
+ 
+-	GetVertexSidList(&sidlist[0]);
++	this->GetConnectivityList(&connectivity[0]);
++	this->GetVertexSidList(&sidlist[0]);
+ 
+ 	GaussTria* gauss=new GaussTria();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+@@ -4899,13 +4902,13 @@
+ 		((ControlInput*)input)->GetInputValue(&value,gauss);
+ 		((ControlInput*)input)->GetGradientValue(&gradient,gauss);
+ 
+-		values[iv]    = reCast<IssmPDouble>(value);
+-		gradients[iv] = reCast<IssmPDouble>(gradient);
++		values[iv]    = reCast<IssmPDouble>(value)/reCast<IssmPDouble>(connectivity[iv]);
++		gradients[iv] = reCast<IssmPDouble>(gradient)/reCast<IssmPDouble>(connectivity[iv]);
+ 	}
+ 	delete gauss;
+ 
+-	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
+-	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
++	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL);
++	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],ADD_VAL);
+ 
+ }/*}}}*/
+ /*FUNCTION Tria::Gradj {{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16478)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16479)
+@@ -3037,16 +3037,17 @@
+ 			_error_("not implemented...");
+ 			break;
+ 		case P1Enum:{
+-
+-			IssmDouble   values[NUMVERTICES];
++			IssmDouble  values[NUMVERTICES];
+ 			IssmPDouble pvalues[NUMVERTICES]; 
+-			int          sidlist[NUMVERTICES];
++			int         connectivity[NUMVERTICES];
++			int         sidlist[NUMVERTICES];
+ 
+-			GetVertexSidList(&sidlist[0]);
+-			GetInputListOnVertices(&values[0],output_enum);
+-			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i]);
++			this->GetVertexSidList(&sidlist[0]);
++			this->GetConnectivityList(&connectivity[0]);
++			this->GetInputListOnVertices(&values[0],output_enum);
++			for(int i=0;i<NUMVERTICES;i++) pvalues[i] = reCast<IssmPDouble>(values[i])/reCast<IssmPDouble>(connectivity[i]);
+ 
+-			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],INS_VAL);
++			vector->SetValues(NUMVERTICES,&sidlist[0],&pvalues[0],ADD_VAL);
+ 			break;
+ 					}
+ 		default:
+@@ -5331,7 +5332,7 @@
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+ }/*}}}*/
+-/*FUNCTION Penta::ControlInputSetGradient{{{*/
++/*FUNCTION Penta::ControlToVectors{{{*/
+ void Penta::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
+ 
+ 	Input* input=NULL;
+@@ -5348,12 +5349,14 @@
+ 	if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");
+ 
+-	int          sidlist[NUMVERTICES];
+-	IssmPDouble   values[NUMVERTICES];
++	int         sidlist[NUMVERTICES];
++	int         connectivity[NUMVERTICES];
++	IssmPDouble values[NUMVERTICES];
+ 	IssmPDouble gradients[NUMVERTICES]; 
+ 	IssmDouble  value,gradient;
+ 
+-	GetVertexSidList(&sidlist[0]);
++	this->GetConnectivityList(&connectivity[0]);
++	this->GetVertexSidList(&sidlist[0]);
+ 
+ 	GaussPenta* gauss=new GaussPenta();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+@@ -5362,13 +5365,13 @@
+ 		((ControlInput*)input)->GetInputValue(&value,gauss);
+ 		((ControlInput*)input)->GetGradientValue(&gradient,gauss);
+ 
+-		values[iv]    = reCast<IssmPDouble>(value);
+-		gradients[iv] = reCast<IssmPDouble>(gradient);
++		values[iv]    = reCast<IssmPDouble>(value)/reCast<IssmPDouble>(connectivity[iv]);
++		gradients[iv] = reCast<IssmPDouble>(gradient)/reCast<IssmPDouble>(connectivity[iv]);
+ 	}
+ 	delete gauss;
+ 
+-	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],INS_VAL);
+-	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],INS_VAL);
++	vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL);
++	vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],ADD_VAL);
+ 
+ }/*}}}*/
+ /*FUNCTION Penta::CreateKMatrixAdjointHoriz{{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16479-16480.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16479-16480.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16479-16480.diff	(revision 16556)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 16480)
+@@ -26,7 +26,7 @@
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+-	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.MaterialsRheologyBbar),...
+ 	(md.results.StressbalanceSolution.Pressure),...
+ 	(md.results.StressbalanceSolution.Vel),...
+ 	(md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 16480)
+@@ -26,7 +26,7 @@
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+-	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.MaterialsRheologyBbar),...
+ 	(md.results.StressbalanceSolution.Pressure),...
+ 	(md.results.StressbalanceSolution.Vel),...
+ 	(md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 16480)
+@@ -43,7 +43,7 @@
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
+-	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.MaterialsRheologyBbar,\
+ 	md.results.StressbalanceSolution.Pressure,\
+ 	md.results.StressbalanceSolution.Vel,\
+ 	md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 16480)
+@@ -42,7 +42,7 @@
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
+-	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.MaterialsRheologyBbar,\
+ 	md.results.StressbalanceSolution.Pressure,\
+ 	md.results.StressbalanceSolution.Vel,\
+ 	md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 16480)
+@@ -42,7 +42,7 @@
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
+-	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.MaterialsRheologyBbar,\
+ 	md.results.StressbalanceSolution.Pressure,\
+ 	md.results.StressbalanceSolution.Vel,\
+ 	md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 16479)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 16480)
+@@ -29,7 +29,7 @@
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	md.results.StressbalanceSolution.J,...
+-	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.MaterialsRheologyBbar),...
+ 	(md.results.StressbalanceSolution.Pressure),...
+ 	(md.results.StressbalanceSolution.Vel),...
+ 	(md.results.StressbalanceSolution.Vx),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16480-16481.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16480-16481.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16480-16481.diff	(revision 16556)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16480)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16481)
+@@ -357,6 +357,16 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION TransientInput::GetResultInterpolation{{{*/
++int  TransientInput::GetResultInterpolation(void){
++
++	IssmDouble time;
++	parameters->FindParam(&time,TimeEnum);
++	Input* input=GetTimeInput(time);
++	return input->GetResultInterpolation();
++
++}
++/*}}}*/
+ /*FUNCTION TransientInput::Extrude{{{*/
+ void TransientInput::Extrude(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16480)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16481)
+@@ -43,7 +43,7 @@
+ 		Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
+ 		ElementResult* SpawnResult(int step, IssmDouble time);
+-		int  GetResultInterpolation(void){_error_("not implemented");};
++		int  GetResultInterpolation(void);
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+ 		/*numerics: {{{*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16481-16482.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16481-16482.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16481-16482.diff	(revision 16556)
@@ -0,0 +1,78 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 16482)
+@@ -42,7 +42,7 @@
+ field_values=[\
+ 	md.results.StressbalanceSolution.Gradient1,\
+ 	md.results.StressbalanceSolution.J,\
+-	md.results.StressbalanceSolution.MaterialsRheologyB,\
++	md.results.StressbalanceSolution.MaterialsRheologyBbar,\
+ 	md.results.StressbalanceSolution.Pressure,\
+ 	md.results.StressbalanceSolution.Vel,\
+ 	md.results.StressbalanceSolution.Vx,\
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 16482)
+@@ -7,7 +7,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.href=md.geometry.surface;
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs={'TotalSmb'};
++md.transient.requested_outputs={'default','TotalSmb'};
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test329.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.py	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test329.py	(revision 16482)
+@@ -19,7 +19,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+ md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs=['TotalSmb']
++md.transient.requested_outputs=['default','TotalSmb']
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 16482)
+@@ -8,7 +8,7 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.href=md.geometry.surface;
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+-md.transient.requested_outputs={'TotalSmb'};
++md.transient.requested_outputs={'default','TotalSmb'};
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 16482)
+@@ -31,7 +31,7 @@
+ field_values={...
+ 	(md.results.StressbalanceSolution.Gradient1),...
+ 	(md.results.StressbalanceSolution.J),...
+-	(md.results.StressbalanceSolution.MaterialsRheologyB),...
++	(md.results.StressbalanceSolution.MaterialsRheologyBbar),...
+ 	(md.results.StressbalanceSolution.Pressure),...
+ 	(md.results.StressbalanceSolution.Vel),...
+ 	(md.results.StressbalanceSolution.Vx),...
+Index: ../trunk-jpl/test/NightlyRun/test328.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.py	(revision 16481)
++++ ../trunk-jpl/test/NightlyRun/test328.py	(revision 16482)
+@@ -16,7 +16,7 @@
+ md.surfaceforcings.issmbgradients=1
+ md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
+-md.transient.requested_outputs=['TotalSmb']
++md.transient.requested_outputs=['default','TotalSmb']
+ md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
+ md.surfaceforcings.smbref= 1000. - 0.001*md.mesh.x - 0.005*md.mesh.y;
+ md.cluster=generic('name',oshostname(),'np',3)
Index: issm/oecreview/Archive/16133-16554/ISSM-16482-16483.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16482-16483.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16482-16483.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16482)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16483)
+@@ -834,6 +834,8 @@
+ 		TriaInput* newmonthinput2 = new TriaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
+ 		NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
+ 	}
++	NewTemperatureInput->Configure(this->parameters);
++	NewPrecipitationInput->Configure(this->parameters);
+ 
+ 	this->inputs->AddInput(NewTemperatureInput);
+ 	this->inputs->AddInput(NewPrecipitationInput);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16482)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16483)
+@@ -918,6 +918,8 @@
+ 		PentaInput* newmonthinput2 = new PentaInput(SurfaceforcingsPrecipitationEnum,&tmp[0],P1Enum);
+ 		NewPrecipitationInput->AddTimeInput(newmonthinput2,time+imonth/12.*yts);
+ 	}
++	NewTemperatureInput->Configure(this->parameters);
++	NewPrecipitationInput->Configure(this->parameters);
+ 
+ 	this->inputs->AddInput(NewTemperatureInput);
+ 	this->inputs->AddInput(NewPrecipitationInput);
Index: issm/oecreview/Archive/16133-16554/ISSM-16483-16484.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16483-16484.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16483-16484.diff	(revision 16556)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16483)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16484)
+@@ -81,14 +81,14 @@
+ 	if(VerboseControl()) _printf0_("   Starting optimization\n");
+ 	TaoSolve(tao);
+ 	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
++
++	/*Save results*/
+ 	TaoGetSolutionVector(tao,&X->pvector->vector);
+ 	G=new Vector<IssmDouble>(0); VecFree(&G->pvector->vector);
+ 	TaoGetGradientVector(tao,&G->pvector->vector);
+ 	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
+ 	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
+-	for(int i=0;i<num_controls;i++){
+-		InputToResultx(femmodel,control_list[i]);
+-	}
++	femmodel->OutputControlsx(&femmodel->results);
+ 	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
+ 
+ 	/*Finalize*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16484-16485.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16484-16485.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16484-16485.diff	(revision 16556)
@@ -0,0 +1,389 @@
+Index: ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 16484)
++++ ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 16485)
+@@ -1,13 +0,0 @@
+-/*!\file:  InputToResultx.h
+- * \brief header file for field extrusion
+- */ 
+-
+-#ifndef _INPUTTORESULTX_H
+-#define _INPUTTORESULTX_H
+-
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void InputToResultx(FemModel* femmodel,int enum_type);
+-
+-#endif  /* _INPUTTORESULTX_H */
+Index: ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 16484)
++++ ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 16485)
+@@ -1,27 +0,0 @@
+-/*!\file InputToResultx
+- * \brief: transfer an input to the results  dataset inside the elements
+- */
+-
+-#include "./InputToResultx.h"
+-#include "../../shared/shared.h"
+-#include "../../classes/classes.h"
+-#include "../../toolkits/toolkits.h"
+-
+-void InputToResultx(FemModel* femmodel,int enum_type){
+-
+-	/*intermediary:*/
+-	int        step;
+-	IssmDouble time;
+-	Element   *element = NULL;
+-
+-	/*Get time and step*/
+-	femmodel->parameters->FindParam(&step,StepEnum);
+-	femmodel->parameters->FindParam(&time,TimeEnum);
+-
+-	/*Go through elemnets, and ask each element to transfer the enum_type input into the results dataset, with step and time information: */
+-	for(int i=0;i<femmodel->elements->Size();i++){
+-		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
+-		element->InputToResult(enum_type,step,time);
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 16484)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 16485)
+@@ -43,7 +43,6 @@
+ #include "./InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.h"
+ #include "./InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.h"
+ #include "./InterpFromMeshToGridx/InterpFromMeshToGridx.h"
+-#include "./InputToResultx/InputToResultx.h"
+ #include "./InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ #include "./InputUpdateFromSolutionx/InputUpdateFromSolutionx.h"
+ #include "./InputUpdateFromDakotax/InputUpdateFromDakotax.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16484)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16485)
+@@ -336,8 +336,6 @@
+ 					./modules/VecMergex/VecMergex.h\
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h\
+-					./modules/InputToResultx/InputToResultx.cpp\
+-					./modules/InputToResultx/InputToResultx.h\
+ 					./analyses/ProcessArguments.cpp\
+ 					./analyses/ResetBoundaryConditions.cpp\
+ 					./analyses/AnalysisConfiguration.cpp\
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16484)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16485)
+@@ -72,7 +72,6 @@
+                           $ENV{ISSM_DIR}/src/c/modules/Solverx 
+                           $ENV{ISSM_DIR}/src/c/modules/VecMergex 
+                           $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx 
+-                          $ENV{ISSM_DIR}/src/c/modules/InputToResultx 
+                           $ENV{ISSM_DIR}/src/c/analyses 
+                           $ENV{ISSM_DIR}/src/c/solutionsequences 
+                           $ENV{ISSM_DIR}/src/c/solutionsequences)
+@@ -218,7 +217,6 @@
+ 					./modules/Solverx/Solverx.cpp
+ 					./modules/VecMergex/VecMergex.cpp
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
+-					./modules/InputToResultx/InputToResultx.cpp
+ 					./analyses/ProcessArguments.cpp
+ 					./analyses/ResetBoundaryConditions.cpp
+ 					./analyses/AnalysisConfiguration.cpp
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16484)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16485)
+@@ -477,54 +477,6 @@
+ 
+ }
+ /*}}}*/
+-void FemModel::RequestedOutputsx(char** requested_outputs, int numoutputs){/*{{{*/
+-
+-	char       *output_string;
+-	int         step;
+-	IssmDouble  time;
+-	IssmDouble  output_value;
+-
+-	/*Get time and step*/
+-	parameters->FindParam(&step,StepEnum);
+-	parameters->FindParam(&time,TimeEnum);
+-
+-	/*retrieve Inputs*/
+-	if(numoutputs){
+-		for(int i=0;i<numoutputs;i++){
+-			output_string=requested_outputs[i];
+-
+-			if (strcmp(output_string,"IceVolume")==0){
+-				Responsex(&output_value,output_string);
+-				results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+-			}
+-			else if (strcmp(output_string,"IceVolumeAboveFloatation")==0){
+-				Responsex(&output_value,output_string);
+-				results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeAboveFloatationEnum,reCast<IssmPDouble>(output_value),step,time));
+-			}
+-			else if (strcmp(output_string,"TotalSmb")==0){
+-				Responsex(&output_value,output_string);
+-				results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+-			}
+-			else if (strcmp(output_string,"MaxVel")==0){
+-				Responsex(&output_value,output_string);
+-				results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
+-			}
+-			else if (StringToEnumx(output_string,false)==-1){
+-				/*This response can only be computed by going into the output definitions: */
+-				output_value=OutputDefinitionsResponsex(this,output_string);
+-				results->AddObject(new GenericExternalResult<double>(results->Size()+1,output_string,reCast<IssmPDouble>(output_value),step,time));
+-			}
+-			else{
+-				/*create this output in the element inputs, and then transfer to results:*/
+-				for(int j=0;j<elements->Size();j++){
+-					Element* element=(Element*)elements->GetObjectByOffset(j);
+-					element->RequestedOutput(StringToEnumx(output_string),step,time);
+-				}
+-			}
+-		}
+-	}
+-}
+-/*}}}*/
+ void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs){/*{{{*/
+ 
+ 	/*Intermediaries*/
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16485)
+@@ -63,10 +63,8 @@
+ 		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
+ 		virtual void   DeleteResults(void)=0;
+ 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+-		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
+ 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
+ 		virtual void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+-		virtual void   RequestedOutput(int output_enum,int step,IssmDouble time)=0;
+ 
+ 		virtual int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
+ 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16485)
+@@ -1634,30 +1634,6 @@
+ 	input->Scale(scale_factor);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::InputToResult{{{*/
+-void  Tria::InputToResult(int enum_type,int step,IssmDouble time){
+-
+-	Input *input = NULL;	
+-
+-	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum || enum_type==DamageDbarEnum)
+-	 input=this->material->inputs->GetInput(enum_type);
+-	else
+-	 input=this->inputs->GetInput(enum_type);
+-	//if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found in tria->inputs");
+-	if(!input)return;
+-
+-	/*If we don't find it, no big deal, just don't do the transfer. Otherwise, build a new Result 
+-	 * object out of the input, with the additional step and time information: */
+-	this->results->AddResult(input->SpawnResult(step,time));
+-
+-	#ifdef _HAVE_CONTROL_
+-	if(input->ObjectEnum()==ControlInputEnum){
+-		if(((ControlInput*)input)->gradient!=NULL) this->results->AddResult(((ControlInput*)input)->SpawnGradient(step,time));
+-	}
+-	#endif
+-}
+-/*}}}*/
+ /*FUNCTION Tria::InputUpdateFromConstant(int value, int name);{{{*/
+ void  Tria::InputUpdateFromConstant(int constant, int name){
+ 
+@@ -2613,34 +2589,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Tria::RequestedOutput{{{*/
+-void Tria::RequestedOutput(int output_enum,int step,IssmDouble time){
+-
+-	if(IsInput(output_enum)){
+-		/*just transfer this input to results, and we are done: */
+-		InputToResult(output_enum,step,time);
+-	}
+-	else{
+-		/*this input does not exist, compute it, and then transfer to results: */
+-		switch(output_enum){
+-			case StressTensorEnum: 
+-				this->ComputeStressTensor();
+-				InputToResult(StressTensorxxEnum,step,time);
+-				InputToResult(StressTensorxyEnum,step,time);
+-				InputToResult(StressTensorxzEnum,step,time);
+-				InputToResult(StressTensoryyEnum,step,time);
+-				InputToResult(StressTensoryzEnum,step,time);
+-				InputToResult(StressTensorzzEnum,step,time);
+-				break;
+-
+-			default:
+-				/*do nothing, no need to derail the computation because one of the outputs requested cannot be found: */
+-				break;
+-		}
+-	}
+-
+-}
+-/*}}}*/
+ /*FUNCTION Tria::SetClone {{{*/
+ void  Tria::SetClone(int* minranks){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16485)
+@@ -100,12 +100,10 @@
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void        InputDuplicate(int original_enum,int new_enum);
+ 		void        InputScale(int enum_type,IssmDouble scale_factor);
+-		void        InputToResult(int enum_type,int step,IssmDouble time);
+ 		void        DeleteResults(void);
+ 		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
+ 		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+-		void        RequestedOutput(int output_enum,int step,IssmDouble time);
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16485)
+@@ -2112,29 +2112,6 @@
+ 	input->Scale(scale_factor);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::InputToResult{{{*/
+-void  Penta::InputToResult(int enum_type,int step,IssmDouble time){
+-
+-	Input *input = NULL;
+-
+-	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum) input=this->material->inputs->GetInput(MaterialsRheologyBEnum);
+-	else if (enum_type==DamageDbarEnum) input=this->material->inputs->GetInput(DamageDEnum);
+-	else input=this->inputs->GetInput(enum_type);
+-	//if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found in penta->inputs"); why error out? if the requested input does not exist, we should still 
+-	//try and output whatever we can instead of just failing.
+-	if(!input)return;
+-
+-	/*If we don't find it, no big deal, just don't do the transfer. Otherwise, build a new Result 
+-	 * object out of the input, with the additional step and time information: */
+-	this->results->AddResult(input->SpawnResult(step,time));
+-	#ifdef _HAVE_CONTROL_
+-	if(input->ObjectEnum()==ControlInputEnum){
+-		if(((ControlInput*)input)->gradient!=NULL) this->results->AddResult(((ControlInput*)input)->SpawnGradient(step,time));
+-	}
+-	#endif
+-}
+-/*}}}*/
+ /*FUNCTION Penta::InputUpdateFromConstant(bool value, int name);{{{*/
+ void  Penta::InputUpdateFromConstant(bool constant, int name){
+ 
+@@ -2932,56 +2909,6 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::RequestedOutput{{{*/
+-void Penta::RequestedOutput(int output_enum,int step,IssmDouble time){
+-	if(IsInput(output_enum)){
+-		/*just transfer this input to results, and we are done: */
+-		InputToResult(output_enum,step,time);
+-	}
+-	else{
+-		/*this input does not exist, compute it, and then transfer to results: */
+-		switch(output_enum){
+-			case BasalFrictionEnum:
+-
+-				/*create input: */
+-				BasalFrictionCreateInput();
+-
+-				/*transfer to results :*/
+-				InputToResult(output_enum,step,time);
+-
+-				/*erase input: */
+-				inputs->DeleteInput(output_enum);
+-				break;
+-			case ViscousHeatingEnum:
+-
+-				/*create input: */
+-				ViscousHeatingCreateInput();
+-
+-				/*transfer to results :*/
+-				InputToResult(output_enum,step,time);
+-
+-				/*erase input: */
+-				inputs->DeleteInput(output_enum);
+-				break;
+-
+-			case StressTensorEnum: 
+-				this->ComputeStressTensor();
+-				InputToResult(StressTensorxxEnum,step,time);
+-				InputToResult(StressTensorxyEnum,step,time);
+-				InputToResult(StressTensorxzEnum,step,time);
+-				InputToResult(StressTensoryyEnum,step,time);
+-				InputToResult(StressTensoryzEnum,step,time);
+-				InputToResult(StressTensorzzEnum,step,time);
+-				break;
+-
+-			default:
+-				/*do nothing, no need to derail the computation because one of the outputs requested cannot be found: */
+-				break;
+-		}
+-	}
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::ResultInterpolation{{{*/
+ void Penta::ResultInterpolation(int* pinterpolation,int output_enum){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16485)
+@@ -97,8 +97,6 @@
+ 		void   InputDuplicate(int original_enum,int new_enum);
+ 		void   InputScale(int enum_type,IssmDouble scale_factor);
+ 
+-		void   InputToResult(int enum_type,int step,IssmDouble time);
+-		void   RequestedOutput(int output_enum,int step,IssmDouble time);
+ 		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void   ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16484)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16485)
+@@ -109,12 +109,10 @@
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum){_error_("not implemented yet");};
+ 		void        InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
+ 		void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
+-		void        InputToResult(int enum_type,int step,IssmDouble time){_error_("not implemented yet");};
+ 		void        DeleteResults(void){_error_("not implemented yet");};
+ 		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
+ 		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum){_error_("not implemented yet");};
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){_error_("not implemented yet");};
+-		void        RequestedOutput(int output_enum,int step,IssmDouble time){_error_("not implemented yet");};
+ 		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results){_error_("not implemented yet");};
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16484)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16485)
+@@ -83,7 +83,6 @@
+ 		#endif
+ 		void RequestedOutputsx(Results **presults,int* requested_outputs,int numoutputs);
+ 		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
+-		void RequestedOutputsx(char** requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor);
Index: issm/oecreview/Archive/16133-16554/ISSM-16485-16486.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16485-16486.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16485-16486.diff	(revision 16556)
@@ -0,0 +1,1803 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16485)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16486)
+@@ -375,7 +375,6 @@
+ 	DoubleParamEnum,
+ 	DoubleVecParamEnum,
+ 	ElementEnum,
+-	ElementResultEnum,
+ 	ExternalResultEnum,
+ 	FileParamEnum,
+ 	InputEnum,
+@@ -531,18 +530,14 @@
+ 	/*}}}*/
+ 	/*Results{{{*/
+ 	SaveResultsEnum,
+-	BoolElementResultEnum,
+ 	BoolExternalResultEnum,
+-	DoubleElementResultEnum,
+ 	DoubleExternalResultEnum,
+ 	DoubleMatExternalResultEnum,
+ 	IntExternalResultEnum,
+ 	JEnum,
+-	PentaP1ElementResultEnum,
+ 	StringExternalResultEnum,
+ 	StepEnum,
+ 	TimeEnum,
+-	TriaP1ElementResultEnum,
+ 	WaterColumnOldEnum,
+ 	/*}}}*/
+ 	/*Output Definitions{{{*/
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16486)
+@@ -375,7 +375,6 @@
+ 		case DoubleParamEnum : return "DoubleParam";
+ 		case DoubleVecParamEnum : return "DoubleVecParam";
+ 		case ElementEnum : return "Element";
+-		case ElementResultEnum : return "ElementResult";
+ 		case ExternalResultEnum : return "ExternalResult";
+ 		case FileParamEnum : return "FileParam";
+ 		case InputEnum : return "Input";
+@@ -521,18 +520,14 @@
+ 		case MINIcondensedEnum : return "MINIcondensed";
+ 		case TaylorHoodEnum : return "TaylorHood";
+ 		case SaveResultsEnum : return "SaveResults";
+-		case BoolElementResultEnum : return "BoolElementResult";
+ 		case BoolExternalResultEnum : return "BoolExternalResult";
+-		case DoubleElementResultEnum : return "DoubleElementResult";
+ 		case DoubleExternalResultEnum : return "DoubleExternalResult";
+ 		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
+ 		case IntExternalResultEnum : return "IntExternalResult";
+ 		case JEnum : return "J";
+-		case PentaP1ElementResultEnum : return "PentaP1ElementResult";
+ 		case StringExternalResultEnum : return "StringExternalResult";
+ 		case StepEnum : return "Step";
+ 		case TimeEnum : return "Time";
+-		case TriaP1ElementResultEnum : return "TriaP1ElementResult";
+ 		case WaterColumnOldEnum : return "WaterColumnOld";
+ 		case OutputdefinitionEnum : return "Outputdefinition";
+ 		case OutputdefinitionListEnum : return "OutputdefinitionList";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16486)
+@@ -381,12 +381,11 @@
+ 	      else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
+ 	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+-	      else if (strcmp(name,"ElementResult")==0) return ElementResultEnum;
++	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+-	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
+ 	      else if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
+@@ -505,11 +504,11 @@
+ 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
++	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+-	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
++	      if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+ 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+@@ -533,18 +532,14 @@
+ 	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+ 	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+ 	      else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
+-	      else if (strcmp(name,"BoolElementResult")==0) return BoolElementResultEnum;
+ 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
+-	      else if (strcmp(name,"DoubleElementResult")==0) return DoubleElementResultEnum;
+ 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
+ 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
+ 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+ 	      else if (strcmp(name,"J")==0) return JEnum;
+-	      else if (strcmp(name,"PentaP1ElementResult")==0) return PentaP1ElementResultEnum;
+ 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
+ 	      else if (strcmp(name,"Step")==0) return StepEnum;
+ 	      else if (strcmp(name,"Time")==0) return TimeEnum;
+-	      else if (strcmp(name,"TriaP1ElementResult")==0) return TriaP1ElementResultEnum;
+ 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+ 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+ 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 16486)
+@@ -36,10 +36,6 @@
+ 		return; 
+ 	}
+ 
+-	/*We have results inside our elements, loads, etc ... Get them out of there, into the results dataset: */
+-	elements->ToResults(results,parameters);
+-	elements->DeleteResults();
+-
+ 	/*Results do not include the type of solution being run	. In parallel, we output results to a filename, 
+ 	 *therefore, we need to include the solutiontype into the filename: */
+ 	if(my_rank==0){
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16485)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16486)
+@@ -62,13 +62,6 @@
+ 					./classes/Vertex.cpp\
+ 					./classes/Hook.h\
+ 					./classes/Hook.cpp\
+-					./classes/ElementResults/ElementResultLocal.h\
+-					./classes/ElementResults/DoubleElementResult.h\
+-					./classes/ElementResults/DoubleElementResult.cpp\
+-					./classes/ElementResults/TriaP1ElementResult.h\
+-					./classes/ElementResults/TriaP1ElementResult.cpp\
+-					./classes/ElementResults/BoolElementResult.h\
+-					./classes/ElementResults/BoolElementResult.cpp\
+ 					./classes/ExternalResults/Results.h\
+ 					./classes/ExternalResults/Results.cpp\
+ 					./classes/ExternalResults/ExternalResult.h\
+@@ -593,8 +586,6 @@
+ #3D sources  {{{
+ threed_sources = ./classes/gauss/GaussPenta.h\
+ 				     ./classes/gauss/GaussPenta.cpp\
+-				     ./classes/ElementResults/PentaP1ElementResult.h\
+-				     ./classes/ElementResults/PentaP1ElementResult.cpp\
+ 				     ./classes/Inputs/PentaInput.h\
+ 				     ./classes/Inputs/PentaInput.cpp\
+ 				     ./classes/Elements/Penta.h\
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16485)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16486)
+@@ -8,7 +8,6 @@
+                           $ENV{ISSM_DIR}/src/c/datastructure 
+                           $ENV{ISSM_DIR}/src/c/classes 
+                           $ENV{ISSM_DIR}/src/c/classes/Options 
+-                          $ENV{ISSM_DIR}/src/c/classes/ElementResults 
+                           $ENV{ISSM_DIR}/src/c/classes/ExternalResults 
+                           $ENV{ISSM_DIR}/src/c/classes/Elements 
+                           $ENV{ISSM_DIR}/src/c/classes/Inputs 
+@@ -94,9 +93,6 @@
+ 					./classes/Node.cpp
+ 					./classes/Vertex.cpp
+ 					./classes/Hook.cpp
+-					./classes/ElementResults/DoubleElementResult.cpp
+-					./classes/ElementResults/TriaP1ElementResult.cpp
+-					./classes/ElementResults/BoolElementResult.cpp
+ 					./classes/ExternalResults/Results.cpp
+ 					./classes/Elements/Elements.cpp
+ 					./classes/Elements/ElementHook.cpp
+@@ -394,7 +390,6 @@
+ #}}}
+ #3D sources  {{{
+ set(threed_sources 			     ./classes/gauss/GaussPenta.cpp
+-				     			     ./classes/ElementResults/PentaP1ElementResult.cpp
+ 				     			     ./classes/Inputs/PentaInput.cpp
+ 				     			     ./classes/Elements/Penta.cpp
+ 				     			     ./classes/Elements/PentaRef.cpp)
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16486)
+@@ -1,45 +0,0 @@
+-/*! \file DoubleElementResult.h 
+- *  \brief: header file for IssmDouble result object
+- *  A IssmDouble result object is just derived from a DoubleInput object, with additional time and step information.
+- */
+-
+-#ifndef _DOUBLEELEMENTRESULT_H_
+-#define _DOUBLEELEMENTRESULT_H_
+-
+-/*Headers:*/
+-#include "../Inputs/Input.h"
+-class Parameters;
+-
+-class DoubleElementResult: public ElementResult{
+-
+-	private: 
+-		int        enum_type;
+-		IssmDouble value;
+-		int        step;
+-		IssmDouble time;
+-
+-	public:
+-
+-		/*DoubleElementResult constructors, destructors:*/
+-		DoubleElementResult();
+-		DoubleElementResult(int enum_type,IssmDouble value,int step,IssmDouble time);
+-		~DoubleElementResult();
+-
+-		/*Object virtual functions definitions:*/
+-		void    Echo();
+-		void    DeepEcho();
+-		int     Id(); 
+-		int     ObjectEnum();
+-		Object* copy();
+-
+-		/*ElementResult virtual functions definitions: {{{*/
+-		IssmDouble  GetTime(void){return time;};
+-		int     GetStep(void){return step;};
+-		int     NumberOfNodalValues(void);
+-
+-		/*DoubleElementResult management*/
+-		char* GetResultName();
+-		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+-		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+-};
+-#endif  /* _DOUBLEELEMENTRESULT_H */
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16486)
+@@ -1,46 +0,0 @@
+-/*! \file BoolElementResult.h 
+- *  \brief: header file for bool result object
+- *  A boll result object is just derived from a BoolInput object, with additional time and step information.
+- */
+-
+-#ifndef _BOOLELEMENTRESULT_H_
+-#define _BOOLELEMENTRESULT_H_
+-
+-/*Headers:*/
+-#include "../Inputs/Input.h"
+-class Parameters;
+-
+-class BoolElementResult: public ElementResult{
+-
+-	private: 
+-		int    enum_type;
+-		bool   value;
+-		int    step;
+-		IssmDouble time;
+-
+-	public:
+-
+-		/*BoolElementResult constructors, destructors: {{{*/
+-		BoolElementResult();
+-		BoolElementResult(int enum_type,bool value,int step,IssmDouble time);
+-		~BoolElementResult();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   ObjectEnum();
+-		Object* copy();
+-		/*}}}*/
+-		/*ElementResult virtual functions definitions: {{{*/
+-		IssmDouble  GetTime(void){return time;};
+-		int     GetStep(void){return step;};
+-		int     NumberOfNodalValues(void);
+-		/*}}}*/
+-		/*BoolElementResult management: {{{*/
+-		char* GetResultName();
+-		void  GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+-		void  GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+-		/*}}}*/
+-};
+-#endif  /* _BOOLELEMENTRESULT_H */
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16486)
+@@ -1,99 +0,0 @@
+-/*!\file TriaP1ElementResult.c
+- * \brief: implementation of the TriaP1ElementResult object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "../../shared/shared.h"
+-
+-/*TriaP1ElementResult constructors and destructor*/
+-/*FUNCTION TriaP1ElementResult::TriaP1ElementResult(){{{*/
+-TriaP1ElementResult::TriaP1ElementResult(){
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::TriaP1ElementResult(int in_enum_type,IssmDouble* in_values,int in_step, IssmDouble in_time){{{*/
+-TriaP1ElementResult::TriaP1ElementResult(int in_enum_type,IssmDouble* in_values,int in_step, IssmDouble in_time){
+-
+-	enum_type=in_enum_type;
+-	values[0]=in_values[0];
+-	values[1]=in_values[1];
+-	values[2]=in_values[2];
+-	step=in_step;
+-	time=in_time;
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::~TriaP1ElementResult(){{{*/
+-TriaP1ElementResult::~TriaP1ElementResult(){
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION TriaP1ElementResult::Echo {{{*/
+-void TriaP1ElementResult::Echo(void){
+-	this->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::DeepEcho{{{*/
+-void TriaP1ElementResult::DeepEcho(void){
+-
+-	_printf_("TriaP1ElementResult:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]\n");
+-	_printf_("   step: " << this->step << "\n");
+-	_printf_("   time: " << this->time << "\n");
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::Id{{{*/
+-int    TriaP1ElementResult::Id(void){ return -1; }
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::ObjectEnum{{{*/
+-int TriaP1ElementResult::ObjectEnum(void){
+-
+-	return TriaP1ElementResultEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::copy{{{*/
+-Object* TriaP1ElementResult::copy() {
+-
+-	return new TriaP1ElementResult(this->enum_type,this->values,this->step,this->time);
+-
+-}
+-/*}}}*/
+-
+-/*ElementResult management*/
+-/*FUNCTION TriaP1ElementResult::GetResultName{{{*/
+-char* TriaP1ElementResult::GetResultName(void){
+-
+-	char* output = NULL;
+-	EnumToStringx(&output,this->enum_type);
+-	return output;
+-
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::NumberOfNodalValues{{{*/
+-int TriaP1ElementResult::NumberOfNodalValues(void){
+-	return 3;
+-}
+-/*}}}*/
+-/*FUNCTION TriaP1ElementResult::GetVectorFromResults{{{*/
+-void TriaP1ElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+-
+-	IssmDouble data[3];
+-
+-	if(numdofs!=3)_error_("Result " << EnumToStringx(this->enum_type) << " is a TriaP1ElementResult and cannot write vector of " << numdofs << " dofs");
+-	for(int i=0;i<3;i++) data[i]=this->values[i]/(IssmDouble)connectivitylist[i];
+-	vector->SetValues(numdofs,doflist,&data[0],ADD_VAL);
+-
+-} /*}}}*/
+-/*FUNCTION TriaP1ElementResult::GetElementVectorFromResults{{{*/
+-void TriaP1ElementResult::GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof){
+-	_error_("Result " << EnumToStringx(enum_type) << " is a TriaP1ElementResult and should not write vector of size numberofelements");
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16486)
+@@ -1,26 +0,0 @@
+-/*!\file:  ElementResult.h
+- * \brief abstract class for ElementResult object
+- */ 
+-
+-#ifndef _ELEMENTRESULT_H_
+-#define _ELEMENTRESULT_H_
+-
+-/*Headers:*/
+-#include "../../datastructures/datastructures.h"
+-class Parameters;
+-
+-class ElementResult:public Object{
+-
+-	public: 
+-
+-		virtual ~ElementResult(){};
+-		virtual IssmDouble GetTime(void) = 0;
+-		virtual int        GetStep(void) = 0;
+-		virtual int        NumberOfNodalValues(void) = 0;
+-		virtual char*      GetResultName() = 0;
+-		virtual void       GetVectorFromResults(Vector <IssmDouble> *vector,int*doflist,int*connectivitylist,int numdof)=0;
+-		virtual void       GetElementVectorFromResults(Vector <IssmDouble> *vector,int dof)=0;
+-
+-};
+-
+-#endif
+Index: ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16486)
+@@ -1,45 +0,0 @@
+-/*! \file TriaP1ElementResult.h 
+- *  \brief: header file for TriaP1ElementResult object
+- */
+-
+-#ifndef _TRIAP1ELEMENTRESULT_H_
+-#define _TRIAP1ELEMENTRESULT_H_
+-
+-/*Headers:*/
+-#include "../Inputs/Input.h"
+-
+-class TriaP1ElementResult: public ElementResult{
+-
+-	private: 
+-		int    enum_type;
+-		IssmDouble values[3];
+-		int    step;
+-		IssmDouble time;
+-
+-	public:
+-
+-		/*TriaP1ElementResult constructors, destructors: {{{*/
+-		TriaP1ElementResult();
+-		TriaP1ElementResult(int enum_type,IssmDouble* values,int step,IssmDouble time);
+-		~TriaP1ElementResult();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   ObjectEnum();
+-		Object* copy();
+-		/*}}}*/
+-		/*ElementResult virtual functions definitions: {{{*/
+-		IssmDouble  GetTime(void){return time;};
+-		int     GetStep(void){return step;};
+-		int     NumberOfNodalValues(void);
+-		/*}}}*/
+-		/*TriaP1ElementResult management: {{{*/
+-		char* GetResultName();
+-		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+-		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+-		/*}}}*/
+-
+-};
+-#endif  /* _TRIAP1ELEMENTRESULT_H */
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16486)
+@@ -1,101 +0,0 @@
+-/*!\file PentaP1ElementResult.c
+- * \brief: implementation of the PentaP1ElementResult object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "../../shared/shared.h"
+-
+-/*PentaP1ElementResult constructors and destructor*/
+-/*FUNCTION PentaP1ElementResult::PentaP1ElementResult(){{{*/
+-PentaP1ElementResult::PentaP1ElementResult(){
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::PentaP1ElementResult(int in_enum_type,IssmDouble* in_values,int in_step, IssmDouble in_time){{{*/
+-PentaP1ElementResult::PentaP1ElementResult(int in_enum_type,IssmDouble* in_values,int in_step, IssmDouble in_time){
+-
+-	int i;
+-
+-	enum_type=in_enum_type;
+-	for(i=0;i<6;i++)values[i]=in_values[i];
+-	step=in_step;
+-	time=in_time;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::~PentaP1ElementResult(){{{*/
+-PentaP1ElementResult::~PentaP1ElementResult(){
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION PentaP1ElementResult::Echo {{{*/
+-void PentaP1ElementResult::Echo(void){
+-	this->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::DeepEcho{{{*/
+-void PentaP1ElementResult::DeepEcho(void){
+-
+-	_printf_("PentaP1ElementResult:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]\n");
+-	_printf_("   step: " << this->step << "\n");
+-	_printf_("   time: " << this->time << "\n");
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::Id{{{*/
+-int    PentaP1ElementResult::Id(void){ return -1; }
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::ObjectEnum{{{*/
+-int PentaP1ElementResult::ObjectEnum(void){
+-
+-	return PentaP1ElementResultEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::copy{{{*/
+-Object* PentaP1ElementResult::copy() {
+-
+-	return new PentaP1ElementResult(this->enum_type,this->values,this->step,this->time);
+-
+-}
+-/*}}}*/
+-
+-/*ElementResult management*/
+-/*FUNCTION PentaP1ElementResult::GetResultName{{{*/
+-char* PentaP1ElementResult::GetResultName(void){
+-
+-	char* output = NULL;
+-	EnumToStringx(&output,this->enum_type);
+-	return output;
+-
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::NumberOfNodalValues{{{*/
+-int PentaP1ElementResult::NumberOfNodalValues(void){
+-	return 6;
+-}
+-/*}}}*/
+-/*FUNCTION PentaP1ElementResult::GetVectorFromResults{{{*/
+-void PentaP1ElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+-
+-	IssmDouble data[6];
+-
+-	if(numdofs!=6)_error_("Result " << EnumToStringx(this->enum_type) << " is a PentaP1ElementResult and cannot write vector of " << numdofs << " dofs");
+-	for(int i=0;i<6;i++) data[i]=this->values[i]/(IssmDouble)connectivitylist[i];
+-	vector->SetValues(numdofs,doflist,&data[0],ADD_VAL);
+-
+-} /*}}}*/
+-/*FUNCTION PentaP1ElementResult::GetElementVectorFromResults{{{*/
+-void PentaP1ElementResult::GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof){
+-
+-	_error_("Result " << EnumToStringx(enum_type) << " is a PentaP1ElementResult and should not write vector of size numberofelemenrs");
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16486)
+@@ -1,93 +0,0 @@
+-/*!\file DoubleElementResult.c
+- * \brief: implementation of the DoubleElementResult object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "../../shared/shared.h"
+-
+-/*DoubleElementResult constructors and destructor*/
+-/*FUNCTION DoubleElementResult::DoubleElementResult(){{{*/
+-DoubleElementResult::DoubleElementResult(){
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::DoubleElementResult(int in_enum_type,IssmDouble in_value,int in_step, IssmDouble in_time){{{*/
+-DoubleElementResult::DoubleElementResult(int in_enum_type,IssmDouble in_value,int in_step, IssmDouble in_time){
+-
+-	enum_type=in_enum_type;
+-	value=in_value;
+-	step=in_step;
+-	time=in_time;
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::~DoubleElementResult(){{{*/
+-DoubleElementResult::~DoubleElementResult(){
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION DoubleElementResult::Echo {{{*/
+-void DoubleElementResult::Echo(void){
+-	this->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::DeepEcho{{{*/
+-void DoubleElementResult::DeepEcho(void){
+-
+-	_printf_("DoubleElementResult:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   value: " << this->value << "\n");
+-	_printf_("   step: " << this->step << "\n");
+-	_printf_("   time: " << this->time << "\n");
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::Id{{{*/
+-int    DoubleElementResult::Id(void){ return -1; }
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::ObjectEnum{{{*/
+-int DoubleElementResult::ObjectEnum(void){
+-
+-	return DoubleElementResultEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::copy{{{*/
+-Object* DoubleElementResult::copy() {
+-
+-	return new DoubleElementResult(this->enum_type,this->value,this->step,this->time);
+-
+-}
+-/*}}}*/
+-
+-/*ElementResult management*/
+-/*FUNCTION DoubleElementResult::GetResultName{{{*/
+-char* DoubleElementResult::GetResultName(void){
+-
+-	char* output = NULL;
+-	EnumToStringx(&output,this->enum_type);
+-	return output;
+-
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::NumberOfNodalValues{{{*/
+-int DoubleElementResult::NumberOfNodalValues(void){
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION DoubleElementResult::GetVectorFromResults{{{1*/
+-void DoubleElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+-
+-	_error_("cannot return vector on vertices");
+-} /*}}}*/
+-/*FUNCTION DoubleElementResult::GetElementVectorFromResults{{{1*/
+-void DoubleElementResult::GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof){
+-
+-	vector->SetValue(dof,value,INS_VAL);
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16486)
+@@ -1,93 +0,0 @@
+-/*!\file BoolElementResult.c
+- * \brief: implementation of the BoolElementResult object
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../classes.h"
+-#include "../../shared/shared.h"
+-
+-/*BoolElementResult constructors and destructor*/
+-/*FUNCTION BoolElementResult::BoolElementResult(){{{*/
+-BoolElementResult::BoolElementResult(){
+-	return;
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::BoolElementResult(int in_enum_type,IssmDouble in_value,int in_step, IssmDouble in_time){{{*/
+-BoolElementResult::BoolElementResult(int in_enum_type,bool in_value,int in_step, IssmDouble in_time){
+-
+-	enum_type=in_enum_type;
+-	value=in_value;
+-	step=in_step;
+-	time=in_time;
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::~BoolElementResult(){{{*/
+-BoolElementResult::~BoolElementResult(){
+-	return;
+-}
+-/*}}}*/
+-
+-/*Object virtual functions definitions:*/
+-/*FUNCTION BoolElementResult::Echo {{{*/
+-void BoolElementResult::Echo(void){
+-	this->DeepEcho();
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::DeepEcho{{{*/
+-void BoolElementResult::DeepEcho(void){
+-
+-	_printf_("BoolElementResult:\n");
+-	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+-	_printf_("   value: "<<(this->value?"true":"false") << "\n");
+-	_printf_("   step: " << this->step << "\n");
+-	_printf_("   time: " << this->time << "\n");
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::Id{{{*/
+-int    BoolElementResult::Id(void){ return -1; }
+-/*}}}*/
+-/*FUNCTION BoolElementResult::ObjectEnum{{{*/
+-int BoolElementResult::ObjectEnum(void){
+-
+-	return BoolElementResultEnum;
+-
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::copy{{{*/
+-Object* BoolElementResult::copy() {
+-
+-	return new BoolElementResult(this->enum_type,this->value,this->step,this->time);
+-
+-}
+-/*}}}*/
+-
+-/*ElementResult management*/
+-/*FUNCTION BoolElementResult::GetResultName{{{*/
+-char* BoolElementResult::GetResultName(void){
+-
+-	char* output = NULL;
+-	EnumToStringx(&output,this->enum_type);
+-	return output;
+-
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::NumberOfNodalValues{{{*/
+-int BoolElementResult::NumberOfNodalValues(void){
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION BoolElementResult::GetVectorFromResults{{{*/
+-void BoolElementResult::GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs){
+-
+-	_error_("cannot return vector on vertices");
+-} /*}}}*/
+-/*FUNCTION BoolElementResult::GetElementVectorFromResults{{{*/
+-void BoolElementResult::GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof){
+-
+-	vector->SetValue(dof,value,INS_VAL);
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16486)
+@@ -1,46 +0,0 @@
+-/*! \file PentaP1ElementResult.h 
+- *  \brief: header file for PentaP1ElementResult object
+- *  this object is just a PentaP1Input with additional time and step info.
+- */
+-
+-#ifndef _PENTAP1ELEMENTRESULT_H_
+-#define _PENTAP1ELEMENTRESULT_H_
+-
+-/*Headers:*/
+-#include "../Inputs/Input.h"
+-
+-class PentaP1ElementResult: public ElementResult{
+-
+-	private: 
+-		int    enum_type;
+-		IssmDouble values[6];
+-		int    step;
+-		IssmDouble time;
+-
+-	public:
+-
+-		/*PentaP1ElementResult constructors, destructors: {{{*/
+-		PentaP1ElementResult();
+-		PentaP1ElementResult(int enum_type,IssmDouble* values,int step, IssmDouble time);
+-		~PentaP1ElementResult();
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   ObjectEnum();
+-		Object* copy();
+-		/*}}}*/
+-		/*ElementResult virtual functions definitions: {{{*/
+-		IssmDouble  GetTime(void){return time;};
+-		int     GetStep(void){return step;};
+-		int     NumberOfNodalValues(void);
+-		/*}}}*/
+-		/*PentaP1ElementResult management: {{{*/
+-		char* GetResultName();
+-		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+-		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+-		/*}}}*/
+-
+-};
+-#endif  /* _PENTAP1ELEMENTRESULT_H */
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 16486)
+@@ -64,13 +64,6 @@
+ #include "./Inputs/DatasetInput.h"
+ #include "./Inputs/TransientInput.h"
+ 
+-/*ElementResults: */
+-#include "./ElementResults/ElementResult.h"
+-#include "./ElementResults/DoubleElementResult.h"
+-#include "./ElementResults/TriaP1ElementResult.h"
+-#include "./ElementResults/PentaP1ElementResult.h" 
+-#include "./ElementResults/BoolElementResult.h"
+-
+ /*ExternalResults: */
+ #include "./ExternalResults/Results.h"
+ #include "./ExternalResults/ExternalResult.h"
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16486)
+@@ -14,7 +14,6 @@
+ #include "./ExternalResult.h"
+ #include "../../shared/shared.h"
+ #include "../Params/Parameters.h"
+-#include "../ElementResults/ElementResult.h"
+ 
+ using namespace std;
+ /*}}}*/
+@@ -50,33 +49,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Results::AddResult(ElementResult* in_result){{{*/
+-int Results::AddResult(ElementResult* in_result){
+-
+-	/*First, go through dataset of inputs and check whether any input 
+-	 * with the same name is already in. If so, erase the corresponding 
+-	 * object before adding this new one: */
+-	vector<Object*>::iterator object;
+-
+-	/*In debugging mode, check that the input is not a NULL pointer*/
+-	_assert_(in_result);
+-
+-	for(object=objects.begin() ; object<objects.end(); object++){
+-
+-		ElementResult* result=dynamic_cast<ElementResult*>(*object);
+-
+-		if(result->GetStep()==in_result->GetStep()){
+-			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
+-				this->DeleteObject(result);
+-				break;
+-			}
+-		}
+-	}
+-	this->AddObject(in_result);
+-
+-	return 1;
+-}
+-/*}}}*/
+ /*FUNCTION Results::AddResult(ExternalResult* in_result){{{*/
+ int Results::AddResult(ExternalResult* in_result){
+ 
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.h	(revision 16486)
+@@ -5,7 +5,6 @@
+ 
+ /*forward declarations */
+ class Parameters;
+-class ElementResult;
+ class ExternalResult;
+ 
+ /*!\brief Declaration of Results class.
+@@ -21,7 +20,6 @@
+ 		~Results();
+ 
+ 		/*Mehthos*/
+-		int AddResult(ElementResult* result);
+ 		int AddResult(ExternalResult* result);
+ 		int DeleteResult(int result_enum,int result_step);
+ 		void Write(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16486)
+@@ -58,10 +58,8 @@
+ 		virtual void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
+ 		virtual void   ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
+ 		virtual void   ComputeStrainRate(Vector<IssmDouble>* eps)=0;
+-		virtual void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
+ 		virtual void   ResultInterpolation(int* pinterpolation,int output_enum)=0;
+ 		virtual void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum)=0;
+-		virtual void   DeleteResults(void)=0;
+ 		virtual void   Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+ 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
+ 		virtual void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+@@ -69,7 +67,6 @@
+ 		virtual int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0;
+ 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
+-		virtual void   GetVectorFromResults(Vector<IssmDouble>* vector,int id,int enum_in,int interp)=0;
+ 		virtual IssmDouble TimeAdapt()=0;
+ 		virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
+ 		virtual void   Delta18oParameterization(void)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16486)
+@@ -31,7 +31,6 @@
+ 	this->matpar     = NULL;
+ 	this->inputs     = NULL;
+ 	this->parameters = NULL;
+-	this->results    = NULL;
+ 
+ }
+ /*}}}*/
+@@ -46,9 +45,8 @@
+ 		//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 		this->parameters = NULL;
+ 
+-		/*intialize inputs and results: */
++		/*intialize inputs: */
+ 		this->inputs  = new Inputs();
+-		this->results = new Results();
+ 
+ 		/*initialize pointers:*/
+ 		this->nodes    = NULL;
+@@ -61,7 +59,6 @@
+ /*FUNCTION Tria::~Tria(){{{*/
+ Tria::~Tria(){
+ 	delete inputs;
+-	delete results;
+ 	this->parameters=NULL;
+ }
+ /*}}}*/
+@@ -94,12 +91,6 @@
+ 	else{
+ 		tria->inputs=new Inputs();
+ 	}
+-	if(this->results){
+-		tria->results=(Results*)this->results->Copy();
+-	}
+-	else{
+-		tria->results=new Results();
+-	}
+ 	/*point parameters: */
+ 	tria->parameters=this->parameters;
+ 
+@@ -758,21 +749,9 @@
+ 	if (inputs) inputs->DeepEcho();
+ 	else _printf_("inputs=NULL\n");
+ 
+-	if (results) results->DeepEcho();
+-	else _printf_("results=NULL\n");
+-
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::DeleteResults {{{*/
+-void  Tria::DeleteResults(void){
+-
+-	/*Delete and reinitialize results*/
+-	delete this->results;
+-	this->results=new Results();
+-
+-}
+-/*}}}*/
+ /*FUNCTION Tria::Delta18oParameterization{{{*/
+ void  Tria::Delta18oParameterization(void){
+ 
+@@ -868,9 +847,6 @@
+ 	_printf_("   inputs\n");
+ 	if (inputs) inputs->Echo();
+ 	else _printf_("inputs=NULL\n");
+-
+-	if (results) results->Echo();
+-	else _printf_("results=NULL\n");
+ }
+ /*}}}*/
+ /*FUNCTION Tria::ObjectEnum{{{*/
+@@ -1550,26 +1526,6 @@
+ 	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetVectorFromResults{{{*/
+-void  Tria::GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp){
+-
+-	/*Get result*/
+-	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+-	if(interp==P1Enum){
+-		int vertexpidlist[NUMVERTICES];
+-		int connectivity[NUMVERTICES];
+-		this->GetVertexSidList(&vertexpidlist[0]);
+-		this->GetConnectivityList(&connectivity[0]);
+-		elementresult->GetVectorFromResults(vector,&vertexpidlist[0],&connectivity[0],NUMVERTICES);
+-	}
+-	else if(interp==P0Enum){
+-		elementresult->GetElementVectorFromResults(vector,sid);
+-	}
+-	else{
+-		_printf_("Interpolation " << EnumToStringx(interp) << " not supported\n");
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Tria::Id {{{*/
+ int    Tria::Id(){
+ 
+@@ -2346,52 +2302,6 @@
+ 	return true;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::ListResultsInfo{{{*/
+-void Tria::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,IssmDouble** in_resultstimes,int** in_resultssteps,int* in_num_results){
+-
+-	/*Intermediaries*/
+-	int        *resultsenums    = NULL;
+-	int        *resultssizes    = NULL;
+-	IssmDouble *resultstimes    = NULL;
+-	int        *resultssteps    = NULL;
+-
+-	/*Checks*/
+-	_assert_(in_num_results);
+-
+-	/*Count number of results*/
+-	int numberofresults = this->results->Size();
+-
+-	if(numberofresults){
+-
+-		/*Allocate output*/
+-		resultsenums=xNew<int>(numberofresults);
+-		resultssizes=xNew<int>(numberofresults);
+-		resultstimes=xNew<IssmDouble>(numberofresults);
+-		resultssteps=xNew<int>(numberofresults);
+-
+-		/*populate enums*/
+-		for(int i=0;i<this->results->Size();i++){
+-			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
+-			resultstimes[i]=elementresult->GetTime();
+-			resultssteps[i]=elementresult->GetStep();
+-			if(elementresult->ObjectEnum()==TriaP1ElementResultEnum){
+-				resultssizes[i]=P1Enum;
+-			}
+-			else{
+-				resultssizes[i]=P0Enum;
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointers:*/
+-	*in_num_results=numberofresults;
+-	*in_resultsenums=resultsenums;
+-	*in_resultssizes=resultssizes;
+-	*in_resultstimes=resultstimes;
+-	*in_resultssteps=resultssteps;
+-
+-}/*}}}*/
+ /*FUNCTION Tria::NodalValue {{{*/
+ int    Tria::NodalValue(IssmDouble* pvalue, int index, int natureofdataenum){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16486)
+@@ -40,7 +40,6 @@
+ 
+ 		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+-		Results     *results;
+ 
+ 		/*Tria constructors, destructors {{{*/
+ 		Tria();
+@@ -95,16 +94,13 @@
+ 		bool        NoIceInElement();
+ 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+-		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
+ 		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void        InputDuplicate(int original_enum,int new_enum);
+ 		void        InputScale(int enum_type,IssmDouble scale_factor);
+-		void        DeleteResults(void);
+ 		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
+ 		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum);
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+-		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+ 		void        ResetCoordinateSystem(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16486)
+@@ -29,13 +29,11 @@
+ 	this->verticalneighbors = NULL;
+ 	this->inputs            = NULL;
+ 	this->parameters        = NULL;
+-	this->results           = NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::~Penta(){{{*/
+ Penta::~Penta(){
+ 	delete inputs;
+-	delete results;
+ 	this->parameters=NULL;
+ }
+ /*}}}*/
+@@ -64,9 +62,8 @@
+ 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 	this->parameters=NULL;
+ 
+-	/*intialize inputs and results: */
++	/*intialize inputs: */
+ 	this->inputs=new Inputs();
+-	this->results=new Results();
+ 
+ 	/*initialize pointers:*/
+ 	this->nodes             = NULL;
+@@ -107,12 +104,6 @@
+ 	else{
+ 		penta->inputs=new Inputs();
+ 	}
+-	if(this->results){
+-		penta->results=(Results*)this->results->Copy();
+-	}
+-	else{
+-		penta->results=new Results();
+-	}
+ 	/*point parameters: */
+ 	penta->parameters=this->parameters;
+ 
+@@ -844,19 +835,8 @@
+ 	parameters->DeepEcho();
+ 	_printf_("   inputs\n");
+ 	inputs->DeepEcho();
+-	_printf_("   results\n");
+-	results->DeepEcho();
+ }
+ /*}}}*/
+-/*FUNCTION Penta::DeleteResults {{{*/
+-void  Penta::DeleteResults(void){
+-
+-	/*Delete and reinitialize results*/
+-	delete this->results;
+-	this->results=new Results();
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::Delta18oParameterization{{{*/
+ void  Penta::Delta18oParameterization(void){
+         /*Are we on the base? If not, return*/
+@@ -1657,26 +1637,6 @@
+ 	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetVectorFromResults{{{*/
+-void  Penta::GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp){
+-
+-	/*Get result*/
+-	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+-	if(interp==P1Enum){
+-		int vertexpidlist[NUMVERTICES];
+-		int connectivity[NUMVERTICES];
+-		this->GetVertexSidList(&vertexpidlist[0]);
+-		this->GetConnectivityList(&connectivity[0]);
+-		elementresult->GetVectorFromResults(vector,&vertexpidlist[0],&connectivity[0],NUMVERTICES);
+-	}
+-	else if(interp==P0Enum){
+-		elementresult->GetElementVectorFromResults(vector,sid);
+-	}
+-	else{
+-		_printf_("Interpolation " << EnumToStringx(interp) << " not supported\n");
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Penta::GetZcoord {{{*/
+ IssmDouble Penta::GetZcoord(GaussPenta* gauss){
+ 
+@@ -2758,51 +2718,6 @@
+ 	return true;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::ListResultsInfo{{{*/
+-void Penta::ListResultsInfo(int** in_resultsenums,int** in_resultssizes,IssmDouble** in_resultstimes,int** in_resultssteps,int* in_num_results){
+-
+-	/*Intermediaries*/
+-	int        *resultsenums    = NULL;
+-	int        *resultssizes    = NULL;
+-	IssmDouble *resultstimes    = NULL;
+-	int        *resultssteps    = NULL;
+-
+-	/*Checks*/
+-	_assert_(in_num_results);
+-
+-	/*Count number of results*/
+-	int numberofresults = this->results->Size();
+-
+-	if(numberofresults){
+-		/*Allocate output*/
+-		resultsenums=xNew<int>(numberofresults);
+-		resultssizes=xNew<int>(numberofresults);
+-		resultstimes=xNew<IssmDouble>(numberofresults);
+-		resultssteps=xNew<int>(numberofresults);
+-
+-		/*populate enums*/
+-		for(int i=0;i<this->results->Size();i++){
+-			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
+-			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
+-			resultstimes[i]=elementresult->GetTime();
+-			resultssteps[i]=elementresult->GetStep();
+-			if(elementresult->ObjectEnum()==PentaP1ElementResultEnum){
+-				resultssizes[i]=P1Enum;
+-			}
+-			else{
+-				resultssizes[i]=P0Enum;
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointers:*/
+-	*in_num_results=numberofresults;
+-	*in_resultsenums=resultsenums;
+-	*in_resultssizes=resultssizes;
+-	*in_resultstimes=resultstimes;
+-	*in_resultssteps=resultssteps;
+-
+-}/*}}}*/
+ /*FUNCTION Penta::MinEdgeLength{{{*/
+ IssmDouble Penta::MinEdgeLength(IssmDouble xyz_list[6][3]){
+ 	/*Return the minimum lenght of the nine egdes of the penta*/
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 16486)
+@@ -50,15 +50,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Elements::DeleteResults{{{*/
+-void Elements::DeleteResults(void){
+-
+-	for (int i=0;i<this->Size();i++){
+-		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+-		element->DeleteResults();
+-	}
+-}
+-/*}}}*/
+ /*FUNCTION Elements::SetCurrentConfiguration{{{*/
+ void Elements::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+ 
+@@ -74,101 +65,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Elements::ToResults{{{*/
+-void Elements::ToResults(Results* results,Parameters* parameters){
+-
+-	int my_rank;
+-	int num_procs;
+-
+-	int                 *resultsenums       = NULL;
+-	int                 *resultssizes       = NULL;
+-	int                 *resultssteps       = NULL;
+-	IssmDouble          *resultstimes       = NULL;
+-	IssmDouble          *vector_serial      = NULL;
+-	Vector<IssmDouble> *vector = NULL;
+-	bool                io_gather;
+-	int                 numberofvertices,numberofelements;
+-	int                 numberofresults ,vectorsize;
+-	int                 rank;
+-	int                 minrank;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
+-
+-	/*Recover parameters: */
+-	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+-	parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
+-	parameters->FindParam(&numberofelements,MeshNumberofelementsEnum);
+-
+-	/*Get rank of first cpu that has results*/
+-	if(this->Size()) rank=my_rank;
+-	else rank=num_procs;
+-	ISSM_MPI_Allreduce (&rank,&minrank,1,ISSM_MPI_INT,ISSM_MPI_MIN,IssmComm::GetComm());
+-
+-	/*see what the first element of this partition has in stock (this is common to all partitions)*/
+-	if(my_rank==minrank){
+-		if(this->Size()==0) _error_("Cannot write results because there is no element??");
+-		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+-		element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+-	}
+-	ISSM_MPI_Bcast(&numberofresults,1,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-
+-	/*Get out if there is no results. Otherwise broadcast info*/
+-	if(!numberofresults) return;
+-	if(my_rank!=minrank){
+-		resultsenums=xNew<int>(numberofresults);
+-		resultssizes=xNew<int>(numberofresults);
+-		resultstimes=xNew<IssmDouble>(numberofresults);
+-		resultssteps=xNew<int>(numberofresults);
+-	}
+-	ISSM_MPI_Bcast(resultsenums,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(resultssizes,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(resultstimes,numberofresults,ISSM_MPI_DOUBLE,minrank,IssmComm::GetComm());
+-	ISSM_MPI_Bcast(resultssteps,numberofresults,ISSM_MPI_INT,minrank,IssmComm::GetComm());
+-
+-	/*Loop over all results and get nodal vector*/
+-	for(int i=0;i<numberofresults;i++){
+-
+-		/*Get vector for result number i*/
+-		if(resultssizes[i]==P1Enum)      vectorsize=numberofvertices;
+-		else if(resultssizes[i]==P0Enum) vectorsize=numberofelements;
+-		else _error_("Unkown result size: " << EnumToStringx(resultssizes[i]));
+-		vector=new Vector<IssmDouble>(vectorsize);
+-
+-		for(int j=0;j<this->Size();j++){
+-			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(j));
+-			element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
+-		}
+-		vector->Assemble();
+-
+-		/*Serialize and add to results*/
+-		vector_serial=vector->ToMPISerial();
+-		results->DeleteResult(resultsenums[i],resultssteps[i]);
+-		if(my_rank==0){
+-			/*No need to add this vector for all cpus*/
+-#ifdef _HAVE_ADOLC_
+-			IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+-			for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
+-			results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
+-			xDelete<IssmPDouble>(vector_serial_passive);
+-#else
+-			results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
+-#endif
+-		}
+-
+-		/*clean up*/
+-		delete vector;
+-		xDelete<IssmDouble>(vector_serial);
+-	}
+-
+-	/*Free ressources:*/
+-	xDelete<int>(resultsenums);
+-	xDelete<int>(resultssizes);
+-	xDelete<int>(resultssteps);
+-	xDelete<IssmDouble>(resultstimes);
+-}
+-/*}}}*/
+ /*FUNCTION Elements::MaxNumNodes{{{*/
+ int Elements::MaxNumNodes(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16486)
+@@ -42,7 +42,6 @@
+ 
+ 		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+-		Results     *results;
+ 
+ 		/*Penta constructors and destructor: {{{*/
+ 		Penta();
+@@ -81,7 +80,6 @@
+ 		void   CreatePVector(Vector<IssmDouble>* pf);
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		void   Delta18oParameterization(void);
+-		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
+ 		void   GetNodesSidList(int* sidlist);
+ 		void   GetNodesLidList(int* lidlist);
+@@ -89,7 +87,6 @@
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
+-		void   GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int name_enum,int interp);
+ 
+ 		int    Sid();
+ 		void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+@@ -97,7 +94,6 @@
+ 		void   InputDuplicate(int original_enum,int new_enum);
+ 		void   InputScale(int enum_type,IssmDouble scale_factor);
+ 
+-		void   ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results);
+ 		void   ResultInterpolation(int* pinterpolation,int output_enum);
+ 		void   ResultToVector(Vector<IssmPDouble>* vector,int output_enum);
+ 		void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16486)
+@@ -26,7 +26,6 @@
+ 	this->matpar     = NULL;
+ 	this->inputs     = NULL;
+ 	this->parameters = NULL;
+-	this->results    = NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Seg::Seg(int id, int sid,int index, IoModel* iomodel,int nummodels){{{*/
+@@ -40,9 +39,8 @@
+ 			//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
+ 			this->parameters = NULL;
+ 
+-			/*intialize inputs and results: */
++			/*intialize inputs: */
+ 			this->inputs  = new Inputs();
+-			this->results = new Results();
+ 
+ 			/*initialize pointers:*/
+ 			this->nodes    = NULL;
+@@ -55,7 +53,6 @@
+ /*FUNCTION Seg::~Seg(){{{*/
+ Seg::~Seg(){
+ 	delete inputs;
+-	delete results;
+ 	this->parameters=NULL;
+ }
+ /*}}}*/
+@@ -88,9 +85,6 @@
+ 	_printf_("   inputs\n");
+ 	if (inputs) inputs->Echo();
+ 	else _printf_("inputs=NULL\n");
+-
+-	if (results) results->Echo();
+-	else _printf_("results=NULL\n");
+ }
+ /*}}}*/
+ /*FUNCTION Seg::DeepEcho{{{*/
+@@ -118,9 +112,6 @@
+ 	if (inputs) inputs->DeepEcho();
+ 	else _printf_("inputs=NULL\n");
+ 
+-	if (results) results->DeepEcho();
+-	else _printf_("results=NULL\n");
+-
+ 	return;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Elements/Elements.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Elements.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Elements.h	(revision 16486)
+@@ -24,10 +24,8 @@
+ 
+ 		/*numerics*/
+ 		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		void   DeleteResults(void);
+ 		int    MaxNumNodes(void);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		void   ToResults(Results* results,Parameters* parameters);
+ 		int    NumberOfElements(void);
+ 		void   InputDuplicate(int input_enum,int output_enum);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16486)
+@@ -39,7 +39,6 @@
+ 
+ 		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+-		Results     *results;
+ 
+ 		/*Seg constructors, destructors {{{*/
+ 		Seg();
+@@ -104,16 +103,13 @@
+ 		#endif
+ 		void        GetSolutionFromInputs(Vector<IssmDouble>* solution){_error_("not implemented yet");};
+ 		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
+-		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp){_error_("not implemented yet");};
+ 		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){_error_("not implemented yet");};
+ 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum){_error_("not implemented yet");};
+ 		void        InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
+ 		void        InputScale(int enum_type,IssmDouble scale_factor){_error_("not implemented yet");};
+-		void        DeleteResults(void){_error_("not implemented yet");};
+ 		void        MaterialUpdateFromTemperature(void){_error_("not implemented yet");};
+ 		int         NodalValue(IssmDouble* pvalue, int index, int natureofdataenum){_error_("not implemented yet");};
+ 		void        PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm){_error_("not implemented yet");};
+-		void        ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results){_error_("not implemented yet");};
+ 		void        ResultInterpolation(int* pinterpolation,int output_enum){_error_("not implemented");};
+ 		void        ResultToVector(Vector<IssmPDouble>* vector,int output_enum){_error_("not implemented");};
+ 		void        ResetCoordinateSystem(void){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 16486)
+@@ -37,7 +37,6 @@
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void){return P0Enum;};
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 16486)
+@@ -184,10 +184,6 @@
+ 	this->SaveValue(); //because this is what SpawnResult saves FIXME
+ 
+ }/*}}}*/
+-/*FUNCTION ControlInput::SpawnResult{{{*/
+-ElementResult* ControlInput::SpawnResult(int step, IssmDouble time){
+-	return savedvalues->SpawnResult(step,time);
+-}/*}}}*/
+ /*FUNCTION ControlInput::SpawnTriaInput{{{*/
+ Input* ControlInput::SpawnTriaInput(int location){
+ 	return values->SpawnTriaInput(location);
+@@ -196,11 +192,6 @@
+ Input* ControlInput::SpawnSegInput(int index1,int index2){
+ 	return values->SpawnSegInput(index1,index2);
+ }/*}}}*/
+-/*FUNCTION ControlInput::SpawnGradient{{{*/
+-ElementResult* ControlInput::SpawnGradient(int step, IssmDouble time){
+-	_assert_(gradient);
+-	return gradient->SpawnResult(step,time);
+-}/*}}}*/
+ /*FUNCTION ControlInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){{{*/
+ void ControlInput::GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){
+ 	values->GetVectorFromInputs(vector,doflist);
+Index: ../trunk-jpl/src/c/classes/Inputs/SegInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 16486)
+@@ -38,7 +38,6 @@
+ 		Input* PointwiseDivide(Input* inputB){_error_("not supported yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not supported yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not supported yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time){_error_("not supported yet");};
+ 		int  GetResultInterpolation(void){_error_("not implemented");};
+ 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void   Configure(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/Input.h	(revision 16486)
+@@ -10,7 +10,6 @@
+ #include "../../datastructures/datastructures.h"
+ #include "../../shared/shared.h"
+ class Node;
+-class ElementResult;
+ class GaussTria;
+ class GaussSeg;
+ class Parameters;
+@@ -71,7 +70,6 @@
+ 		virtual Input* PointwiseDivide(Input* inputB)=0;
+ 		virtual Input* PointwiseMax(Input* inputmax)=0;
+ 		virtual Input* PointwiseMin(Input* inputmin)=0;
+-		virtual ElementResult* SpawnResult(int step, IssmDouble time)=0;
+ 		virtual int GetResultInterpolation(void)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 16486)
+@@ -42,7 +42,6 @@
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+@@ -90,7 +89,6 @@
+ 		void VerticallyIntegrate(Input* thickness_input);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist,const char* data);
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist);
+-		ElementResult* SpawnGradient(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void);
+ 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist);
+ 		void ScaleGradient(IssmDouble scale);
+Index: ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 16486)
+@@ -40,7 +40,6 @@
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time){_error_("not implemented yet");};
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
+@@ -84,7 +83,6 @@
+ 		void Extrude(void){_error_("not implemented yet");};
+ 		void VerticallyIntegrate(Input* thickness_input){_error_("not implemented yet");};
+ 		void GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist){_error_("not implemented yet");};
+-		ElementResult* SpawnGradient(int step, IssmDouble time){_error_("not implemented yet");};
+ 		int GetResultInterpolation(void){_error_("not implemented yet");};
+ 		void GetGradient(Vector<IssmDouble>* gradient_vec,int* doflist){_error_("not implemented yet");};
+ 		void ScaleGradient(IssmDouble scale){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 16486)
+@@ -98,14 +98,7 @@
+ 	return outinput;
+ }
+ /*}}}*/
+-/*FUNCTION IntInput::SpawnResult{{{*/
+-ElementResult* IntInput::SpawnResult(int step, IssmDouble time){
+ 
+-	_error_("not supported yet!");
+-
+-}
+-/*}}}*/
+-
+ /*Object functions*/
+ /*FUNCTION IntInput::GetInputValue(bool* pvalue) {{{*/
+ void IntInput::GetInputValue(bool* pvalue){_error_("not supported yet!");}
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 16486)
+@@ -100,14 +100,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION BoolInput::SpawnResult{{{*/
+-ElementResult* BoolInput::SpawnResult(int step, IssmDouble time){
+ 
+-	return new BoolElementResult(this->enum_type,this->value,step,time);
+-
+-}
+-/*}}}*/
+-
+ /*Object functions*/
+ /*FUNCTION BoolInput::GetInputValue(bool* pvalue) {{{*/
+ void BoolInput::GetInputValue(bool* pvalue){
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 16486)
+@@ -116,13 +116,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION TriaInput::SpawnResult{{{*/
+-ElementResult* TriaInput::SpawnResult(int step, IssmDouble time){
+-
+-	return new TriaP1ElementResult(this->enum_type,this->values,step,time);
+-
+-}
+-/*}}}*/
+ /*FUNCTION TriaInput::GetResultInterpolation{{{*/
+ int  TriaInput::GetResultInterpolation(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 16486)
+@@ -38,7 +38,6 @@
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void){return P0Enum;};
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 16486)
+@@ -38,7 +38,6 @@
+ 		Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* inputB){_error_("not implemented yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void){return P0Enum;};
+ 		void Configure(Parameters* parameters);
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+Index: ../trunk-jpl/src/c/classes/Inputs/TriaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 16486)
+@@ -38,7 +38,6 @@
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int    GetResultInterpolation(void);
+ 		void   AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void   Configure(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 16486)
+@@ -129,13 +129,6 @@
+ 	_error_("not supported");
+ }
+ /*}}}*/
+-/*FUNCTION PentaInput::SpawnResult{{{*/
+-ElementResult* PentaInput::SpawnResult(int step, IssmDouble time){
+-
+-	return new PentaP1ElementResult(this->enum_type,this->values,step,time);
+-
+-}
+-/*}}}*/
+ /*FUNCTION PentaInput::GetResultInterpolation{{{*/
+ int  PentaInput::GetResultInterpolation(void){
+ 
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 16486)
+@@ -146,23 +146,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION TransientInput::SpawnResult{{{*/
+-ElementResult* TransientInput::SpawnResult(int step, IssmDouble time){
+ 
+-	ElementResult* elementresult=NULL;
+-
+-	/*Ok, we want to spawn an ElementResult. We have the time, just get 
+-	 *the correct values: */
+-	Input* input=GetTimeInput(time);
+-
+-	elementresult=input->SpawnResult(step,time);
+-
+-   delete input;
+-
+-	return elementresult;
+-}
+-/*}}}*/
+-
+ /*Object functions*/
+ /*FUNCTION TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){{{*/
+ void TransientInput::GetInputValue(IssmDouble* pvalue,GaussTria* gauss){
+Index: ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 16486)
+@@ -100,14 +100,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION DoubleInput::SpawnResult{{{*/
+-ElementResult* DoubleInput::SpawnResult(int step, IssmDouble time){
+ 
+-	return new DoubleElementResult(this->enum_type,this->value,step,time);
+-
+-}
+-/*}}}*/
+-
+ /*Object functions*/
+ /*FUNCTION DoubleInput::GetInputValue(bool* pvalue) {{{*/
+ void DoubleInput::GetInputValue(bool* pvalue){
+Index: ../trunk-jpl/src/c/classes/Inputs/PentaInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 16486)
+@@ -38,7 +38,6 @@
+ 		Input* PointwiseDivide(Input* inputB);
+ 		Input* PointwiseMin(Input* inputB);
+ 		Input* PointwiseMax(Input* inputB);
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void);
+ 		void AddTimeValues(IssmDouble* values,int step,IssmDouble time){_error_("not supported yet");};
+ 		void Configure(Parameters* parameters);
+Index: ../trunk-jpl/src/c/classes/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16485)
++++ ../trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 16486)
+@@ -42,7 +42,6 @@
+ 		Input* PointwiseDivide(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
+ 		Input* PointwiseMax(Input* forcingB){_error_("not implemented yet");};
+-		ElementResult* SpawnResult(int step, IssmDouble time);
+ 		int  GetResultInterpolation(void);
+ 		void Configure(Parameters* parameters);
+ 		/*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16486-16487.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16486-16487.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16486-16487.diff	(revision 16556)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/src/m/enum/DoubleElementResultEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DoubleElementResultEnum.m	(revision 16486)
++++ ../trunk-jpl/src/m/enum/DoubleElementResultEnum.m	(revision 16487)
+@@ -1,11 +0,0 @@
+-function macro=DoubleElementResultEnum()
+-%DOUBLEELEMENTRESULTENUM - Enum of DoubleElementResult
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=DoubleElementResultEnum()
+-
+-macro=StringToEnum('DoubleElementResult');
+Index: ../trunk-jpl/src/m/enum/ElementResultEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ElementResultEnum.m	(revision 16486)
++++ ../trunk-jpl/src/m/enum/ElementResultEnum.m	(revision 16487)
+@@ -1,11 +0,0 @@
+-function macro=ElementResultEnum()
+-%ELEMENTRESULTENUM - Enum of ElementResult
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=ElementResultEnum()
+-
+-macro=StringToEnum('ElementResult');
+Index: ../trunk-jpl/src/m/enum/BoolElementResultEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BoolElementResultEnum.m	(revision 16486)
++++ ../trunk-jpl/src/m/enum/BoolElementResultEnum.m	(revision 16487)
+@@ -1,11 +0,0 @@
+-function macro=BoolElementResultEnum()
+-%BOOLELEMENTRESULTENUM - Enum of BoolElementResult
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=BoolElementResultEnum()
+-
+-macro=StringToEnum('BoolElementResult');
+Index: ../trunk-jpl/src/m/enum/TriaP1ElementResultEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/TriaP1ElementResultEnum.m	(revision 16486)
++++ ../trunk-jpl/src/m/enum/TriaP1ElementResultEnum.m	(revision 16487)
+@@ -1,11 +0,0 @@
+-function macro=TriaP1ElementResultEnum()
+-%TRIAP1ELEMENTRESULTENUM - Enum of TriaP1ElementResult
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=TriaP1ElementResultEnum()
+-
+-macro=StringToEnum('TriaP1ElementResult');
+Index: ../trunk-jpl/src/m/enum/PentaP1ElementResultEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PentaP1ElementResultEnum.m	(revision 16486)
++++ ../trunk-jpl/src/m/enum/PentaP1ElementResultEnum.m	(revision 16487)
+@@ -1,11 +0,0 @@
+-function macro=PentaP1ElementResultEnum()
+-%PENTAP1ELEMENTRESULTENUM - Enum of PentaP1ElementResult
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=PentaP1ElementResultEnum()
+-
+-macro=StringToEnum('PentaP1ElementResult');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16486)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16487)
+@@ -367,7 +367,6 @@
+ def DoubleParamEnum(): return StringToEnum("DoubleParam")[0]
+ def DoubleVecParamEnum(): return StringToEnum("DoubleVecParam")[0]
+ def ElementEnum(): return StringToEnum("Element")[0]
+-def ElementResultEnum(): return StringToEnum("ElementResult")[0]
+ def ExternalResultEnum(): return StringToEnum("ExternalResult")[0]
+ def FileParamEnum(): return StringToEnum("FileParam")[0]
+ def InputEnum(): return StringToEnum("Input")[0]
+@@ -513,18 +512,14 @@
+ def MINIcondensedEnum(): return StringToEnum("MINIcondensed")[0]
+ def TaylorHoodEnum(): return StringToEnum("TaylorHood")[0]
+ def SaveResultsEnum(): return StringToEnum("SaveResults")[0]
+-def BoolElementResultEnum(): return StringToEnum("BoolElementResult")[0]
+ def BoolExternalResultEnum(): return StringToEnum("BoolExternalResult")[0]
+-def DoubleElementResultEnum(): return StringToEnum("DoubleElementResult")[0]
+ def DoubleExternalResultEnum(): return StringToEnum("DoubleExternalResult")[0]
+ def DoubleMatExternalResultEnum(): return StringToEnum("DoubleMatExternalResult")[0]
+ def IntExternalResultEnum(): return StringToEnum("IntExternalResult")[0]
+ def JEnum(): return StringToEnum("J")[0]
+-def PentaP1ElementResultEnum(): return StringToEnum("PentaP1ElementResult")[0]
+ def StringExternalResultEnum(): return StringToEnum("StringExternalResult")[0]
+ def StepEnum(): return StringToEnum("Step")[0]
+ def TimeEnum(): return StringToEnum("Time")[0]
+-def TriaP1ElementResultEnum(): return StringToEnum("TriaP1ElementResult")[0]
+ def WaterColumnOldEnum(): return StringToEnum("WaterColumnOld")[0]
+ def OutputdefinitionEnum(): return StringToEnum("Outputdefinition")[0]
+ def OutputdefinitionListEnum(): return StringToEnum("OutputdefinitionList")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16487-16488.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16487-16488.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16487-16488.diff	(revision 16556)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 16487)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 16488)
+@@ -20,55 +20,52 @@
+ 	return;
+ end
+ 
+-if ~isempty(data)
+-	%first load x,y, etc ... to speed up plot
++%first load x,y, etc ... to speed up plot
++if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
++	x=md.mesh.x;
++	if isprop(md.mesh,'x2d'), x2d=md.mesh.x2d; end
++	y=md.mesh.y;
++	if isprop(md.mesh,'y2d'), y2d=md.mesh.y2d; end
++else
++	x=md.mesh.long;
++	y=md.mesh.lat;
++end
+ 
+-	if ~strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
+-		x=md.mesh.x;
+-		if isprop(md.mesh,'x2d'), x2d=md.mesh.x2d; end
+-		y=md.mesh.y;
+-		if isprop(md.mesh,'y2d'), y2d=md.mesh.y2d; end
+-	else
+-		x=md.mesh.long;
+-		y=md.mesh.lat;
+-	end
++z_field=getfieldvalue(options,'z',md.mesh.z);
++if ischar(z_field),
++	z=md.(z_field);
++elseif isnumeric(z_field),
++	z=z_field;
++else
++	z=md.mesh.z;
++end
+ 
+-	z_field=getfieldvalue(options,'z',md.mesh.z);
+-	if ischar(z_field),
+-		z=md.(z_field);
+-	elseif isnumeric(z_field),
+-		z=z_field;
+-	else
+-		z=md.mesh.z;
+-	end
++if isprop(md.mesh,'elements2d'), elements2d=md.mesh.elements2d; end
++elements=md.mesh.elements;
+ 
+-	if isprop(md.mesh,'elements2d'), elements2d=md.mesh.elements2d; end
+-	elements=md.mesh.elements;
+-
+-	%is it a 2d plot?
+-	if (md.mesh.dimension==2);
++%is it a 2d plot?
++if (md.mesh.dimension==2);
++	is2d=1;
++elseif (md.mesh.dimension==3),
++	if getfieldvalue(options,'layer',0)>=1,
+ 		is2d=1;
+-	elseif (md.mesh.dimension==3),
+-		if getfieldvalue(options,'layer',0)>=1,
+-			is2d=1;
+-		else
+-			is2d=0;
+-		end
+ 	else
+-		error(['dim = ' num2str(md.mesh.dimension) ' not supported yet']);
++		is2d=0;
+ 	end
++else
++	error(['dim = ' num2str(md.mesh.dimension) ' not supported yet']);
++end
+ 
+-	%layer projection? 
+-	if getfieldvalue(options,'layer',0)>=1,
+-		if strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
+-			error('processmesh error message: cannot work with 3D meshes for now');
+-		end
+-		%we modify the mesh temporarily to a 2d mesh from which the 3d mesh was extruded. 
+-		x=x2d;
+-		y=y2d;
+-		z=zeros(size(x2d));
+-		elements=elements2d;
++%layer projection? 
++if getfieldvalue(options,'layer',0)>=1,
++	if strcmpi(getfieldvalue(options,'coord','xy'),'latlon'),
++		error('processmesh error message: cannot work with 3D meshes for now');
+ 	end
++	%we modify the mesh temporarily to a 2d mesh from which the 3d mesh was extruded. 
++	x=x2d;
++	y=y2d;
++	z=zeros(size(x2d));
++	elements=elements2d;
+ end
+ 
+ %units
Index: issm/oecreview/Archive/16133-16554/ISSM-16488-16489.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16488-16489.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16488-16489.diff	(revision 16556)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16488)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16489)
+@@ -590,24 +590,6 @@
+ 	*presults = results;
+ }
+ /*}}}*/
+-void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
+-
+-	/*Convert list of enums to list of string*/
+-	char** enumlist = xNew<char*>(numoutputs);
+-	for(int i=0;i<numoutputs;i++){
+-		EnumToStringx(&enumlist[i],requested_outputs[i]);
+-	}
+-
+-	/*Call main module*/
+-	this->RequestedOutputsx(presults,enumlist,numoutputs);
+-
+-
+-	/*clean up and return*/
+-	for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
+-	xDelete<char*>(enumlist);
+-	return;
+-}
+-/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16488)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16489)
+@@ -81,7 +81,6 @@
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+-		void RequestedOutputsx(Results **presults,int* requested_outputs,int numoutputs);
+ 		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
Index: issm/oecreview/Archive/16133-16554/ISSM-16489-16490.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16489-16490.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16489-16490.diff	(revision 16556)
@@ -0,0 +1,113 @@
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16489)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16490)
+@@ -1,4 +1,4 @@
+-function exportVTK(filename,model)
++function exportVTK(filename,model,varargin)
+ % vtk export
+ % function exportVTK(filename,model)
+ % creates a directory with the vtk files for displays in paraview
+@@ -10,6 +10,10 @@
+ %                   (string)
+ %------------------------------------------------------------------
+ %        model      this is md 
++%------------------------------------------------------------------
++% By default only the results are exported, you can add whichever
++% field you need as a string:
++% add 'geometry' to export md.geometry
+ %
+ % Basile de Fleurian:
+ 
+@@ -34,11 +38,9 @@
+ 
+ %this is the result structure
+ res_struct=model.results;
+-
+ %Getting all the solutions of the model
+ solnames=fields(res_struct);
+ num_of_sols=length(solnames);
+-
+ %building solution structure 
+ for i=1:num_of_sols
+ 	sol_struct{i}=res_struct.(solnames{i});
+@@ -47,9 +49,9 @@
+ %looking for multiple time steps
+ num_of_timesteps=size(sol_struct{1},2);
+ 
+-for i=1:num_of_timesteps;
++for step=1:num_of_timesteps;
+ 	%by default, we take the timestep from the first solution sturcture
+-	timestep=sol_struct{1}(i).step;
++	timestep=sol_struct{1}(step).step;
+ 	
+ 	FID = fopen(strcat(path,filesep,name,filesep,name,'.vtk',int2str(timestep),'.vtk'),'w+');
+ 	fprintf(FID,'# vtk DataFile Version 2.0 \n');
+@@ -65,38 +67,52 @@
+   end
+ 	P=[points zeros(num_of_points,3-dim)];
+ 	fprintf(FID,s,P');
+- 
++	
+ 	fprintf(FID,'CELLS %d %d\n',num_of_elt,num_of_elt*(point_per_elt+1));
+ 	s='%d';
+-	for k=1:point_per_elt
++	for j=1:point_per_elt
+ 		s=horzcat(s,{' %d'});
+   end
+ 	s=cell2mat(horzcat(s,{'\n'}));
+ 	fprintf(FID,s,[(point_per_elt)*ones(num_of_elt,1) model.mesh.elements-1]');
+- 
++	
+ 	fprintf(FID,'CELL_TYPES %d\n',num_of_elt);
+ 	s='%d\n';
+ 	fprintf(FID,s,celltype*ones(num_of_elt,1));
+-	
++	fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
++
+ 	%loop over the different solution structures
+ 	for j=1:num_of_sols
+-
++		
+ 		%getting the number of fields in the solution
+-		fieldnames=fields(sol_struct{j}(i));
++		fieldnames=fields(sol_struct{j}(step));
+ 		num_of_fields=length(fieldnames);
+ 		
+ 		%check which field is a real result and print
+-		fprintf(FID,'POINT_DATA %s \n',num2str(num_of_points));
+-		for k=1:num_of_fields
+-			
+-			if ((length(sol_struct{j}(i).(fieldnames{k})))==num_of_points);
++			for k=1:num_of_fields
++			if ((length(sol_struct{j}(step).(fieldnames{k})))==num_of_points);
+ 				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{k});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
+-				fprintf(FID,s,sol_struct{j}(i).(fieldnames{k}));
++				fprintf(FID,s,sol_struct{j}(step).(fieldnames{k}));
++    	end		
++	  end 
++	end
++	
++	%loop on arguments, if something other than result is asked, do
++	%it now
++	for j= 1:nargin-2
++		res_struct=model.(varargin{j});
++		solnames=fields(res_struct);
++		num_of_sols=length(solnames);
++		for k=1:num_of_sols
++			if ((length(res_struct.(solnames{k})))==num_of_points);
++				fprintf(FID,'SCALARS %s float 1 \n',solnames{k});
++				fprintf(FID,'LOOKUP_TABLE default\n');
++				s='%e\n';
++				fprintf(FID,s,res_struct.(solnames{k}));
+ 	    end		
+-     end 
+-	 end
+-	 fclose(FID);
+-  end
++		end 
++	end
++	fclose(FID);
+ end
Index: issm/oecreview/Archive/16133-16554/ISSM-16490-16491.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16490-16491.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16490-16491.diff	(revision 16556)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 16490)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 16491)
+@@ -117,6 +117,11 @@
+ 			export CXX=icpc
+ 			export CXXFLAGS=" -O3 -D_INTEL_LINUX_ "
+ 			export CFLAGS=" -O3 -D_INTEL_LINUX_ "
++		elif test $VENDOR = intel-pleiades-gcc; then
++			export CC=gcc
++			export CXX=g++
++			export CXXFLAGS=" -g -O2 "
++			export CFLAGS=" -g -O2 "
+         else
+ 		AC_MSG_ERROR([unknown compiler vendor!])
+ 		fi
Index: issm/oecreview/Archive/16133-16554/ISSM-16491-16492.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16491-16492.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16491-16492.diff	(revision 16556)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh	(revision 16492)
+@@ -0,0 +1,19 @@
++#!/bin/csh
++./configure \
++	--prefix=$ISSM_DIR \
++	--without-kriging \
++	--with-wrappers=no \
++	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
++	--with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
++	--with-mpi-libflags="-L/nasa/mvapich2/1.6.sles11/gcc/lib -llmpe -lmpe -lmpich" \
++	--with-adolc-dir="$ISSM_DIR/externalpackages/adolc/install"\
++	--with-ampi-dir="$ISSM_DIR/externalpackages/adjoinablempi/install"\
++	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-gsl-dir="$ISSM_DIR/externalpackages/gsl/install" \
++	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-graphics-lib="/usr/lib64/libX11.so" \
++	--with-cxxoptflags="-g -O2" \
++	--with-vendor="intel-pleiades-gcc"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16492-16493.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16492-16493.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16492-16493.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16492)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16493)
+@@ -1044,7 +1044,7 @@
+ LDADD = ./libISSMCore.a ./libISSMOverload.a
+ 
+ #External packages
+-LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB)  $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADOLCLIB) $(METEOIOLIB) $(SNOWPACKLIB)
++LDADD += $(PETSCLIB) $(TAOLIB) $(PLAPACKLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPOOLESLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MKLLIB) $(MPILIB)  $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(OSLIBS) $(GSLLIB) $(AMPILIB) $(ADOLCLIB) $(MPILIB) $(METEOIOLIB) $(SNOWPACKLIB)
+ 
+ if FORTRAN
+ LDADD += $(FLIBS)
Index: issm/oecreview/Archive/16133-16554/ISSM-16493-16494.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16493-16494.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16493-16494.diff	(revision 16556)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16493)
++++ ../trunk-jpl/src/c/classes/Elements/Element.h	(revision 16494)
+@@ -115,7 +115,7 @@
+ 		virtual void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
+ 		virtual void   ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
+-		virtual void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum)=0;
++		virtual void   ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum)=0;
+ 		virtual void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
+ 		virtual void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
+ 		virtual void   InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16493)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16494)
+@@ -4734,7 +4734,7 @@
+ 
+ }/*}}}*/
+ /*FUNCTION Tria::ControlToVectors{{{*/
+-void Tria::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
++void Tria::ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){
+ 
+ 	Input* input=NULL;
+ 	if(control_enum==MaterialsRheologyBbarEnum || control_enum==DamageDbarEnum){
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16493)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16494)
+@@ -154,7 +154,7 @@
+ 		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void       ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+-		void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
++		void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
+ 		IssmDouble RheologyBbarAbsGradient(void);
+ 		IssmDouble ThicknessAbsMisfit(void);
+ 		IssmDouble SurfaceAbsVelMisfit(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16493)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16494)
+@@ -145,7 +145,7 @@
+ 		void   ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index);
+ 		void   ControlInputScaleGradient(int enum_type,IssmDouble scale);
+ 		void   ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index);
+-		void   ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum);
++		void   ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum);
+ 		IssmDouble RheologyBbarAbsGradient(void);
+ 		IssmDouble ThicknessAbsMisfit(void);
+ 		IssmDouble SurfaceAbsVelMisfit(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16493)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16494)
+@@ -165,7 +165,7 @@
+ 		void       ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index){_error_("not implemented yet");};
+ 		void       ControlInputScaleGradient(int enum_type,IssmDouble scale){_error_("not implemented yet");};
+ 		void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");};
+-		void       ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
++		void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){_error_("not implemented yet");};
+ 		IssmDouble RheologyBbarAbsGradient(void){_error_("not implemented yet");};
+ 		IssmDouble ThicknessAbsMisfit(void){_error_("not implemented yet");};
+ 		IssmDouble SurfaceAbsVelMisfit(void){_error_("not implemented yet");};
Index: issm/oecreview/Archive/16133-16554/ISSM-16494-16495.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16494-16495.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16494-16495.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16494)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16495)
+@@ -5177,7 +5177,7 @@
+ 
+ }/*}}}*/
+ /*FUNCTION Penta::ControlToVectors{{{*/
+-void Penta::ControlToVectors(Vector<IssmDouble>* vector_control, Vector<IssmDouble>* vector_gradient,int control_enum){
++void Penta::ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){
+ 
+ 	Input* input=NULL;
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16495-16496.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16495-16496.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16495-16496.diff	(revision 16556)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16495)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16496)
+@@ -92,7 +92,6 @@
+ IoModel::~IoModel(){
+ 
+ 	/*Some checks in debugging mode*/
+-	#ifdef _ISSM_DEBUG_
+ 	if(this->data){
+ 		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
+ 			if(this->data[i]){
+@@ -102,7 +101,6 @@
+ 			}
+ 		}
+ 	}
+-	#endif
+ 
+ 	if(this->constants) delete this->constants;
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16496-16497.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16496-16497.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16496-16497.diff	(revision 16556)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 16496)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 16497)
+@@ -29,7 +29,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+-	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-4,1e-10]
+ field_values=[\
+ 	md.results.TransientSolution[0].Vx,\
+ 	md.results.TransientSolution[0].Vy,\
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 16496)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 16497)
+@@ -14,12 +14,14 @@
+ md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1',...
++field_names     ={...
++	'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1',...
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2',...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
++field_tolerances={...
++	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-4,1e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16497-16498.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16497-16498.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16497-16498.diff	(revision 16556)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16497)
++++ ../trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16498)
+@@ -63,10 +63,17 @@
+ 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+ 
+ 		if(result->GetStep()==in_result->GetStep()){
+-			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
++			char*    result_name =    result->GetResultName();
++			char* in_result_name = in_result->GetResultName();
++			if(strcmp(in_result_name,result_name)==0){
++
+ 				this->DeleteObject(result);
++				xDelete<char>(result_name);
++				xDelete<char>(in_result_name);
+ 				break;
+ 			}
++			xDelete<char>(result_name);
++			xDelete<char>(in_result_name);
+ 		}
+ 	}
+ 	this->AddObject(in_result);
Index: issm/oecreview/Archive/16133-16554/ISSM-16498-16499.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16498-16499.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16498-16499.diff	(revision 16556)
@@ -0,0 +1,230 @@
+Index: ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 16498)
++++ ../trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp	(revision 16499)
+@@ -21,12 +21,15 @@
+ 		
+ 		definition=dynamic_cast<Definition*>(output_definitions->GetObjectByOffset(i));
+ 
+-		if (strcmp(definition->Name(),output_string)==0){
++		char* name = definition->Name();
++		if (strcmp(name,output_string)==0){
+ 			/*This is the object that we have been chasing for. compute the response and return: */
+ 			return_value=definition->Response(femmodel);
+ 			delete output_definitions;
++			xDelete<char>(name);
+ 			return return_value;
+ 		}
++		xDelete<char>(name);
+ 	}
+ 	/*If we are here, did not find the definition for this response, not good!: */
+ 	_error_("Could not find the response for output definition " << output_string << " because could not find the definition itself!");
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16498)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16499)
+@@ -1087,14 +1087,14 @@
+ 	int* codes=NULL;
+ 
+ 	/*output: */
+-	int   numstrings=0;
+-	char** strings=NULL;
++	int    numstrings = 0;
++	char **strings    = NULL;
+ 
+ 	/*intermediary: */
+-	char* string=NULL;
+-	int   string_size;
+-	int*   code=NULL;
+-	fpos_t* file_positions=NULL;
++	char   *string         = NULL;
++	int     string_size;
++	int    *code           = NULL;
++	fpos_t *file_positions = NULL;
+ 
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+@@ -1103,12 +1103,10 @@
+ 	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+ 
+ 	if(num_instances){
+-
+ 		strings=xNew<char*>(num_instances);
+ 
+ 		for(i=0;i<num_instances;i++){
+ 
+-
+ 			if(my_rank==0){
+ 				/*check we are indeed finding a string, not something else: */
+ 				if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+@@ -1137,7 +1135,6 @@
+ 			}
+ 			strings[i]=string;
+ 		}
+-
+ 	}
+ 	/*Free ressources:*/
+ 	xDelete<int>(codes);
+@@ -1152,24 +1149,22 @@
+ 
+ 	int i;
+ 	int num_instances;
+-	int my_rank;
+-	
+ 	fpos_t* file_positions=NULL;
+ 
+ 	/*output: */
+-	IssmDouble** matrices=NULL;
+-	int*     mdims=NULL;
+-	int*     ndims=NULL;
++	IssmDouble **matrices = NULL;
++	int         *mdims    = NULL;
++	int         *ndims    = NULL;
+ 
+ 	/*intermediary: */
+-	int     M, N;
++	int          M, N;
+ 	IssmPDouble *pmatrix = NULL;
+-	IssmDouble *matrix = NULL;
+-	int*    codes=NULL;
+-	int     code;
++	IssmDouble  *matrix  = NULL;
++	int         *codes   = NULL;
++	int          code;
+ 
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
++	int my_rank=IssmComm::GetRank();
+ 	
+ 	/*Get file pointers to beginning of the data (multiple instances of it): */
+ 	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+@@ -1181,7 +1176,7 @@
+ 		mdims=xNew<int>(num_instances);
+ 		ndims=xNew<int>(num_instances);
+ 
+-		for(i=0;i<num_instances;i++){
++		for(int i=0;i<num_instances;i++){
+ 
+ 			if(my_rank==0){
+ 				code=codes[i];
+@@ -1212,7 +1207,7 @@
+ 				ISSM_MPI_Bcast(pmatrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 
+ 				_assert_(this->independents);
+-				if (this->independents[data_enum]){
++				if(this->independents[data_enum]){
+ 					/*this data has already been checked out! So cancel all that we've done here, and return 
+ 					 * the data[data_enum] directly: */
+ 					matrix=this->data[data_enum];
+@@ -1239,8 +1234,18 @@
+ 
+ 	/*Assign output pointers: */
+ 	*pmatrices=matrices;
+-	if(pmdims)*pmdims=mdims;
+-	if(pndims)*pndims=ndims;
++	if(pmdims){
++		*pmdims=mdims;
++	}
++	else{
++		xDelete<int>(mdims);
++	}
++	if(pndims){
++		*pndims=ndims;
++	}
++	else{
++		xDelete<int>(ndims);
++	}
+ 	*pnumrecords=num_instances;
+ }
+ /*}}}*/
+@@ -1447,20 +1452,19 @@
+ /*FUNCTION IoModel::SetFilePointersToData{{{*/
+ fpos_t* IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum){
+ 
+-	int  my_rank;
+-	int  found         = 0;
+-	int  record_enum;
+-	int  record_length;
+-	int  record_code;       //1 to 7 number
+-	int  vector_type;       //1 to 7 number
+-	int* vector_types   = NULL;
+-	int* codes= NULL;
+-	int  num_instances  = 0;
+-	int  counter;
+-	fpos_t* file_positions=NULL;
++	int     found          = 0;
++	int     record_enum;
++	int     record_length;
++	int     record_code;           //1 to 7 number
++	int     vector_type;           //1 to 7 number
++	int    *vector_types   = NULL;
++	int    *codes          = NULL;
++	int     num_instances  = 0;
++	int     counter;
++	fpos_t *file_positions = NULL;
+ 
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
++	int my_rank=IssmComm::GetRank();
+ 
+ 	/*Go find in the binary file, the data we want to fetch and count the number of 
+ 	 * instances it appears: */
+@@ -1488,10 +1492,9 @@
+ 		/*Ok, initialize the number of file handles we are going to return: */
+ 		if(num_instances){
+ 			file_positions = xNew<fpos_t>(num_instances);
+-			codes = xNew<int>(num_instances);
+-			vector_types = xNew<int>(num_instances);
++			codes          = xNew<int>(num_instances);
++			vector_types   = xNew<int>(num_instances);
+ 		}
+-
+ 	
+ 		/*Reset FILE* position to the beginning of the file, and start again, this time saving the data information 
+ 		 * as we find it: */
+@@ -1515,8 +1518,8 @@
+ 				if(5<=record_code && record_code<=7){
+ 					if(fread(&vector_type,sizeof(int),1,fid)!=1) _error_("Could not read vector_type");
+ 				}
+-				codes[counter]=record_code;
+-				vector_types[counter]=vector_type;
++				codes[counter]        = record_code;
++				vector_types[counter] = vector_type;
+ 				fgetpos(fid,file_positions+counter);
+ 				
+ 				/*backup and skip over the record, as we have more work to do: */
+@@ -1539,9 +1542,14 @@
+ 	ISSM_MPI_Bcast(&num_instances,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+-	*pcodes=codes;
+-	*pnum_instances=num_instances;
+-	if(pvector_types)*pvector_types=vector_types;
++	*pcodes         = codes;
++	*pnum_instances = num_instances;
++	if(pvector_types){
++		*pvector_types=vector_types;
++	}
++	else{
++		xDelete<int>(vector_types);
++	}
+ 	return file_positions;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/Massfluxatgate.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16498)
++++ ../trunk-jpl/src/c/classes/Massfluxatgate.h	(revision 16499)
+@@ -126,10 +126,9 @@
+ 		/*}}}*/
+ 		/*Definition virtual function resolutoin: */
+ 		/*FUNCTION char* Name() {{{*/
+-		char*  Name(){
+-			char* name2=NULL;
++		char* Name(){
+ 
+-			name2=xNew<char>(strlen(this->name)+1);
++			char* name2=xNew<char>(strlen(this->name)+1);
+ 			xMemCpy(name2,this->name,strlen(this->name)+1);
+ 
+ 			return name2;
Index: issm/oecreview/Archive/16133-16554/ISSM-16499-16500.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16499-16500.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16499-16500.diff	(revision 16556)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/m/contrib/paraview/exportVTK.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16499)
++++ ../trunk-jpl/src/m/contrib/paraview/exportVTK.m	(revision 16500)
+@@ -90,7 +90,11 @@
+ 		
+ 		%check which field is a real result and print
+ 			for k=1:num_of_fields
+-			if ((length(sol_struct{j}(step).(fieldnames{k})))==num_of_points);
++			if ((length(sol_struct{j}(step).(fieldnames{k})))== ...
++					num_of_points);
++				%paraview does not like NaN, replacing
++				pos=find(isnan(sol_struct{j}(step).(fieldnames{k})));
++				sol_struct{j}(step).(fieldnames{k})(pos)=-9999;
+ 				fprintf(FID,'SCALARS %s float 1 \n',fieldnames{k});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
+@@ -107,6 +111,9 @@
+ 		num_of_sols=length(solnames);
+ 		for k=1:num_of_sols
+ 			if ((length(res_struct.(solnames{k})))==num_of_points);
++				%paraview does not like NaN, replacing
++				pos=find(isnan(res_struct.(solnames{k})));
++				res_struct.(solnames{k})(pos)=-9999;
+ 				fprintf(FID,'SCALARS %s float 1 \n',solnames{k});
+ 				fprintf(FID,'LOOKUP_TABLE default\n');
+ 				s='%e\n';
Index: issm/oecreview/Archive/16133-16554/ISSM-16500-16501.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16500-16501.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16500-16501.diff	(revision 16556)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16500)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16501)
+@@ -1080,12 +1080,8 @@
+ /*FUNCTION IoModel::FetchMultipleData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
+ void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+-	int my_rank;
++	int  num_instances;
+ 
+-	int i;
+-	int num_instances;
+-	int* codes=NULL;
+-
+ 	/*output: */
+ 	int    numstrings = 0;
+ 	char **strings    = NULL;
+@@ -1093,11 +1089,12 @@
+ 	/*intermediary: */
+ 	char   *string         = NULL;
+ 	int     string_size;
++	int    *codes          = NULL;
+ 	int    *code           = NULL;
+ 	fpos_t *file_positions = NULL;
+ 
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
++	int my_rank=IssmComm::GetRank();
+ 
+ 	/*Get file pointers to beginning of the data (multiple instances of it): */
+ 	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+@@ -1105,7 +1102,7 @@
+ 	if(num_instances){
+ 		strings=xNew<char*>(num_instances);
+ 
+-		for(i=0;i<num_instances;i++){
++		for(int i=0;i<num_instances;i++){
+ 
+ 			if(my_rank==0){
+ 				/*check we are indeed finding a string, not something else: */
+@@ -1138,6 +1135,7 @@
+ 	}
+ 	/*Free ressources:*/
+ 	xDelete<int>(codes);
++	xDelete<fpos_t>(file_positions);
+ 	
+ 	/*Assign output pointers: */
+ 	*pstrings=strings;
+@@ -1147,8 +1145,7 @@
+ /*FUNCTION IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pM,int data_enum){{{*/
+ void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+ 
+-	int i;
+-	int num_instances;
++	int     num_instances;
+ 	fpos_t* file_positions=NULL;
+ 
+ 	/*output: */
+@@ -1230,6 +1227,7 @@
+ 	}
+ 			
+ 	/*Free ressources:*/
++	xDelete<fpos_t>(file_positions);
+ 	xDelete<int>(codes);
+ 
+ 	/*Assign output pointers: */
Index: issm/oecreview/Archive/16133-16554/ISSM-16501-16502.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16501-16502.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16501-16502.diff	(revision 16556)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16501)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16502)
+@@ -91,17 +91,27 @@
+ /*FUNCTION IoModel::~IoModel(){{{*/
+ IoModel::~IoModel(){
+ 
+-	/*Some checks in debugging mode*/
+-	if(this->data){
++	/*Delete independents*/
++	if(this->independents){
+ 		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
+-			if(this->data[i]){
+-				/*Release data pertaining to Autodiff runs: */
++			if(this->independents[i]){
+ 				IssmDouble* array=this->data[i];
+ 				xDelete<IssmDouble>(array);
+ 			}
+ 		}
+ 	}
+ 
++	/*checks in debugging mode*/
++	#ifdef _ISSM_DEBUG_
++	if(this->data){
++		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
++			if(this->data[i]){
++				printf0_("WARNING: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
++			}
++		}
++	}
++	#endif
++
+ 	if(this->constants) delete this->constants;
+ 
+ 	xDelete<IssmDouble*>(this->data);
+@@ -819,14 +829,14 @@
+ 		ISSM_MPI_Bcast(matrix,M*N,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+ 
+ 		_assert_(this->independents);
+-		if (this->independents[data_enum]){
++		if(this->independents[data_enum]){
+ 			/*this data has already been checked out! So cancel all that we've done here, and return 
+ 			 * the data[data_enum] directly: */
+ 			*pmatrix=this->data[data_enum];
+ 		}
+ 		else{
+ 			*pmatrix=xNew<IssmDouble>(M*N);
+-			for (int i=0;i<M*N;++i) (*pmatrix)[i]=matrix[i];
++			for(int i=0;i<M*N;++i) (*pmatrix)[i]=matrix[i];
+ 		}
+ 		xDelete<IssmPDouble>(matrix);
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16502-16503.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16502-16503.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16502-16503.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16502)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16503)
+@@ -106,7 +106,7 @@
+ 	if(this->data){
+ 		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
+ 			if(this->data[i]){
+-				printf0_("WARNING: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
++				_printf0_("WARNING: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
+ 			}
+ 		}
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16503-16504.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16503-16504.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16503-16504.diff	(revision 16556)
@@ -0,0 +1,153 @@
+Index: ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16503)
++++ ../trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16504)
+@@ -117,7 +117,7 @@
+ 		} /*}}}*/
+ 
+ 		/*GenericExternalResult management: */
+-void WriteData(FILE* fid,bool io_gather){ /*{{{*/
++void  WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+ 	int     my_rank;
+ 	int     type;
+@@ -149,9 +149,14 @@
+ 		xMemCpy<char>(name,this->result_name,strlen(this->result_name)+1);
+ 		return name;
+ } /*}}}*/
+-int GetStep(void){ /*{{{*/
++int   GetStep(void){ /*{{{*/
+ 	return this->step;
+ } /*}}}*/
++IssmPDouble GetValue(void){ /*{{{*/
++	/*Only supported by IssmPDouble result, error out by default*/
++	_error_("not supported for this type of result");
++	return 0.;
++} /*}}}*/
+ };
+ 
+ /*Specific instantiations for bool: */
+@@ -189,6 +194,9 @@
+ template <> inline int GenericExternalResult<double>::ObjectEnum(void){ /*{{{*/
+ 	return DoubleExternalResultEnum;
+ } /*}}}*/
++template <> inline double GenericExternalResult<double>::GetValue(void){ /*{{{*/
++	return value;
++} /*}}}*/
+ 
+ /*Specific instantiations for char*: */
+ template <> inline GenericExternalResult<char*>::GenericExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmDouble in_time){ /*{{{*/
+Index: ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16503)
++++ ../trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16504)
+@@ -22,11 +22,10 @@
+ 
+ 	public: 
+ 
+-		virtual        ~ExternalResult(){};
+-		/*Virtual functions:{{{*/
+-		virtual void  WriteData(FILE* fid,bool io_gather)=0;
+-		virtual char* GetResultName(void)=0;
+-		virtual int   GetStep(void)=0;
+-		/*}}}*/
++		virtual         ~ExternalResult(){};
++		virtual void   WriteData(FILE* fid,bool io_gather)=0;
++		virtual char*  GetResultName(void)=0;
++		virtual int    GetStep(void)=0;
++		virtual double GetValue(void)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16503)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16504)
+@@ -590,6 +590,23 @@
+ 	*presults = results;
+ }
+ /*}}}*/
++void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
++
++	/*Convert list of enums to list of string*/
++	char** enumlist = xNew<char*>(numoutputs);
++	for(int i=0;i<numoutputs;i++){
++		EnumToStringx(&enumlist[i],requested_outputs[i]);
++	}
++
++	/*Call main module*/
++	this->RequestedOutputsx(presults,enumlist,numoutputs);
++
++	/*clean up and return*/
++	for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
++	xDelete<char*>(enumlist);
++	return;
++}
++/*}}}*/
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 	bool        isautodiff      = false;
+@@ -1133,27 +1150,30 @@
+ void FemModel::CostFunctionx(IssmDouble* pJ){/*{{{*/
+ 
+ 	/*Intermediary*/
+-	int num_responses;
+-	int *responses = NULL;
++	int      num_responses;
++	int     *responses      = NULL;
++	Results *cost_functions = NULL;
+ 
+-	/*output: */
+-	IssmDouble J,Jplus;
+-
+ 	/*Recover parameters*/
+ 	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	parameters->FindParam(&responses,NULL,InversionCostFunctionsEnum);
+ 
+-	/*Get response*/
+-	J=0;
+-	//_printf_(true,"list of misfits: ");
++	/*Get the value of all cost functions*/
++	this->RequestedOutputsx(&cost_functions,responses,num_responses);
++
++	/*Add all contributions one by one*/
++	IssmDouble J=0;
++	//_printf0_("list of misfits: ");
+ 	for(int i=0;i<num_responses;i++){
+-		this->Responsex(&Jplus,EnumToStringx(responses[i]));
+-		//_printf_(true," %12.7g ",Jplus);
+-		J+=Jplus;
++		ExternalResult* result=(ExternalResult*)cost_functions->GetObjectByOffset(i);
++		J += reCast<IssmDouble>(result->GetValue());
++		//_printf0_(J<<" ");
+ 	}
+-	//_printf_(true," \n");
++	//_printf0_(" \n");
++	_assert_(cost_functions->Size()==num_responses);
+ 
+ 	/*Assign output pointers: */
++	delete cost_functions;
+ 	xDelete<int>(responses);
+ 	*pJ=J;
+ }
+@@ -1202,6 +1222,9 @@
+ 		results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,control_enum,vector_control ,step,time));
+ 		results->AddResult(new GenericExternalResult<Vector<IssmPDouble>*>(results->Size()+1,gradient_enum,vector_gradient,step,time));
+ 	}
++
++	/*Clean up and return*/
++	xDelete<int>(control_type);
+ }
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 16503)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 16504)
+@@ -82,6 +82,7 @@
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+ 		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
++		void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor);
Index: issm/oecreview/Archive/16133-16554/ISSM-16504-16505.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16504-16505.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16504-16505.diff	(revision 16556)
@@ -0,0 +1,196 @@
+Index: ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16505)
+@@ -30,13 +30,13 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("saving results:\n");
+ 		if(meshtype!=Mesh2DverticalEnum){
+-			const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++			int outputs[2] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 
+ 		}
+ 		else{
+-			const char* outputs [] = {"SurfaceSlopeX"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++			int outputs = SurfaceSlopeXEnum;
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16505)
+@@ -49,8 +49,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const char* outputs [] = {"GiaW","GiadWdt"};
+-		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++		const int outputs[2] = {GiaWEnum,GiadWdtEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16505)
+@@ -25,8 +25,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const char* outputs [] = {"Thickness"};
+-		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++		int outputs = ThicknessEnum;
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16505)
+@@ -144,7 +144,7 @@
+ 			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
+ 			#endif
+ 			if(save_results){
+-				const char* outputs [] = {"Surface","Bed","MaskGroundediceLevelset"};
++				const int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
+ 			}
+ 		}
+@@ -163,11 +163,11 @@
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+ 			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 			if(isdelta18o){
+-				const char* outputs [] = {"SurfaceforcingsMonthlytemperatures","SurfaceforcingsPrecipitation"};
++				const int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				const char* outputs [] = {"MaskGroundediceLevelset"};
++				const int outputs[1] = {MaskGroundediceLevelsetEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
+ 			}
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16505)
+@@ -33,7 +33,7 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const char* outputs [] = {"DamageD"};
+-		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++		int outputs = DamageDEnum;
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16505)
+@@ -67,8 +67,8 @@
+ 
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+-				const char* outputs [] = {"Watercolumn","HydrologyWaterVx","HydrologyWaterVy"};
+-				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
++				int outputs[3] = {WatercolumnEnum,HydrologyWaterVxEnum,HydrologyWaterVyEnum};
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+@@ -88,12 +88,12 @@
+ 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+ 				if(VerboseSolution()) _printf0_("   saving results \n");
+ 				if(isefficientlayer){
+-					const char* outputs [] = {"SedimentHead","SedimentHeadResidual","EplHead","HydrologydcMaskEplactive"};
+-					femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],4);
++					int outputs[4] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum};
++					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
+ 				}
+ 				else{
+-					const char* outputs [] = {"SedimentHead","SedimentHeadResidual"};
+-					femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++					int outputs[2] = {SedimentHeadEnum,SedimentHeadResidualEnum};
++					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 				}
+ 				/*unload results*/
+ 				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16505)
+@@ -32,12 +32,12 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		if(meshtype!=Mesh2DverticalEnum){
+-			const char* outputs [] = {"BedSlopeX","BedSlopeY"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++			int outputs[2] = {BedSlopeXEnum,BedSlopeYEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 		}
+ 		else{
+-			const char* outputs [] = {"BedSlopeX"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++			int outputs[1] = {BedSlopeXEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16505)
+@@ -37,12 +37,12 @@
+ 	if(save_results || true){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+ 		if (isFS){
+-			const char* outputs [] = {"Adjointx","Adjointy","Adjointz","Adjointp"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],4);
++			int outputs[4] = {AdjointxEnum,AdjointyEnum,AdjointzEnum,AdjointpEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
+ 		}
+ 		else{
+-			const char* outputs [] = {"Adjointx","Adjointy"};
+-			femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++			int outputs[2] = {AdjointxEnum,AdjointyEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16505)
+@@ -30,8 +30,8 @@
+ 
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const char* outputs [] = {"SurfaceSlopeX","SurfaceSlopeY","Vel"};
+-		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
++		int outputs[3] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum,VelEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 	}
+ 
+ }
+Index: ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16504)
++++ ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16505)
+@@ -33,7 +33,7 @@
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const char* outputs [] = {"Adjoint"};
+-		femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++		int outputs[1] = {AdjointEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+ 	}
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16505-16506.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16505-16506.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16505-16506.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 16505)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 16506)
+@@ -122,7 +122,7 @@
+ 	1e-09,1e-09,1e-09,...
+ 	1e-10,1e-10,1e-09,...
+ 	1e-09,1e-09,1e-09,...
+-	1e-09,1e-08,1e-09,...
++	1e-09,1e-08,1e-08,...
+ 	1e-08,1e-08,1e-08,...
+ 	1e-08,1e-07,1e-08,...
+ };
Index: issm/oecreview/Archive/16133-16554/ISSM-16506-16507.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16506-16507.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16506-16507.diff	(revision 16556)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16506)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16507)
+@@ -145,7 +145,7 @@
+ 			#endif
+ 			if(save_results){
+ 				const int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],3);
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 			}
+ 		}
+ 		if(isgia){
+@@ -164,11 +164,11 @@
+ 			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 			if(isdelta18o){
+ 				const int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],2);
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+ 				const int outputs[1] = {MaskGroundediceLevelsetEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,(char**)&outputs[0],1);
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+ 			}
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+ 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
Index: issm/oecreview/Archive/16133-16554/ISSM-16507-16508.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16507-16508.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16507-16508.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 16507)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 16508)
+@@ -65,8 +65,8 @@
+ 	1e-12,2e-12,2e-12,...
+ 	1e-12,1e-12,1e-12,...
+ 	1e-12,2e-12,2e-12,...
+-	1e-12,2e-12,2e-12,...
+-	1e-12,2e-11,2e-12,...
++	1e-11,2e-12,2e-12,...
++	1e-11,2e-11,2e-12,...
+ };
+ field_values={};
+ for i=1:6,
Index: issm/oecreview/Archive/16133-16554/ISSM-16508-16509.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16508-16509.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16508-16509.diff	(revision 16556)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16508)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16509)
+@@ -144,7 +144,7 @@
+ 			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
+ 			#endif
+ 			if(save_results){
+-				const int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
++				int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+ 			}
+ 		}
+@@ -163,11 +163,11 @@
+ 			if(VerboseSolution()) _printf0_("   saving transient results\n");
+ 			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+ 			if(isdelta18o){
+-				const int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
++				int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+ 			}
+ 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				const int outputs[1] = {MaskGroundediceLevelsetEnum};
++				int outputs[1] = {MaskGroundediceLevelsetEnum};
+ 				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+ 			}
+ 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
Index: issm/oecreview/Archive/16133-16554/ISSM-16509-16510.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16509-16510.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16509-16510.diff	(revision 16556)
@@ -0,0 +1,118 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16509)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16510)
+@@ -289,7 +289,6 @@
+ 	AdjointBalancethicknessAnalysisEnum,
+ 	AdjointHorizAnalysisEnum,
+ 	AnalysisCounterEnum,
+-	NoneAnalysisEnum,
+ 	DefaultAnalysisEnum,
+ 	BalancethicknessAnalysisEnum,
+ 	BalancethicknessSolutionEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16509)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16510)
+@@ -295,7 +295,6 @@
+ 		case AdjointBalancethicknessAnalysisEnum : return "AdjointBalancethicknessAnalysis";
+ 		case AdjointHorizAnalysisEnum : return "AdjointHorizAnalysis";
+ 		case AnalysisCounterEnum : return "AnalysisCounter";
+-		case NoneAnalysisEnum : return "NoneAnalysis";
+ 		case DefaultAnalysisEnum : return "DefaultAnalysis";
+ 		case BalancethicknessAnalysisEnum : return "BalancethicknessAnalysis";
+ 		case BalancethicknessSolutionEnum : return "BalancethicknessSolution";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16509)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16510)
+@@ -301,7 +301,6 @@
+ 	      else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
+ 	      else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
+-	      else if (strcmp(name,"NoneAnalysis")==0) return NoneAnalysisEnum;
+ 	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
+ 	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
+@@ -382,11 +381,11 @@
+ 	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
++	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
+-	      else if (strcmp(name,"Input")==0) return InputEnum;
++	      if (strcmp(name,"Input")==0) return InputEnum;
+ 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+ 	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
+ 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+@@ -505,11 +504,11 @@
+ 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
++	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
+-	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
++	      if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+ 	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+ 	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+ 	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 16509)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 16510)
+@@ -29,7 +29,7 @@
+ 	 _error_("Grounding line migration "<<EnumToStringx(migration_style) << " not supported yet!");
+ 
+ 	/*Set toolkit to default*/
+-	ToolkitsOptionsFromAnalysis(parameters,NoneAnalysisEnum);
++	ToolkitsOptionsFromAnalysis(parameters,DefaultAnalysisEnum);
+ 
+ 	if(migration_style==SoftMigrationEnum){
+ 		/*Create flag for grounded vertices above the hydrostatic equilibrium: */
+Index: ../trunk-jpl/src/c/classes/Params/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 16509)
++++ ../trunk-jpl/src/c/classes/Params/Parameters.cpp	(revision 16510)
+@@ -523,7 +523,7 @@
+ 		}
+ 	}
+ 	if(found==-1){
+-		/*still haven't found a list of petsc options, go find the default one, for analysis type NoneAnalysisEnum: */
++		/*still haven't found a list of petsc options, go find the default one, for analysis type DefaultAnalysisEnum: */
+ 		for(i=0;i<numanalyses;i++){
+ 			if(analyses[i]==DefaultAnalysisEnum){
+ 				found=i;
+Index: ../trunk-jpl/src/m/enum/NoneAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/NoneAnalysisEnum.m	(revision 16509)
++++ ../trunk-jpl/src/m/enum/NoneAnalysisEnum.m	(revision 16510)
+@@ -1,11 +0,0 @@
+-function macro=NoneAnalysisEnum()
+-%NONEANALYSISENUM - Enum of NoneAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=NoneAnalysisEnum()
+-
+-macro=StringToEnum('NoneAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16509)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16510)
+@@ -287,7 +287,6 @@
+ def AdjointBalancethicknessAnalysisEnum(): return StringToEnum("AdjointBalancethicknessAnalysis")[0]
+ def AdjointHorizAnalysisEnum(): return StringToEnum("AdjointHorizAnalysis")[0]
+ def AnalysisCounterEnum(): return StringToEnum("AnalysisCounter")[0]
+-def NoneAnalysisEnum(): return StringToEnum("NoneAnalysis")[0]
+ def DefaultAnalysisEnum(): return StringToEnum("DefaultAnalysis")[0]
+ def BalancethicknessAnalysisEnum(): return StringToEnum("BalancethicknessAnalysis")[0]
+ def BalancethicknessSolutionEnum(): return StringToEnum("BalancethicknessSolution")[0]
Index: issm/oecreview/Archive/16133-16554/ISSM-16510-16511.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16510-16511.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16510-16511.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive1105.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16511-16512.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16511-16512.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16511-16512.diff	(revision 16556)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/test/NightlyRun/test1301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.m	(revision 16511)
++++ ../trunk-jpl/test/NightlyRun/test1301.m	(revision 16512)
+@@ -42,5 +42,5 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'BasalMelting'};
+-field_tolerances={1e-08};
++field_tolerances={1e-07};
+ field_values    ={comp_melting};
Index: issm/oecreview/Archive/16133-16554/ISSM-16512-16513.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16512-16513.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16512-16513.diff	(revision 16556)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16512)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 16513)
+@@ -133,11 +133,10 @@
+ /*FUNCTION IoModel::CheckEnumSync{{{*/
+ void  IoModel::CheckEnumSync(void){
+ 
+-	int my_rank;
+-	int record_enum = 0;
++	int record_enum,record_length;
+ 
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
++	int my_rank=IssmComm::GetRank();
+ 
+ 	/*Check that some fields have been allocated*/
+ 	_assert_(this->fid || my_rank);
+@@ -171,6 +170,49 @@
+ 				_error_("Enums not consistent (See error message above)");
+ 			}
+ 		}
++
++		/*Get last enum*/
++		bool found     = false;
++		int  last_enum = 0;
++
++		/*First set FILE* position to the beginning of the file: */
++		fseek(fid,0,SEEK_SET);
++		for(;;){
++			/*Have we reached the end of file ?*/
++			if(fread(&record_enum,sizeof(int),1,fid)==0){
++				break;
++			}
++
++			/*Have we found the last Enum ?*/
++			if(record_enum==MaximumNumberOfDefinitionsEnum+1){
++				found = true;
++				break;
++			}
++
++			/*Check that record_enum is an enum*/
++			if(record_enum>=0 && record_enum<=MaximumNumberOfDefinitionsEnum){
++				if(record_enum>0) last_enum = record_enum;
++			}
++
++			/*Go to next Enum*/
++			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
++			fseek(fid,record_length,SEEK_CUR);
++		}
++		if(!found){
++			_printf0_("\n");
++			_printf0_("=========================================================================\n");
++			_printf0_(" Marshalled file is corrupted                                            \n");
++			_printf0_("                                                                         \n");
++			_printf0_("   * If you are running an old model, send it to the ISSM developers     \n");
++			_printf0_("     so that a check is added before marshall                            \n");
++			_printf0_("   * Last Enum found: " << EnumToStringx(last_enum)<<"Enum ("<<last_enum<<")\n");
++			_printf0_("     the corresponding model field has probably been marshalled          \n");
++			_printf0_("     incorrectly                                                         \n");
++			_printf0_("                                                                         \n");
++			_printf0_("=========================================================================\n");
++			_printf0_("\n");
++			_error_("Binary file corrupted (See error message above)");
++		}
+ 	}
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16513-16514.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16513-16514.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16513-16514.diff	(revision 16556)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/solve/marshall.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.py	(revision 16513)
++++ ../trunk-jpl/src/m/solve/marshall.py	(revision 16514)
+@@ -41,6 +41,9 @@
+ 		#print "marshalling %s ..." % field
+ 		exec("md.%s.marshall(md,fid)" % field)
+ 
++	#Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
++	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',True,'format','Boolean');
++
+ 	#close file
+ 	try:
+ 		fid.close()
+Index: ../trunk-jpl/src/m/solve/marshall.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.m	(revision 16513)
++++ ../trunk-jpl/src/m/solve/marshall.m	(revision 16514)
+@@ -38,6 +38,9 @@
+ 	marshall(md.(field),md,fid);
+ end
+ 
++%Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
++WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',true,'format','Boolean');
++
+ %close file
+ st=fclose(fid);
+ if st==-1,
Index: issm/oecreview/Archive/16133-16554/ISSM-16514-16515.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16514-16515.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16514-16515.diff	(revision 16556)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/contrib/gslib/pkriging.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 16514)
++++ ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 16515)
+@@ -25,6 +25,11 @@
+ WriteData(fid,'enum',2,'data',observations,'format','DoubleMat');
+ WriteData(fid,'enum',3,'data',x_interp,'format','DoubleMat');
+ WriteData(fid,'enum',4,'data',y_interp,'format','DoubleMat');
++
++%Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
++WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',true,'format','Boolean');
++
++%Now, write number of options
+ options.marshall(fid,5);
+ st=fclose(fid);
+ if st==-1,
Index: issm/oecreview/Archive/16133-16554/ISSM-16515-16516.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16515-16516.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16515-16516.diff	(revision 16556)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh	(revision 16516)
+@@ -0,0 +1,55 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install petsc-3.4.2 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
++
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --PETSC_ARCH="$ISSM_ARCH" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-batch=1  \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --with-mpi-dir=/sopt/mpi/openmpi-1.5.4_psm/intel/ \
++ --with-blas-lapack-dir=/opt/intel/mkl/10.2.4.032/ \
++ --download-scalapack=yes \
++ --download-blacs=yes \
++ --download-mumps=yes \
++ --download-metis=yes \
++ --download-parmetis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-hypre=yes \
++ --COPTFLAGS="-lmpi -O3" \
++ --FOPTFLAGS="-lmpi -O3" \
++ --CXXOPTFLAGS="-lmpi -O3"
++
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
++#PBS -S /bin/bash
++#PBS -l nodes=1:ppn=1
++#PBS -q c6145
++#PBS -l walltime=10
++
++cd $(echo $ISSM_DIR)/externalpackages/petsc/src/
++mpiexec -np 1 ./conftest-arch-linux2-c-opt
++EOF
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16516-16517.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16516-16517.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16516-16517.diff	(revision 16556)
@@ -0,0 +1,222 @@
+Index: ../trunk-jpl/src/m/exp/expcontourlevelzero.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcontourlevelzero.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/expcontourlevelzero.m	(revision 16517)
+@@ -0,0 +1,13 @@
++function expcontourlevelzero(md,mask,level,filename)
++%EXPCONTOURLEVELZERO - write an Argus file from a structure recovered from running contourlevelzero 
++%
++%   Usage:
++%      expcontourlevelzero(md,mask,level,filename)
++% 
++%   Example:
++%      expcontourlevelzero(md,md.geometry.thickness,0, 'Level0.exp');
++%
++%   See also CONTOURLEVELZERO, EXPWRITE
++
++contours=contourlevelzero(md,mask,level);
++expwrite(contours,filename);
+Index: ../trunk-jpl/src/m/exp/contourlevelzero.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/contourlevelzero.m	(revision 0)
++++ ../trunk-jpl/src/m/exp/contourlevelzero.m	(revision 16517)
+@@ -0,0 +1,199 @@
++function contours=contourlevelzero(md,mask,level)
++%CONTOURLEVELZERO - figure out the zero level (or offset thereof, specified by the level value) 
++%                   of a vectorial mask, and vectorialize it into an exp or shp compatible 
++%structure.
++%
++%   Usage:
++%      contours=contourlevelzero(md,mask,level)
++%
++%   See also: PLOT_CONTOUR
++
++%process data 
++if md.mesh.dimension==3,
++	error('contourlevelzero error message: routine not supported for 3d meshes, project on a layer');
++end
++
++x=md.mesh.x;
++y=md.mesh.y;
++index=md.mesh.elements;
++
++if isempty(mask), error('mask provided is empty'); end
++	if length(mask)~=md.mesh.numberofvertices, error('mask provided should be specified at the vertices of the mesh'); end
++
++%initialization of some variables
++numberofelements=size(index,1);
++elementslist=1:numberofelements;
++c=[];
++h=[];
++
++%get unique edges in mesh
++%1: list of edges
++edges=[index(:,[1,2]); index(:,[2,3]); index(:,[3,1])];
++%2: find unique edges
++[edges,I,J]=unique(sort(edges,2),'rows');
++%3: unique edge numbers
++vec=J;
++%4: unique edges numbers in each triangle (2 triangles sharing the same edge will have
++%   the same edge number)
++edges_tria=[vec(elementslist), vec(elementslist+numberofelements), vec(elementslist+2*numberofelements)];
++
++%segments [nodes1 nodes2]
++Seg1=index(:,[1 2]);
++Seg2=index(:,[2 3]);
++Seg3=index(:,[3 1]);
++
++%segment numbers [1;4;6;...]
++Seg1_num=edges_tria(:,1);
++Seg2_num=edges_tria(:,2);
++Seg3_num=edges_tria(:,3);
++
++%value of data on each tips of the segments
++Data1=mask(Seg1);
++Data2=mask(Seg2);
++Data3=mask(Seg3);
++
++%get the ranges for each segment
++Range1=sort(Data1,2);
++Range2=sort(Data2,2);
++Range3=sort(Data3,2);
++
++%find the segments that contain this value
++pos1=(Range1(:,1)<level & Range1(:,2)>level);
++pos2=(Range2(:,1)<level & Range2(:,2)>level);
++pos3=(Range3(:,1)<level & Range3(:,2)>level);
++
++%get elements
++poselem12=(pos1 & pos2);
++poselem13=(pos1 & pos3);
++poselem23=(pos2 & pos3);
++poselem=find(poselem12 | poselem13 | poselem23);
++numelems=length(poselem);
++
++%if no element has been flagged, skip to the next level
++if numelems==0,
++	warning('contourlevelzero warning message: no elements found with corresponding level value in mask');
++	contours=struct([]);
++	return;
++end
++
++%go through the elements and build the coordinates for each segment (1 by element)
++x1=zeros(numelems,1);
++x2=zeros(numelems,1);
++y1=zeros(numelems,1);
++y2=zeros(numelems,1);
++edge_l=zeros(numelems,2);
++
++for j=1:numelems,
++
++	weight1=(level-Data1(poselem(j),1))/(Data1(poselem(j),2)-Data1(poselem(j),1));
++	weight2=(level-Data2(poselem(j),1))/(Data2(poselem(j),2)-Data2(poselem(j),1));
++	weight3=(level-Data3(poselem(j),1))/(Data3(poselem(j),2)-Data3(poselem(j),1));
++
++	if poselem12(poselem(j));
++
++		x1(j)=x(Seg1(poselem(j),1))+weight1*(x(Seg1(poselem(j),2))-x(Seg1(poselem(j),1)));
++		x2(j)=x(Seg2(poselem(j),1))+weight2*(x(Seg2(poselem(j),2))-x(Seg2(poselem(j),1)));
++		y1(j)=y(Seg1(poselem(j),1))+weight1*(y(Seg1(poselem(j),2))-y(Seg1(poselem(j),1)));
++		y2(j)=y(Seg2(poselem(j),1))+weight2*(y(Seg2(poselem(j),2))-y(Seg2(poselem(j),1)));
++		edge_l(j,1)=Seg1_num(poselem(j));
++		edge_l(j,2)=Seg2_num(poselem(j));
++
++	elseif poselem13(poselem(j)),
++
++		x1(j)=x(Seg1(poselem(j),1))+weight1*(x(Seg1(poselem(j),2))-x(Seg1(poselem(j),1)));
++		x2(j)=x(Seg3(poselem(j),1))+weight3*(x(Seg3(poselem(j),2))-x(Seg3(poselem(j),1)));
++		y1(j)=y(Seg1(poselem(j),1))+weight1*(y(Seg1(poselem(j),2))-y(Seg1(poselem(j),1)));
++		y2(j)=y(Seg3(poselem(j),1))+weight3*(y(Seg3(poselem(j),2))-y(Seg3(poselem(j),1)));
++		edge_l(j,1)=Seg1_num(poselem(j));
++		edge_l(j,2)=Seg3_num(poselem(j));
++
++	elseif poselem23(poselem(j)),
++
++		x1(j)=x(Seg2(poselem(j),1))+weight2*(x(Seg2(poselem(j),2))-x(Seg2(poselem(j),1)));
++		x2(j)=x(Seg3(poselem(j),1))+weight3*(x(Seg3(poselem(j),2))-x(Seg3(poselem(j),1)));
++		y1(j)=y(Seg2(poselem(j),1))+weight2*(y(Seg2(poselem(j),2))-y(Seg2(poselem(j),1)));
++		y2(j)=y(Seg3(poselem(j),1))+weight3*(y(Seg3(poselem(j),2))-y(Seg3(poselem(j),1)));
++		edge_l(j,1)=Seg2_num(poselem(j));
++		edge_l(j,2)=Seg3_num(poselem(j));
++	else
++		%it shoud not go here
++	end
++end
++
++%now that we have the segments, we must try to connect them...
++
++%loop over the subcontours
++contours=struct([]);
++
++while ~isempty(edge_l),
++
++	%take the right edge of the second segment and connect it to the next segments if any
++	e1=edge_l(1,1);   e2=edge_l(1,2);
++	xc=[x1(1);x2(1)]; yc=[y1(1);y2(1)];
++
++	%erase the lines corresponding to this edge
++	edge_l(1,:)=[];
++	x1(1)=[]; x2(1)=[];
++	y1(1)=[]; y2(1)=[];
++
++	[ro1,co1]=find(edge_l==e1);
++
++	while ~isempty(ro1)
++
++		if co1==1,
++			xc=[x2(ro1);xc]; yc=[y2(ro1);yc];
++
++			%next edge:
++			e1=edge_l(ro1,2);
++
++		else
++			xc=[x1(ro1);xc]; yc=[y1(ro1);yc];
++
++			%next edge:
++			e1=edge_l(ro1,1);
++		end
++
++		%erase the lines of this
++		edge_l(ro1,:)=[];
++		x1(ro1)=[]; x2(ro1)=[];
++		y1(ro1)=[]; y2(ro1)=[];
++
++		%next connection
++		[ro1,co1]=find(edge_l==e1);
++	end
++
++	%same thing the other way (to the right)
++	[ro2,co2]=find(edge_l==e2);
++
++	while ~isempty(ro2)
++
++		if co2==1,
++			xc=[xc;x2(ro2)]; yc=[yc;y2(ro2)];
++
++			%next edge:
++			e2=edge_l(ro2,2);
++		else
++			xc=[xc;x1(ro2)]; yc=[yc;y1(ro2)];
++
++			%next edge:
++			e2=edge_l(ro2,1);
++		end
++
++		%erase the lines of this
++		edge_l(ro2,:)=[];
++		x1(ro2)=[]; x2(ro2)=[];
++		y1(ro2)=[]; y2(ro2)=[];
++
++		%next connection
++		[ro2,co2]=find(edge_l==e2);
++	end
++
++	%save xc,yc contour: 
++	contours(end+1).x=xc;
++	contours(end).y=yc;
++	contours(end).name='';
++	contours(end).nods=length(xc);
++	contours(end).density=1;
++	contours(end).closed=0;
++
++end
Index: issm/oecreview/Archive/16133-16554/ISSM-16517-16518.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16517-16518.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16517-16518.diff	(revision 16556)
@@ -0,0 +1,6437 @@
+Index: ../trunk-jpl/src/c/analyses/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 16518)
+@@ -1,130 +0,0 @@
+-/*!\file: steadystate_core.cpp
+- * \brief: core of the steadystate solution 
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-/*Local prototypes*/
+-bool steadystateconvergence(Vector<IssmDouble>* tg,Vector<IssmDouble>* tg_old,Vector<IssmDouble>* ug,Vector<IssmDouble>* ug_old,IssmDouble reltol);
+-
+-void steadystate_core(FemModel* femmodel){
+-
+-	/*intermediary: */
+-	int i;
+-	int step; 
+-	Vector<IssmDouble>* ug     = NULL;
+-	Vector<IssmDouble>* ug_old = NULL;
+-	Vector<IssmDouble>* tg     = NULL;
+-	Vector<IssmDouble>* tg_old = NULL;
+-
+-	/*parameters: */
+-	bool        save_results,isenthalpy;
+-	int         maxiter;
+-	IssmDouble  reltol;
+-	int         numoutputs        = 0;
+-	char** requested_outputs = NULL;
+-
+-	/* recover parameters:*/
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum);
+-	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+-	femmodel->parameters->FindParam(&reltol,SteadystateReltolEnum);
+-	femmodel->parameters->SetParam(false,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&numoutputs,SteadystateNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,SteadystateRequestedOutputsEnum);
+-
+-	/*intialize counters: */
+-	step=1;
+-
+-	for(;;){
+-
+-		if(VerboseSolution()) _printf0_("   computing temperature and velocity for step: " << step << "\n");
+-		#ifdef _HAVE_THERMAL_
+-		thermal_core(femmodel);
+-		if(!isenthalpy)femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);/*Could be MeltingAnalysis...*/
+-		GetSolutionFromInputsx(&tg,femmodel);
+-		#else
+-		_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-		#endif
+-
+-		if(VerboseSolution()) _printf0_("   computing new velocity\n");
+-		stressbalance_core(femmodel);
+-		GetSolutionFromInputsx(&ug,femmodel);
+-
+-		if(step>1){
+-			if(VerboseSolution()) _printf0_("   checking steadystate convergence\n");
+-			if(steadystateconvergence(tg,tg_old,ug,ug_old,reltol)) break;
+-		}
+-		if(step>maxiter){
+-			if(VerboseSolution()) _printf0_("   maximum number steadystate iterations " << maxiter << " reached\n");
+-			break;
+-		}
+-
+-		/*update results and increase counter*/
+-		delete tg_old;tg_old=tg;
+-		delete ug_old;ug_old=ug;
+-		step++;
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-	}
+-
+-	/*Free ressources:*/
+-	delete tg_old;
+-	delete ug_old;
+-	delete tg;
+-	delete ug;	
+-	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+-}
+-bool steadystateconvergence(Vector<IssmDouble>* tg,Vector<IssmDouble>* tg_old,Vector<IssmDouble>* ug,Vector<IssmDouble>* ug_old,IssmDouble reltol){
+-
+-	/*Output*/
+-	bool converged = true;
+-
+-	/*Intermediary*/
+-	Vector<IssmDouble>* dug    = NULL;
+-	Vector<IssmDouble>* dtg    = NULL;
+-	IssmDouble          ndt,nt;
+-	IssmDouble          ndu,nu;
+-
+-	/*compute norm(du)/norm(u)*/
+-	dug=ug_old->Duplicate(); ug_old->Copy(dug); dug->AYPX(ug,-1.0);
+-	ndu=dug->Norm(NORM_TWO); nu=ug_old->Norm(NORM_TWO);
+-	if (xIsNan<IssmDouble>(ndu) || xIsNan<IssmDouble>(nu)) _error_("convergence criterion is NaN!");
+-	if((ndu/nu)<reltol){
+-		if(VerboseConvergence()) _printf0_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" < "<<reltol*100<<" %\n");
+-	}
+-	else{ 
+-		if(VerboseConvergence()) _printf0_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" > "<<reltol*100<<" %\n");
+-		converged=false;
+-	}
+-
+-	/*compute norm(dt)/norm(t)*/
+-	dtg=tg_old->Duplicate(); tg_old->Copy(dtg); dtg->AYPX(tg,-1.0);
+-	ndt=dtg->Norm(NORM_TWO); nt=tg_old->Norm(NORM_TWO);
+-	if (xIsNan<IssmDouble>(ndt) || xIsNan<IssmDouble>(nt)) _error_("convergence criterion is NaN!");
+-	if((ndt/nt)<reltol){
+-		if(VerboseConvergence()) _printf0_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" < "<<reltol*100<<" %\n");
+-	}
+-	else{ 
+-		if(VerboseConvergence()) _printf0_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" > "<<reltol*100<<" %\n");
+-		converged=false;
+-	}
+-
+-	/*clean up and return*/
+-	delete dtg;
+-	delete dug;
+-	return converged;
+-}
+Index: ../trunk-jpl/src/c/analyses/ProcessArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ProcessArguments.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/ProcessArguments.cpp	(revision 16518)
+@@ -1,57 +0,0 @@
+-/*!\file:  ProcessArguments.cpp
+- * \brief: process arguments
+- */ 
+-
+-#include <stdio.h>
+-#include <cstring>
+-
+-#include "../shared/shared.h"
+-
+-void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ptoolkitsfilename,char** plockfilename,char** prootpath, int argc,char **argv){
+-
+-	char *modelname      = NULL;
+-	char *binfilename    = NULL;
+-	char *outbinfilename = NULL;
+-	char *toolkitsfilename  = NULL;
+-	char *lockfilename   = NULL;
+-	char *rootpath       = NULL;
+-	char *rootpatharg    = NULL;
+-
+-	/*Check input arguments*/
+-	if(argc<2)_error_("Usage error: no solution requested");
+-	if(argc<3)_error_("Usage error: missing execution directory");
+-	if(argc<4)_error_("Usage error: missing model name");
+-
+-	/*Get requested solution*/
+-	*solution_type=StringToEnumx(argv[1]);
+-
+-	rootpatharg=argv[2];
+-	if(strcmp(strstr(rootpatharg,"/"),"/")!=0){ 
+-		rootpath       = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
+-	}
+-	else{
+-		rootpath       = xNew<char>(strlen(rootpatharg)+1); sprintf(rootpath,"%s",rootpatharg);
+-	}
+-
+-	modelname=argv[3];
+-	if(strstr(modelname,rootpath)==NULL){
+-		binfilename    = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s%s",rootpath,modelname,".bin");
+-		outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
+-		toolkitsfilename  = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".toolkits") +1); sprintf(toolkitsfilename, "%s%s%s",rootpath,modelname,".toolkits");
+-		lockfilename   = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s%s",rootpath,modelname,".lock");
+-	}
+-	else{
+-		binfilename    = xNew<char>(strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s",modelname,".bin");
+-		outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
+-		toolkitsfilename  = xNew<char>(strlen(modelname)+strlen(".toolkits") +1); sprintf(toolkitsfilename, "%s%s",modelname,".toolkits");
+-		lockfilename   = xNew<char>(strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s",modelname,".lock");
+-	}
+-
+-	/*Clean up and assign output pointer*/
+-	*pbinfilename=binfilename;
+-	*poutbinfilename=outbinfilename;
+-	*ptoolkitsfilename=toolkitsfilename;
+-	*plockfilename=lockfilename;
+-	*prootpath=rootpath;
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 16518)
+@@ -1,44 +0,0 @@
+-/*!\file: bedslope_core.cpp
+- * \brief: core of the slope solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void bedslope_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-	int  meshtype;
+-
+-	/*Recover some parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+-
+-	if(VerboseSolution()) _printf0_("   computing slope\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeXAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-	if(meshtype!=Mesh2DverticalEnum){
+-		femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		if(meshtype!=Mesh2DverticalEnum){
+-			int outputs[2] = {BedSlopeXEnum,BedSlopeYEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-		}
+-		else{
+-			int outputs[1] = {BedSlopeXEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+-		}
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/extrudefrombase_core.cpp	(revision 16518)
+@@ -1,21 +0,0 @@
+-/*!\file: extrudefrombase_core.cpp
+- * \brief: core of the extrusion solution
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-
+-void extrudefrombase_core(FemModel* femmodel){
+-
+-	if(VerboseSolution()) _printf0_("extruding solution from base...\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(ExtrudeFromBaseAnalysisEnum);
+-	femmodel->UpdateConstraintsExtrudeFromBasex();
+-	solutionsequence_linear(femmodel);
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 16518)
+@@ -1,48 +0,0 @@
+-/*!\file:  adjointstressbalance_core.cpp
+- * \brief compute inverse method adjoint state
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void adjointstressbalance_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool isFS;
+-	bool save_results;
+-	bool conserve_loads   = true;
+-
+-	/*retrieve parameters:*/
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	/*Compute velocities*/
+-	if(VerboseSolution()) _printf0_("   computing velocities\n");
+-	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+-	solutionsequence_nonlinear(femmodel,conserve_loads); 
+-
+-	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel);
+-
+-	/*Compute adjoint*/
+-	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+-	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum,AdjointHorizAnalysisEnum);
+-	solutionsequence_adjoint_linear(femmodel);
+-
+-	/*Save results*/
+-	if(save_results || true){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		if (isFS){
+-			int outputs[4] = {AdjointxEnum,AdjointyEnum,AdjointzEnum,AdjointpEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
+-		}
+-		else{
+-			int outputs[2] = {AdjointxEnum,AdjointyEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-		}
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 16518)
+@@ -1,144 +0,0 @@
+-/*!\file:  AnalysisConfiguration.cpp
+- * \brief: return type of analyses, number of analyses 
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype){
+-
+-	/*output: */
+-	int  numanalyses;
+-	int* analyses=NULL;
+-
+-	/*Analyses lists*/
+-	switch(solutiontype){
+-
+-		case StressbalanceSolutionEnum:
+-			numanalyses=5;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=StressbalanceAnalysisEnum;
+-			analyses[1]=StressbalanceVerticalAnalysisEnum;
+-			analyses[2]=StressbalanceSIAAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
+-			break;
+-
+-		case SteadystateSolutionEnum:
+-			numanalyses=8;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=StressbalanceAnalysisEnum;
+-			analyses[1]=StressbalanceVerticalAnalysisEnum;
+-			analyses[2]=StressbalanceSIAAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
+-			analyses[5]=EnthalpyAnalysisEnum;
+-			analyses[6]=ThermalAnalysisEnum;
+-			analyses[7]=MeltingAnalysisEnum;
+-			break;
+-
+-		case ThermalSolutionEnum:
+-			numanalyses=3;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=ThermalAnalysisEnum;
+-			analyses[1]=MeltingAnalysisEnum;
+-			analyses[2]=EnthalpyAnalysisEnum;
+-			break;
+-
+-		case HydrologySolutionEnum:
+-			numanalyses=5;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=HydrologyShreveAnalysisEnum;
+-			analyses[1]=HydrologyDCInefficientAnalysisEnum;
+-			analyses[2]=HydrologyDCEfficientAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
+-			break;
+-
+-		case MasstransportSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=MasstransportAnalysisEnum;
+-			break;
+-
+-		case BalancethicknessSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=BalancethicknessAnalysisEnum;
+-			break;
+-
+-		case BalancethicknessSoftSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=BalancethicknessAnalysisEnum;
+-			break;
+-
+-		case BalancevelocitySolutionEnum:
+-			numanalyses=2;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=BalancevelocityAnalysisEnum;
+-			analyses[1]=SurfaceSlopeAnalysisEnum;
+-			break;
+-
+-		case SurfaceSlopeSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=SurfaceSlopeAnalysisEnum;
+-			break;
+-
+-		case BedSlopeSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=BedSlopeAnalysisEnum;
+-			break;
+-
+-		case GiaSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=GiaAnalysisEnum;
+-			break;
+-		
+-		case DamageEvolutionSolutionEnum:
+-			numanalyses=1;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[0]=DamageEvolutionAnalysisEnum;
+-			break;
+-
+-		case TransientSolutionEnum:
+-			numanalyses=13;
+-			analyses=xNew<int>(numanalyses);
+-			analyses[ 0]=StressbalanceAnalysisEnum;
+-			analyses[ 1]=StressbalanceVerticalAnalysisEnum;
+-			analyses[ 2]=StressbalanceSIAAnalysisEnum;
+-			analyses[ 3]=SurfaceSlopeAnalysisEnum;
+-			analyses[ 4]=BedSlopeAnalysisEnum;
+-			analyses[ 5]=ThermalAnalysisEnum;
+-			analyses[ 6]=MeltingAnalysisEnum;
+-			analyses[ 7]=EnthalpyAnalysisEnum;
+-			analyses[ 8]=MasstransportAnalysisEnum;
+-			analyses[ 9]=FreeSurfaceBaseAnalysisEnum;
+-			analyses[10]=FreeSurfaceTopAnalysisEnum;
+-			analyses[11]=ExtrudeFromBaseAnalysisEnum;
+-			analyses[12]=ExtrudeFromTopAnalysisEnum;
+-			break;
+-
+-		default:
+-			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+-			break;
+-	}
+-
+-	/*Assign output pointers:*/
+-	if(pnumanalyses) *pnumanalyses=numanalyses;
+-	if(panalyses)    *panalyses=analyses;
+-	else              xDelete<int>(analyses);
+-}
+Index: ../trunk-jpl/src/c/analyses/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/dakota_core.cpp	(revision 16518)
+@@ -1,230 +0,0 @@
+-/*!\file:  dakota_core.cpp
+- * \brief: wrapper to the Dakota capabilities. qmu fires up Dakota, and registers a Dakota Pluggin
+- * which will be in charge of running the solution sequences repeteadly, to garner statistics. 
+- *
+- * This routine deals with running ISSM and Dakota in library mode. In library mode, Dakota does not 
+- * run as an execuatble. Its capabilities are linked into the ISSM software. ISSM calls dakota routines 
+- * directly from the dakota library. qmu.cpp is the code that is in charge of calling those routines. 
+- *
+- * Dakota has its own way of running in parallel (for embarassingly parallel jobs). We do not want that, 
+- * as ISSM knows exactly how to run "really parallel" jobs that use all CPUS. To bypass Dakota's parallelism, 
+- * we overloaded the constructor for the parallel library (see the Dakota patch in the externalpackages/dakota
+- * directory). This overloaded constructor fires up Dakota serially on CPU 0 only! We take care of broadcasting 
+- * to the other CPUS, hence ISSM is running in parallel, and Dakota serially on CPU0. 
+- *
+- * Now, how does CPU 0 drive all other CPUS to carry out sensitivity analysese? By synchronizing its call to 
+- * our ISSM cores (stressbalance_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
+- * This explains the structure of qmu.cpp, where cpu 0 runs Dakota, the Dakota pluggin fires up DakotaSpawnCore.cpp, 
+- * while the other CPUS are waiting for a broadcast from CPU0, once they get it, they also fire up 
+- * DakotaSpawnCore. In the end, DakotaSpawnCore is fired up on all CPUS, with CPU0 having Dakota inputs, that it will 
+- * broacast to other CPUS. 
+- *
+- * Now, how does dakota call the DakotaSpawnCore routine? The DakotaSpawnCore is embedded into the DakotaPlugin object 
+- * which is derived from the Direct Interface Dakota objct. This is the only way to run Dakota in library 
+- * mode (see their developper guide for more info). Dakota registers the DakotaPlugin object into its own 
+- * database, and calls on the embedded DakotaSpawnCore from CPU0. 
+- *
+- */ 
+-
+-/*include files: {{{*/
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../shared/shared.h"
+-#include "../classes/classes.h"
+-
+-#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-#if _DAKOTA_MAJOR_ < 5 || (_DAKOTA_MAJOR_ == 5 && _DAKOTA_MINOR_ < 3)
+-#include <ParallelLibrary.H>
+-#include <ProblemDescDB.H>
+-#include <DakotaStrategy.H>
+-#include <DakotaModel.H>
+-#include <DakotaInterface.H>
+-#else
+-#include <ParallelLibrary.hpp>
+-#include <ProblemDescDB.hpp>
+-#include <DakotaStrategy.hpp>
+-#include <DakotaModel.hpp>
+-#include <DakotaInterface.hpp>
+-#endif
+-#include "./DakotaSpawnCore.h"
+-#endif
+-/*}}}*/
+-/*DakotaPlugin class {{{*/
+-#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-#if _DAKOTA_MAJOR_ < 5 || (_DAKOTA_MAJOR_ == 5 && _DAKOTA_MINOR_ < 3)
+-#include <DirectApplicInterface.H>
+-#include <DakotaResponse.H>
+-#include <ParamResponsePair.H>
+-#include <system_defs.h>
+-#include <ProblemDescDB.H>
+-#include <ParallelLibrary.H>
+-#else
+-#include <DirectApplicInterface.hpp>
+-#include <DakotaResponse.hpp>
+-#include <ParamResponsePair.hpp>
+-#include <ProblemDescDB.hpp>
+-#include <ParallelLibrary.hpp>
+-#endif
+-namespace SIM {
+-	class DakotaPlugin: public Dakota::DirectApplicInterface{
+-		public:
+-			/*these fields are used by core solutions: */
+-			void *femmodel;
+-			int   counter;
+-			/*Constructors/Destructors*/
+-			DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodel):Dakota::DirectApplicInterface(problem_db){/*{{{*/
+-				femmodel = in_femmodel;
+-				counter  = 0;
+-			}/*}}}*/
+-			~DakotaPlugin(){/*{{{*/
+-				/* Virtual destructor handles referenceCount at Interface level. */ 
+-			}/*}}}*/
+-		protected:
+-			/*execute the input filter portion of a direct evaluation invocation*/
+-			//int derived_map_if(const Dakota::String& if_name);
+-			/*execute an analysis code portion of a direct evaluation invocation*/
+-			int derived_map_ac(const Dakota::String& driver){/*{{{*/
+-
+-				int i;
+-				IssmDouble* variables=NULL;
+-				char** variable_descriptors=NULL;
+-				char*  variable_descriptor=NULL;
+-				IssmDouble* responses=NULL;
+-
+-				/*increae counter: */
+-				counter++;
+-
+-				/*Before launching analysis, we need to transfer the dakota inputs into Issm 
+-				 *readable variables: */
+-
+-				/*First, the variables: */
+-				variables=xNew<IssmDouble>(numACV);
+-				for(i=0;i<numACV;i++){
+-					variables[i]=xC[i];
+-				}
+-				/*The descriptors: */
+-				variable_descriptors=xNew<char*>(numACV);
+-				for(i=0;i<numACV;i++){
+-					std::string label=xCLabels[i];
+-					variable_descriptor=xNew<char>(strlen(label.c_str())+1);
+-					memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
+-
+-					variable_descriptors[i]=variable_descriptor;
+-				}
+-
+-				/*Initialize responses: */
+-				responses=xNewZeroInit<IssmDouble>(numFns);
+-
+-				/*run core solution: */
+-				DakotaSpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodel,counter);
+-
+-				/*populate responses: */
+-				for(i=0;i<numFns;i++){
+-					fnVals[i]=responses[i];
+-				}
+-
+-				/*Free ressources:*/
+-				xDelete<IssmDouble>(variables);
+-				for(i=0;i<numACV;i++){
+-					variable_descriptor=variable_descriptors[i];
+-					xDelete<char>(variable_descriptor);
+-				}
+-				xDelete<char*>(variable_descriptors);
+-				xDelete<IssmDouble>(responses);
+-
+-				return 0;
+-			}/*}}}*/
+-			/*execute the output filter portion of a direct evaluation invocation*/
+-			//int derived_map_of(const Dakota::String& of_name);
+-			/*add for issm: */
+-			int GetCounter(){/*{{{*/
+-				return counter;
+-			}/*}}}*/
+-		private:
+-	};
+-} 
+-#endif
+-/*}}}*/
+-
+-void dakota_core(FemModel* femmodel){ 
+-
+-	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-
+-	int                my_rank;
+-	char              *dakota_input_file  = NULL;
+-	char              *dakota_output_file = NULL;
+-	char              *dakota_error_file  = NULL;
+-	Dakota::ModelLIter ml_iter;
+-
+-	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
+-	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+-	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+-	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	if(my_rank==0){
+-
+-		// Instantiate/initialize the parallel library and problem description
+-		// database objects.
+-		char* dakotamode=xNew<char>(strlen("serial")+1);
+-		xMemCpy<char>(dakotamode,"serial",strlen("serial")+1);
+-		Dakota::ParallelLibrary parallel_lib(dakotamode); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
+-		Dakota::ProblemDescDB problem_db(parallel_lib); 
+-		xDelete<char>(dakotamode);
+-
+-		// Manage input file parsing, output redirection, and restart processing
+-		// without a CommandLineHandler.  This version relies on parsing of an
+-		// input file.
+-		problem_db.manage_inputs(dakota_input_file);
+-		// specify_outputs_restart() is only necessary if specifying non-defaults
+-		parallel_lib.specify_outputs_restart(dakota_output_file,dakota_error_file,NULL,NULL);
+-
+-		// Instantiate the Strategy object (which instantiates all Model and
+-		// Iterator objects) using the parsed information in problem_db.
+-		Dakota::Strategy selected_strategy(problem_db);
+-
+-		// convenience function for iterating over models and performing any
+-		// interface plug-ins
+-		Dakota::ModelList& models = problem_db.model_list();
+-
+-		for (ml_iter = models.begin(); ml_iter != models.end(); ml_iter++) {
+-
+-			Dakota::Interface& interface = ml_iter->interface();
+-
+-			//set DB nodes to the existing Model specification
+-			problem_db.set_db_model_nodes(ml_iter->model_id());
+-
+-			// Serial case: plug in derived Interface object without an analysisComm
+-			interface.assign_rep(new SIM::DakotaPlugin(problem_db,(void*)femmodel), false);
+-		}
+-
+-		// Execute the strategy
+-		problem_db.lock(); // prevent run-time DB queries
+-		selected_strategy.run_strategy();
+-
+-		//Warn other cpus that we are done running the dakota iterator, by setting the counter to -1:
+-		DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,-1);
+-
+-	}
+-	else{
+-
+-		for(;;){
+-			if(!DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,0))break; //counter came in at -1 on cpu0, bail out.
+-		}
+-	}
+-
+-	/*Free ressources:*/
+-	xDelete<char>(dakota_input_file);
+-	xDelete<char>(dakota_error_file);
+-	xDelete<char>(dakota_output_file);
+-
+-	#endif //#ifdef _HAVE_DAKOTA_
+-}
+Index: ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/balancevelocity_core.cpp	(revision 16518)
+@@ -1,37 +0,0 @@
+-/*!\file: balancevelocity_core.cpp
+- * \brief: core of the balancevelocity solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void balancevelocity_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-
+-	/*recover parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	if(VerboseSolution()) _printf0_("computing smoothed slopes:\n");
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-	//surfaceslope_core(femmodel);
+-
+-	if(VerboseSolution()) _printf0_("call computational core:\n");
+-	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		int outputs[3] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum,VelEnum};
+-		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 16518)
+@@ -1,39 +0,0 @@
+-/*!\file:  adjointbalancethickness_core.cpp
+- * \brief compute inverse method adjoint state
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void adjointbalancethickness_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-
+-	/*retrieve parameters:*/
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	/*compute thickness */
+-	if(VerboseSolution()) _printf0_("   computing thickness\n");
+-	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	/*Call SurfaceAreax, because some it might be needed by PVector*/
+-	SurfaceAreax(NULL,femmodel);
+-
+-	/*compute adjoint*/
+-	if(VerboseSolution()) _printf0_("   computing adjoint\n");
+-	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum,AdjointBalancethicknessAnalysisEnum);
+-	solutionsequence_adjoint_linear(femmodel);
+-
+-	/*Save results*/
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		int outputs[1] = {AdjointEnum};
+-		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16518)
+@@ -1,62 +0,0 @@
+-/*
+- * analyses.h: 
+- */
+-
+-#ifndef _ANALYSES_H_
+-#define _ANALYSES_H_
+-
+-/*forward declarations: */
+-struct OptArgs;
+-class FemModel;
+-class Parameters;
+-template <class doubletype> class Matrix;
+-template <class doubletype> class Vector;
+-
+-#include "../shared/io/Comm/IssmComm.h"
+-#include "../shared/Numerics/types.h"
+-
+-/*cores: */
+-void adjointstressbalance_core(FemModel* femmodel);
+-void adjointbalancethickness_core(FemModel* femmodel);
+-void gradient_core(FemModel* femmodel,int n=0,bool orthogonalize=false);
+-void stressbalance_core(FemModel* femmodel);
+-void hydrology_core(FemModel* femmodel);
+-void thermal_core(FemModel* femmodel);
+-void surfaceslope_core(FemModel* femmodel);
+-void bedslope_core(FemModel* femmodel);
+-void meshdeformation_core(FemModel* femmodel);
+-void control_core(FemModel* femmodel);
+-void controltao_core(FemModel* femmodel);
+-void masstransport_core(FemModel* femmodel);
+-void extrudefrombase_core(FemModel* femmodel);
+-void extrudefromtop_core(FemModel* femmodel);
+-void balancethickness_core(FemModel* femmodel);
+-void balancevelocity_core(FemModel* femmodel);
+-void slopecompute_core(FemModel* femmodel);
+-void steadystate_core(FemModel* femmodel);
+-void transient_core(FemModel* femmodel);
+-void dakota_core(FemModel* femmodel);
+-void ad_core(FemModel* femmodel);
+-void dummy_core(FemModel* femmodel);
+-void gia_core(FemModel* femmodel);
+-void damage_core(FemModel* femmodel);
+-IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
+-
+-//optimization
+-int GradJSearch(IssmDouble* search_vector,FemModel* femmodel,int step);
+-
+-//diverse
+-void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ptoolkitsname,char** plockname,char** prootpath,int argc,char **argv);
+-void WriteLockFile(char* filename);
+-void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
+-ISSM_MPI_Comm EnvironmentInit(int argc,char** argv);
+-void EnvironmentFinalize(void);
+-void PrintBanner(void);
+-
+-//solution configuration
+-void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
+-void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
+-void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
+-
+-#endif
+Index: ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 16518)
+@@ -1,187 +0,0 @@
+-/*!\file:  DakotaSpawnCore.cpp
+-
+- * \brief: run core ISSM solution using Dakota inputs coming from CPU 0.
+- * \sa qmu.cpp DakotaPlugin.cpp
+- *
+- * This routine needs to be understood simultaneously with qmu.cpp and DakotaPlugin. 
+- * DakotaSpawnCoreParallel is called by all CPUS, with CPU 0 holding Dakota variable values, along 
+- * with variable descriptors. 
+- *
+- * DakotaSpawnCoreParallel takes care of broadcasting the variables and their descriptors across the MPI 
+- * ring. Once this is done, we use the variables to modify the inputs for the solution core. 
+- * For ex, if "rho_ice" is provided, for ex 920, we include "rho_ice" in the inputs, then 
+- * call the core with the modified inputs. This is the way we get Dakota to explore the parameter 
+- * spce of the core. 
+- *
+- * Once the core is called, we process the results of the core, and using the processed results, 
+- * we compute response functions. The responses are computed on all CPUS, but they are targeted 
+- * for CPU 0, which will get these values back to the Dakota engine. 
+- *
+- */ 
+-
+-/*Includes and prototypes: {{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./analyses.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-
+-void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses);
+-void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses);
+-/*}}}*/
+-
+-/*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
+-int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
+-
+-	char     **responses_descriptors    = NULL;      //these are our! there are only numresponsedescriptors of them, not d_numresponses!!!
+-	int        numresponsedescriptors;
+-	int        solution_type;
+-	bool       control_analysis         = false;
+-	void     (*solutioncore)(FemModel*) = NULL;
+-	FemModel  *femmodel                 = NULL;
+-	bool       nodakotacore             = true;
+-
+-	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+-	ISSM_MPI_Bcast(&counter,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-	if(counter==-1)return 0;
+-
+-	/*cast void_femmodel to FemModel: */
+-	femmodel=reinterpret_cast<FemModel*>(void_femmodel);
+-
+-	/*retrieve parameters: */
+-	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-
+-	if(VerboseQmu()) _printf0_("qmu iteration: " << counter << "\n");
+-
+-	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
+-	DakotaMPI_Bcast(&d_variables,&d_variables_descriptors,&d_numvariables,&d_numresponses);
+-
+-	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
+-	InputUpdateFromDakotax(femmodel,d_variables,d_variables_descriptors,d_numvariables);
+-
+-	/*Determine solution sequence: */
+-	if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n");
+-	WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
+-
+-	/*Run the core solution sequence: */
+-	solutioncore(femmodel);
+-
+-	/*compute responses: */
+-	if(VerboseQmu()) _printf0_("compute dakota responses:\n");
+-	femmodel->DakotaResponsesx(d_responses,responses_descriptors,numresponsedescriptors,d_numresponses);
+-
+-	/*Free ressources:*/
+-	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
+-
+-	return 1; //this is critical! do not return 0, otherwise, dakota_core will stop running!
+-}
+-
+-void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){ /*{{{*/
+-
+-	/* * \brief: broadcast variables_descriptors, variables, numvariables and numresponses
+-	 * from cpu 0 to all other cpus.
+-	 */ 
+-
+-	int i;
+-	int my_rank;
+-
+-	/*inputs and outputs: */
+-	double* variables=NULL;
+-	char**  variables_descriptors=NULL;
+-	int     numvariables;
+-	int     numresponses;
+-
+-	/*intermediary: */
+-	char* string=NULL;
+-	int   string_length;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	/*recover inputs from pointers: */
+-	variables=*pvariables;
+-	variables_descriptors=*pvariables_descriptors;
+-	numvariables=*pnumvariables;
+-	numresponses=*pnumresponses;
+-
+-	/*numvariables: */
+-	ISSM_MPI_Bcast(&numvariables,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-	/*variables:*/
+-	if(my_rank!=0)variables=xNew<double>(numvariables);
+-	ISSM_MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-
+-	/*variables_descriptors: */
+-	if(my_rank!=0){
+-		variables_descriptors=xNew<char*>(numvariables);
+-	}
+-	for(i=0;i<numvariables;i++){
+-		if(my_rank==0){
+-			string=variables_descriptors[i];
+-			string_length=(strlen(string)+1)*sizeof(char);
+-		}
+-		ISSM_MPI_Bcast(&string_length,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-		if(my_rank!=0)string=xNew<char>(string_length);
+-		ISSM_MPI_Bcast(string,string_length,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+-		if(my_rank!=0)variables_descriptors[i]=string;
+-	}
+-
+-	/*numresponses: */
+-	ISSM_MPI_Bcast(&numresponses,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+-
+-	/*Assign output pointers:*/
+-	*pnumvariables=numvariables;
+-	*pvariables=variables;
+-	*pvariables_descriptors=variables_descriptors;
+-	*pnumresponses=numresponses;
+-} /*}}}*/
+-void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses){ /*{{{*/
+-
+-	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
+-
+-	int i;
+-	int my_rank;
+-
+-	double  *variables             = NULL;
+-	char   **variables_descriptors = NULL;
+-	char   **responses_descriptors = NULL;
+-	char    *string                = NULL;
+-
+-	/*recover pointers: */
+-	variables=*pvariables;
+-	variables_descriptors=*pvariables_descriptors;
+-	responses_descriptors=*presponses_descriptors;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	/*Free variables and variables_descriptors only on cpu !=0*/
+-	if(my_rank!=0){
+-		xDelete<double>(variables);
+-		for(i=0;i<numvariables;i++){
+-			string=variables_descriptors[i];
+-			xDelete<char>(string);
+-		}
+-		xDelete<char*>(variables_descriptors);
+-	}
+-
+-	//responses descriptors on every cpu
+-	for(i=0;i<numresponses;i++){
+-		string=responses_descriptors[i];
+-		xDelete<char>(string);
+-	}
+-	//rest of dynamic allocations.
+-	xDelete<char*>(responses_descriptors);
+-
+-	/*Assign output pointers:*/
+-	*pvariables=variables;
+-	*pvariables_descriptors=variables_descriptors;
+-	*presponses_descriptors=responses_descriptors;
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/analyses/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/control_core.cpp	(revision 16518)
+@@ -1,129 +0,0 @@
+-/*!\file: control_core.cpp
+- * \brief: core of the control solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-/*Local prototypes*/
+-bool controlconvergence(IssmDouble J, IssmDouble tol_cm);
+-
+-void control_core(FemModel* femmodel){
+-
+-	int     i;
+-
+-	/*parameters: */
+-	int        num_controls;
+-	int        nsteps;
+-	IssmDouble tol_cm;
+-	int        solution_type;
+-	bool       isFS;
+-	bool       dakota_analysis = false;
+-
+-	int        *control_type   = NULL;
+-	IssmDouble *maxiter        = NULL;
+-	IssmDouble *cm_jump        = NULL;
+-
+-	/*intermediary: */
+-	IssmDouble search_scalar = 1.;
+-	OptArgs    optargs;
+-	OptPars    optpars;
+-
+-	/*Solution and Adjoint core pointer*/
+-	void (*solutioncore)(FemModel*) = NULL;
+-	void (*adjointcore)(FemModel*)  = NULL;
+-
+-	/*output: */
+-	IssmDouble* J=NULL;
+-
+-	/*Recover parameters used throughout the solution*/
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+-	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
+-	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
+-	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
+-	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->SetParam(false,SaveResultsEnum);
+-
+-	/*out of solution_type, figure out solution core and adjoint function pointer*/
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+-
+-	/*Launch once a complete solution to set up all inputs*/
+-	if(VerboseControl()) _printf0_("   preparing initial solution\n");
+-	if(isFS) solutioncore(femmodel);
+-
+-	/*Initialize cost function: */
+-	J=xNew<IssmDouble>(nsteps);
+-
+-	/*Initialize some of the BrentSearch arguments: */
+-	optargs.femmodel=femmodel;
+-	optpars.xmin=0; optpars.xmax=1;
+-
+-	/*Start looping: */
+-	for(int n=0;n<nsteps;n++){
+-
+-		/*Display info*/
+-		if(VerboseControl()) _printf0_("\n" << "   control method step " << n+1 << "/" << nsteps << "\n");
+-
+-
+-		/*In steady state inversion, compute new temperature field now*/
+-		if(solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
+-
+-		if(VerboseControl()) _printf0_("   compute adjoint state:\n");
+-		adjointcore(femmodel);
+-		gradient_core(femmodel,n,search_scalar==0.);
+-
+-		if(VerboseControl()) _printf0_("   optimizing along gradient direction\n");
+-		optpars.maxiter=reCast<int,IssmDouble>(maxiter[n]); optpars.cm_jump=cm_jump[n];
+-		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunction,&optargs);
+-
+-		if(VerboseControl()) _printf0_("   updating parameter using optimized search scalar\n"); //true means update save controls
+-		InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
+-
+-		if(controlconvergence(J[n],tol_cm)) break;
+-	}
+-
+-	if(VerboseControl()) _printf0_("   preparing final solution\n");
+-	femmodel->parameters->SetParam(true,SaveResultsEnum);
+-	solutioncore(femmodel);
+-
+-	/*some results not computed by steadystate_core or stressbalance_core: */
+-	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
+-		femmodel->OutputControlsx(&femmodel->results);
+-
+-		#ifdef _HAVE_ADOLC_
+-		IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
+-		for(i=0;i<nsteps;i++) J_passive[i]=reCast<IssmPDouble>(J[i]);
+-		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J_passive,nsteps,1,1,0));
+-		xDelete<IssmPDouble>(J_passive);
+-		#else
+-		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J,nsteps,1,1,0));
+-		#endif
+-	}
+-
+-	/*Free ressources: */
+-	xDelete<int>(control_type);
+-	xDelete<IssmDouble>(maxiter);
+-	xDelete<IssmDouble>(cm_jump);
+-	xDelete<IssmDouble>(J);
+-}
+-bool controlconvergence(IssmDouble J, IssmDouble tol_cm){
+-
+-	bool converged=false;
+-
+-	/*Has convergence been reached?*/
+-	if (!xIsNan<IssmDouble>(tol_cm) && J<tol_cm){
+-		converged=true;
+-		if(VerboseConvergence()) _printf0_("      Convergence criterion reached: J = " << J << " < " << tol_cm);
+-	}
+-
+-	return converged;
+-}
+Index: ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/EnvironmentInit.cpp	(revision 16518)
+@@ -1,35 +0,0 @@
+-/*!\file:  EnvironmentInit.cpp
+- * \brief: initialize Petsc, MPI, you name it
+- */ 
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include <stdio.h>
+-#include "../toolkits/toolkits.h"
+-
+-ISSM_MPI_Comm EnvironmentInit(int argc,char** argv){
+-
+-	/*Output*/
+-	ISSM_MPI_Comm comm = 0;
+-
+-	/*Initialize MPI environment: */
+-	#if defined(_HAVE_MPI_)
+-	ISSM_MPI_Init(&argc,&argv);
+-	comm = ISSM_MPI_COMM_WORLD;
+-	#else
+-	comm = 1; //bogus number for comm, which does not exist anyway.
+-	#endif
+-
+-	/*Print Banner*/
+-	int my_rank = 0;
+-	ISSM_MPI_Comm_rank(comm,&my_rank);
+-	if(!my_rank) printf("\n");
+-	if(!my_rank) printf("%s version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
+-	if(!my_rank) printf("(website: %s contact: %s)\n",PACKAGE_URL,PACKAGE_BUGREPORT);
+-	if(!my_rank) printf("\n");
+-
+-	/*Return communicator*/
+-	return comm;
+-}
+Index: ../trunk-jpl/src/c/analyses/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 16518)
+@@ -1,179 +0,0 @@
+-/*!\file: control_core.cpp
+- * \brief: core of the control solution 
+- */ 
+-#include <config.h>
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-#if defined (_HAVE_TAO_) && defined (_HAVE_PETSC_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 1)
+-#include <tao.h>
+-
+-/*Local prototype*/
+-int FormFunctionGradient(TaoSolver,Vec,IssmDouble*,Vec,void*);
+-int IssmMonitor(TaoSolver,void*);
+-typedef struct {
+-	FemModel* femmodel;
+-	double*   J;
+-} AppCtx;
+-
+-void controltao_core(FemModel* femmodel){
+-
+-	/*TAO*/
+-	int                 ierr;
+-	int                 num_controls,solution_type;
+-	int                 nsteps,maxiter;
+-	AppCtx              user;
+-	TaoSolver           tao = 0;
+-	int                *control_list = NULL;
+-	Vector<IssmDouble> *X            = NULL;
+-	Vector<IssmDouble> *G            = NULL;
+-	Vector<IssmDouble> *XL           = NULL;
+-	Vector<IssmDouble> *XU           = NULL;
+-
+-	/*Initialize TAO*/
+-	int argc; char **args=NULL;
+-	PetscGetArgs(&argc,&args);
+-	ierr = TaoInitialize(&argc,&args,(char*)0,"");
+-	if(ierr) _error_("Could not initialize Tao");
+-
+-	/*Recover some parameters*/
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+-	femmodel->parameters->FindParam(&control_list,NULL,InversionControlParametersEnum);
+-	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
+-	femmodel->parameters->SetParam(false,SaveResultsEnum);
+-	maxiter=nsteps*10;
+-
+-	/*Prepare Toolkit*/
+-	ToolkitsOptionsFromAnalysis(femmodel->parameters,DefaultAnalysisEnum);
+-
+-	/*Initialize TAO*/
+-	TaoCreate(IssmComm::GetComm(),&tao);
+-	if(VerboseControl()) _printf0_("   Initializing the Toolkit for Advanced Optimization (TAO)\n");
+-	TaoSetFromOptions(tao);
+-	TaoSetType(tao,"tao_blmvm");
+-	//TaoSetType(tao,"tao_cg");
+-	//TaoSetType(tao,"tao_lmvm");
+-
+-	/*Prepare all TAO parameters*/
+-	TaoSetMonitor(tao,IssmMonitor,&user,NULL);
+-	TaoSetMaximumFunctionEvaluations(tao,maxiter);
+-	TaoSetMaximumIterations(tao,nsteps);
+-	TaoSetTolerances(tao,0.,0.,0.,0.,0.);
+-
+-	GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
+-	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+-	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+-	TaoSetInitialVector(tao,X->pvector->vector);
+-	TaoSetVariableBounds(tao,XL->pvector->vector,XU->pvector->vector);
+-	delete XL;
+-	delete XU;
+-
+-	user.J=xNewZeroInit<double>(maxiter+5);
+-	user.femmodel=femmodel;
+-	TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user); 
+-
+-	/*Solver optimization problem*/
+-	if(VerboseControl()) _printf0_("   Starting optimization\n");
+-	TaoSolve(tao);
+-	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
+-
+-	/*Save results*/
+-	TaoGetSolutionVector(tao,&X->pvector->vector);
+-	G=new Vector<IssmDouble>(0); VecFree(&G->pvector->vector);
+-	TaoGetGradientVector(tao,&G->pvector->vector);
+-	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
+-	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
+-	femmodel->OutputControlsx(&femmodel->results);
+-	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
+-
+-	/*Finalize*/
+-	if(VerboseControl()) _printf0_("   preparing final solution\n");
+-	femmodel->parameters->SetParam(true,SaveResultsEnum);
+-	void (*solutioncore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	solutioncore(femmodel);
+-
+-	/*Clean up and return*/
+-	xDelete<int>(control_list);
+-	xDelete<double>(user.J);
+-	delete X;
+-	TaoDestroy(&tao);
+-	TaoFinalize();
+-}
+-int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, IssmDouble *fcn,Vec G,void *userCtx){
+-
+-	/*Retreive arguments*/
+-	int                  solution_type;
+-	AppCtx              *user            = (AppCtx *)userCtx;
+-	FemModel            *femmodel        = user->femmodel;
+-	Vector<IssmDouble>  *gradient        = NULL;
+-	Vector<IssmDouble>  *X               = NULL;
+-
+-	/*Convert input to Vec*/
+-	X=new Vector<IssmDouble>(Xpetsc);
+-
+-	/*Set new variable*/
+-	//VecView(X,PETSC_VIEWER_STDOUT_WORLD);
+-	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
+-	delete X;
+-
+-	/*Recover some parameters*/
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-
+-	/*Compute solution and adjoint*/
+-	void (*solutioncore)(FemModel*)=NULL;
+-	void (*adjointcore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+-	solutioncore(femmodel);
+-	adjointcore(femmodel);
+-
+-	/*Compute objective function*/
+-	femmodel->CostFunctionx(fcn);
+-
+-	/*Compute gradient*/
+-	Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	VecCopy(gradient->pvector->vector,G); delete gradient;
+-	VecScale(G,-1.);
+-
+-	/*Clean-up and return*/
+-	return 0;
+-}
+-int IssmMonitor(TaoSolver tao, void *userCtx){
+-
+-	int         its,num_responses;
+-	IssmDouble  f,gnorm,cnorm,xdiff;
+-	AppCtx     *user      = (AppCtx *)userCtx;
+-	FemModel   *femmodel  = user->femmodel;
+-	int        *responses = NULL;
+-
+-	femmodel->parameters->FindParam(&responses,&num_responses,InversionCostFunctionsEnum);
+-
+-	TaoGetSolutionStatus(tao, &its, &f, &gnorm, &cnorm, &xdiff, NULL);
+-	if(its==0) _printf0_("Iter       Function      Residual  |  List of contributions\n");
+-	if(its==0) _printf0_("-----------------------------------+-----------------------\n");
+-	_printf0_(setw(4)<<its<<"   "<<setw(12)<<setprecision(7)<<f<<"  "<<setw(12)<<setprecision(7)<<gnorm<<"  | ");
+-	user->J[its]=f;
+-
+-	/*Retrieve objective functions independently*/
+-	for(int i=0;i<num_responses;i++){
+-		femmodel->Responsex(&f,EnumToStringx(responses[i]));
+-		_printf0_(" "<<setw(12)<<setprecision(7)<<f);
+-	}
+-	_printf0_("\n");
+-
+-	/*Clean-up and return*/
+-	xDelete<int>(responses);
+-	return 0;
+-}
+-
+-#else
+-void controltao_core(FemModel* femmodel){
+-	_error_("TAO not installed or PETSc version not supported");
+-}
+-#endif //_HAVE_TAO_ 
+Index: ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/extrudefromtop_core.cpp	(revision 16518)
+@@ -1,21 +0,0 @@
+-/*!\file: extrudefromtop_core.cpp
+- * \brief: core of the extrusion solution
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-
+-void extrudefromtop_core(FemModel* femmodel){
+-
+-	if(VerboseSolution()) _printf0_("extruding solution from top...\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(ExtrudeFromTopAnalysisEnum);
+-	femmodel->UpdateConstraintsExtrudeFromTopx();
+-	solutionsequence_linear(femmodel);
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -1,127 +0,0 @@
+-/*!\file:  CorePointerFromSolutionEnum.cpp
+- * \brief: return type of analyses, number of analyses and core solution function.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
+-
+-	/*output: */
+-	void (*solutioncore)(FemModel*)=NULL;
+-
+-	switch(solutiontype){
+-
+-		case StressbalanceSolutionEnum:
+-			#ifdef _HAVE_STRESSBALANCE_
+-			solutioncore=&stressbalance_core;
+-			#else
+-			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
+-			#endif
+-			break;
+-		case SteadystateSolutionEnum:
+-			#ifdef _HAVE_STEADYSTATE_
+-			solutioncore=&steadystate_core;
+-			#else
+-			_error_("ISSM was not compiled with steady state capabilities. Exiting");
+-			#endif
+-			break;
+-		case ThermalSolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&thermal_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+-		case BalancethicknessSolutionEnum:
+-			#ifdef _HAVE_BALANCED_
+-			solutioncore=&balancethickness_core;
+-			#else
+-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+-			#endif
+-			break;
+-		case BalancethicknessSoftSolutionEnum:
+-			#ifdef _HAVE_BALANCED_
+-			solutioncore=&dummy_core;
+-			#else
+-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+-			#endif
+-			break;
+-		case BalancevelocitySolutionEnum:
+-			#ifdef _HAVE_BALANCED_
+-			solutioncore=&balancevelocity_core;
+-			#else
+-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+-			#endif
+-			break;
+-		case HydrologySolutionEnum:
+-			#ifdef _HAVE_HYDROLOGY_
+-			solutioncore=&hydrology_core;
+-			#else
+-			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
+-			#endif
+-			break;
+-		case SurfaceSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&surfaceslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case BedSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&bedslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case TransientSolutionEnum:
+-			#ifdef _HAVE_TRANSIENT_
+-			solutioncore=&transient_core;
+-			#else
+-			_error_("ISSM was not compiled with transient capabilities. Exiting");
+-			#endif
+-			break;
+-		case MasstransportSolutionEnum:
+-			#ifdef _HAVE_MASSTRANSPORT_
+-			solutioncore=&masstransport_core;
+-			#else
+-			_error_("ISSM was not compiled with masstransport capabilities. Exiting");
+-			#endif
+-			break;
+-
+-		case GiaSolutionEnum:
+-			#ifdef _HAVE_GIA_
+-			solutioncore=&gia_core;
+-			#else
+-			_error_("ISSM was not compiled with gia capabilities. Exiting");
+-			#endif
+-			break;
+-		case DamageEvolutionSolutionEnum:
+-			#ifdef _HAVE_DAMAGE_
+-			solutioncore=&damage_core;
+-			#else
+-			_error_("ISSM was not compiled with damage evolution capabilities. Exiting");
+-			#endif
+-			break;
+-
+-		default:
+-			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+-			break;
+-	}
+-
+-	/*Assign output pointer:*/
+-	_assert_(psolutioncore);
+-	*psolutioncore=solutioncore;
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/dummy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/dummy_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/dummy_core.cpp	(revision 16518)
+@@ -1,11 +0,0 @@
+-/*!\file: dummy_core.cpp
+- * \brief: dummy core (nothing done)
+- */ 
+-
+-class FemModel;
+-
+-void dummy_core(FemModel* femmodel){
+-
+-	/*We do not do anything*/
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 16518)
+@@ -1,43 +0,0 @@
+-/*!\file: surfaceslope_core.cpp
+- * \brief: core of the slope solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-
+-void surfaceslope_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-	int  meshtype;
+-
+-	/*Recover some parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+-
+-	if(VerboseSolution()) _printf0_("computing slope...\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeXAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("saving results:\n");
+-		if(meshtype!=Mesh2DverticalEnum){
+-			int outputs[2] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum};
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-
+-		}
+-		else{
+-			int outputs = SurfaceSlopeXEnum;
+-			femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+-		}
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 16518)
+@@ -1,65 +0,0 @@
+-/*!\file: thermal_core.cpp
+- * \brief: core of the thermal solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void thermal_core(FemModel* femmodel){
+-
+-	/*intermediary*/
+-	bool   save_results,isenthalpy;
+-	bool   dakota_analysis;
+-	int    solution_type,numoutputs;
+-	char** requested_outputs = NULL;
+-
+-	/*first recover parameters common to all solutions*/
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
+-	femmodel->parameters->FindParam(&numoutputs,ThermalNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,ThermalRequestedOutputsEnum);
+-
+-	if(dakota_analysis && solution_type!=TransientSolutionEnum){
+-		InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
+-		InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
+-		InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
+-		InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
+-		InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
+-		InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+-		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-		ResetConstraintsx(femmodel);
+-	}
+-
+-	if(isenthalpy){
+-
+-		if(VerboseSolution()) _printf0_("   computing enthalpy\n");
+-		femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum);
+-		solutionsequence_nonlinear(femmodel,true);
+-
+-		/*transfer enthalpy to enthalpy picard for the next step: */
+-		InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
+-
+-		/*Post process*/
+-		if(solution_type!=SteadystateSolutionEnum) PostprocessingEnthalpyx(femmodel);
+-	}
+-	else{
+-		if(VerboseSolution()) _printf0_("   computing temperatures\n");
+-		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-		solutionsequence_thermal_nonlinear(femmodel);
+-
+-		if(VerboseSolution()) _printf0_("   computing melting\n");
+-		femmodel->SetCurrentConfiguration(MeltingAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/gradient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gradient_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/gradient_core.cpp	(revision 16518)
+@@ -1,48 +0,0 @@
+-/*!\file:  gradient_core.cpp
+- * \brief compute inverse method gradient direction.
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void gradient_core(FemModel* femmodel,int step,bool orthogonalize){ 
+-
+-	/*Intermediaries*/
+-	IssmDouble  norm_inf;
+-	IssmDouble *norm_list    = NULL;
+-	Vector<IssmDouble>*     new_gradient = NULL;
+-	Vector<IssmDouble>*     gradient     = NULL;
+-	Vector<IssmDouble>*     old_gradient = NULL;
+-
+-	/*Compute gradient*/
+-	if(VerboseControl()) _printf0_("   compute cost function gradient\n");
+-	Gradjx(&gradient,&norm_list,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
+-
+-	if (orthogonalize){
+-		if(VerboseControl()) _printf0_("   orthogonalization\n");
+-		ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
+-		Orthx(&new_gradient,gradient,old_gradient); delete old_gradient; delete gradient;
+-	}
+-	else{ 
+-		new_gradient=gradient;
+-	}
+-
+-	/*Check that gradient is clean*/
+-	norm_inf=new_gradient->Norm(NORM_INF);
+-	if(norm_inf<=0)    _error_("||∂J/∂α||∞ = 0    gradient norm is zero");
+-	if(xIsNan<IssmDouble>(norm_inf))_error_("||∂J/∂α||∞ = NaN  gradient norm is NaN");
+-
+-	/*plug back into inputs: */
+-	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,new_gradient);
+-	delete new_gradient;
+-
+-	/*Scale Gradients*/
+-	ControlInputScaleGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,norm_list,step);
+-
+-	/*Clean up and return*/
+-	xDelete<IssmDouble>(norm_list);
+-}
+Index: ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/AdjointCorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -1,46 +0,0 @@
+-/*!\file:  AdjointCorePointerFromSolutionEnum.cpp
+- * \brief: return type of analyses, number of analyses and core solution function.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype){
+-
+-	/*output: */
+-	void (*adjointcore)(FemModel*)=NULL;
+-
+-	switch(solutiontype){
+-
+-		case StressbalanceSolutionEnum:
+-			adjointcore=&adjointstressbalance_core;
+-			break;
+-		case SteadystateSolutionEnum:
+-			adjointcore=&adjointstressbalance_core;
+-			break;
+-		case BalancethicknessSolutionEnum:
+-			adjointcore=&adjointbalancethickness_core;
+-			break;
+-		case BalancethicknessSoftSolutionEnum:
+-			adjointcore=&dummy_core;
+-			break;
+-		default:
+-			_error_("No adjoint has been implemented for solution " << EnumToStringx(solutiontype) << " yet");
+-			break;
+-	}
+-
+-	/*Assign output pointer:*/
+-	_assert_(padjointcore);
+-	*padjointcore=adjointcore;
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/gia_core.cpp	(revision 16518)
+@@ -1,56 +0,0 @@
+-/*!\file: gia_core.cpp
+- * \brief: core of the GIA solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-void gia_core(FemModel* femmodel){
+-
+-	Vector<IssmDouble> *wg    = NULL;
+-	Vector<IssmDouble> *dwdtg = NULL;
+-	IssmDouble          *x    = NULL;
+-	IssmDouble          *y    = NULL;
+-
+-	/*parameters: */
+-	bool save_results;
+-	int  gsize;
+-	int  configuration_type;
+-
+-	/*Recover some parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-
+-	if(VerboseSolution()) _printf0_("   computing GIA\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
+-
+-	/*Figure out size of g-set deflection vector and allocate solution vector: */
+-	gsize      = femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
+-	wg = new Vector<IssmDouble>(gsize);
+-	dwdtg = new Vector<IssmDouble>(gsize);
+-
+-	/*first, recover x and y vectors from vertices: */
+-	VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
+-
+-	/*call the main module: */
+-	femmodel->Deflection(wg,dwdtg,x,y);
+-
+-	/*assemble vector: */
+-	wg->Assemble();
+-	dwdtg->Assemble();
+-
+-	InputUpdateFromVectorx(femmodel,wg,GiaWEnum,VertexSIdEnum);
+-	InputUpdateFromVectorx(femmodel,dwdtg,GiadWdtEnum,VertexSIdEnum);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		const int outputs[2] = {GiaWEnum,GiadWdtEnum};
+-		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 16518)
+@@ -1,32 +0,0 @@
+-/*!\file: balancethickness_core.cpp
+- * \brief: core of the balancethickness solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void balancethickness_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-
+-	/*activate formulation: */
+-	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+-
+-	/*recover parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	if(VerboseSolution()) _printf0_("call computational core:\n");
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		int outputs = ThicknessEnum;
+-		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/transient_core.cpp	(revision 16518)
+@@ -1,182 +0,0 @@
+-/*!\file: transient_3d_core.cpp
+- * \brief: core of the transient_3d solution 
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <float.h>
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void transient_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	int    i;
+-	IssmDouble starttime,finaltime,dt,yts;
+-	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isdelta18o,isgia;
+-	bool   save_results,dakota_analysis;
+-	bool   time_adapt=false;
+-	int    output_frequency;
+-	int    meshtype,groundingline_migration;
+-	int    numoutputs         = 0;
+-	char** requested_outputs = NULL;
+-
+-
+-	/*intermediary: */
+-	int    step;
+-	IssmDouble time;
+-
+-	//first recover parameters common to all solutions
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+-	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
+-	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
+-	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+-	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
+-	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
+-	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
+-	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
+-	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
+-	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
+-	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
+-	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-
+-	/*initialize: */
+-	step=0;
+-	time=starttime;
+-
+-	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+-	if(dakota_analysis){
+-		if(isstressbalance){
+-			InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
+-			InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
+-			if(meshtype==Mesh3DEnum){
+-				InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
+-				if(isFS)InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
+-			}
+-		}
+-		if(ismasstransport || isgroundingline){
+-			InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
+-			InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
+-			InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
+-			InputDuplicatex(femmodel,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
+-		}
+-		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
+-		if(isthermal && meshtype==Mesh3DEnum){
+-			//Update Vertex Position after updating Thickness and Bed
+-			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+-			femmodel->UpdateVertexPositionsx();
+-			InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
+-			InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
+-			InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
+-			InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
+-			InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
+-			InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
+-			//Reset Thermal Constraints
+-			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
+-			ResetConstraintsx(femmodel);
+-		}
+-	}
+-
+-	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
+-
+-		/*Increment*/
+-		if(time_adapt){
+-			femmodel->TimeAdaptx(&dt);
+-			if(time+dt>finaltime) dt=finaltime-time;
+-			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
+-		}
+-		step+=1;
+-		time+=dt;
+-		femmodel->parameters->SetParam(time,TimeEnum);
+-		femmodel->parameters->SetParam(step,StepEnum);
+-
+-		if(VerboseSolution()) _printf0_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")\n");
+-		if(step%output_frequency==0 || time==finaltime)
+-		 save_results=true;
+-		else
+-		 save_results=false;
+-		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
+-
+-		if(isthermal && meshtype==Mesh3DEnum){
+-			if(VerboseSolution()) _printf0_("   computing temperatures\n");
+-			#ifdef _HAVE_THERMAL_
+-			thermal_core(femmodel);
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-		}
+-
+-		if(isstressbalance){
+-			if(VerboseSolution()) _printf0_("   computing new velocity\n");
+-			#ifdef _HAVE_STRESSBALANCE_
+-			stressbalance_core(femmodel);
+-			#else
+-			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
+-			#endif
+-		}
+-
+-		if(ismasstransport){
+-			if(VerboseSolution()) _printf0_("   computing new thickness\n");
+-			masstransport_core(femmodel);
+-			if(VerboseSolution()) _printf0_("   updating vertices positions\n");
+-			femmodel->UpdateVertexPositionsx();
+-		}
+-
+-		if(isgroundingline){
+-			if(VerboseSolution()) _printf0_("   computing new grounding line position\n");
+-			#ifdef _HAVE_GROUNDINGLINE_
+-			GroundinglineMigrationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-			#else
+-			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
+-			#endif
+-			if(save_results){
+-				int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+-			}
+-		}
+-		if(isgia){
+-			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
+-			#ifdef _HAVE_GIA_
+-			gia_core(femmodel);
+-			#else
+-			_error_("ISSM was not compiled with gia capabilities. Exiting");
+-			#endif
+-
+-		}
+-
+-		/*unload results*/
+-		if(save_results){
+-			if(VerboseSolution()) _printf0_("   saving transient results\n");
+-			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-			if(isdelta18o){
+-				int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-			}
+-			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+-				int outputs[1] = {MaskGroundediceLevelsetEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
+-			}
+-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+-		}
+-	}
+-
+-	femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/	
+-	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+-}
+Index: ../trunk-jpl/src/c/analyses/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 16518)
+@@ -1,77 +0,0 @@
+-/*!\file:  objectivefunction
+- * \brief  objective function that returns a misfit, for a certain parameter.
+- */ 
+-
+-/*include files: {{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-/*}}}*/
+-
+-IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs){
+-
+-	/*output: */
+-	IssmDouble J;
+-
+-	/*parameters: */
+-	int        solution_type,analysis_type;
+-	bool       isFS       = false;
+-	bool       conserve_loads = true;
+-	FemModel  *femmodel       = NULL;
+-
+-	/*Recover finite element model: */
+-	femmodel=optargs->femmodel;
+-
+-	/*Recover parameters: */
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-
+-	/*set analysis type to compute velocity: */
+-	if (solution_type==SteadystateSolutionEnum || solution_type==StressbalanceSolutionEnum){
+-		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+-	}
+-	else if (solution_type==BalancethicknessSolutionEnum){
+-		femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+-	}
+-	else if (solution_type==BalancethicknessSoftSolutionEnum){
+-		femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+-	}
+-	else{
+-		_error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
+-	}
+-
+-	/*update parameter according to scalar: */ //false means: do not save control
+-	InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,false);
+-
+-	/*Run stressbalance with updated inputs: */
+-	if (solution_type==SteadystateSolutionEnum){
+-		stressbalance_core(femmodel);	//We need a 3D velocity!! (vz is required for the next thermal run)
+-	}
+-	else if (solution_type==StressbalanceSolutionEnum){
+-		solutionsequence_nonlinear(femmodel,conserve_loads); 
+-	}
+-	else if (solution_type==BalancethicknessSolutionEnum){
+-		solutionsequence_linear(femmodel); 
+-	}
+-	else if (solution_type==BalancethicknessSoftSolutionEnum){
+-		/*Don't do anything*/
+-	}
+-	else{
+-		_error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
+-	}
+-
+-	/*Compute misfit for this velocity field.*/
+-	femmodel->CostFunctionx(&J);
+-
+-	/*Free ressources:*/
+-	return J;
+-}
+Index: ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 16518)
+@@ -1,27 +0,0 @@
+-/*!\file: ResetBoundaryConditions.cpp
+- * \brief: change boundary conditions of a model, using a solution vector from another analysis
+- */ 
+-
+-#include "../classes/classes.h"
+-#include "../modules/modules.h"
+-#include "../shared/io/io.h"
+-
+-void ResetBoundaryConditions(FemModel* femmodel, int analysis_type){
+-
+-	/*variables: */
+-	Vector<IssmDouble>* yg = NULL;
+-
+-	if(VerboseSolution()) _printf0_("   updating boundary conditions...\n");
+-
+-	/*set current analysis: */
+-	femmodel->SetCurrentConfiguration(analysis_type);
+-
+-	/*retrieve boundary conditions from element inputs :*/
+-	GetSolutionFromInputsx(&yg,femmodel);
+-
+-	/*update spcs using this new vector of constraints: */
+-	UpdateDynamicConstraintsx(femmodel->constraints,femmodel->nodes,femmodel->parameters,yg);
+-
+-	/*Free ressources:*/
+-	delete yg;
+-}
+Index: ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp	(revision 16518)
+@@ -1,25 +0,0 @@
+-/*!\file:  EnvironmentFinalize.cpp
+- * \brief: finalize Petsc, MPI, you name it
+- */ 
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "../toolkits/toolkits.h"
+-#include "../shared/shared.h"
+-
+-void EnvironmentFinalize(void){
+-
+-	int my_rank;
+-
+-	/*Make sure we are all here*/
+-	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD);
+-
+-	/*Print closing statement*/
+-	ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&my_rank);
+-	if(!my_rank) printf("closing MPI\n");
+-
+-	/*Finalize: */
+-	ISSM_MPI_Finalize();
+-}
+Index: ../trunk-jpl/src/c/analyses/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/damage_core.cpp	(revision 16518)
+@@ -1,39 +0,0 @@
+-/* 
+- * \brief: damgage_core.cpp: core for the damage solution
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void damage_core(FemModel* femmodel){
+-
+-	/*intermediary*/
+-	bool   save_results;
+-	bool   dakota_analysis  = false;
+-	int    solution_type;
+-
+-	if(VerboseSolution()) _printf0_("   computing damage\n");
+-	
+-	//first recover parameters common to all solutions
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-
+-	if(dakota_analysis && solution_type!=TransientSolutionEnum){
+-		femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
+-		ResetConstraintsx(femmodel);
+-	}
+-
+-	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		int outputs = DamageDEnum;
+-		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 16518)
+@@ -1,87 +0,0 @@
+-/*!\file: masstransport_core.cpp
+- * \brief: core of the masstransport solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void masstransport_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	int    i;
+-	int    numoutputs,meshtype;
+-	bool   save_results;
+-	bool   issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
+-	int    solution_type;
+-	char** requested_outputs = NULL;
+-
+-	/*activate configuration*/
+-	femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
+-
+-	/*recover parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+-	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+-	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
+-
+-	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+-	if(dakota_analysis && solution_type==MasstransportSolutionEnum){
+-		InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
+-		InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
+-		InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
+-	}
+-
+-	if(issmbgradients){
+-	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
+-	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-	if(ispdd){
+-		if(isdelta18o){
+-			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
+-			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-		} 
+-		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+-		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-
+-	if(isFS && isfreesurface){
+-		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
+-		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-		if(meshtype==Mesh2DverticalEnum){
+-			femmodel->parameters->SetParam(BedEnum,InputToExtrudeEnum);
+-			extrudefrombase_core(femmodel);
+-		}
+-		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-		if(meshtype==Mesh2DverticalEnum){
+-			femmodel->parameters->SetParam(SurfaceEnum,InputToExtrudeEnum);
+-			extrudefromtop_core(femmodel);
+-		}
+-	}
+-	else{
+-		if(VerboseSolution()) _printf0_("   call computational core\n");
+-		solutionsequence_linear(femmodel);
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-	}
+-
+-	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/
+-	if(numoutputs){for(int i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);} 
+-}
+Index: ../trunk-jpl/src/c/analyses/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 16518)
+@@ -1,105 +0,0 @@
+-/*!\file: hydrology_core.cpp
+- * \brief: core of the hydrology solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void hydrology_core(FemModel* femmodel){
+-
+-	int i;
+-
+-	/*intermediary*/
+-	int        step,nsteps;
+-	int        output_frequency,hydrology_model;
+-	bool       save_results;
+-	bool       modify_loads=true;
+-	bool       isefficientlayer;
+-	IssmDouble starttime,final_time;
+-	IssmDouble time,dt;
+-
+-	/*first recover parameters common to all solutions*/
+-	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
+-	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
+-	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
+-	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
+-
+-	/*first compute slopes: */
+-	if (hydrology_model==HydrologyshreveEnum){
+-		surfaceslope_core(femmodel);
+-		bedslope_core(femmodel);
+-	}
+-
+-	/*Compute number of time steps: */
+-	if((dt==0)|| (final_time==0)){
+-		dt=0;
+-		nsteps=1;
+-	}
+-	else nsteps=reCast<int,IssmDouble>((final_time-starttime)/dt);
+-
+-	/*initialize: */
+-	step=0;
+-	time=starttime;
+-
+-	/*Loop through time: */
+-	for(i=0;i<nsteps;i++){
+-
+-		if(nsteps)if(VerboseSolution()) _printf0_("time step:" << i+1 << "/" << nsteps << "\n");
+-		time+=dt;
+-		step+=1;
+-		femmodel->parameters->SetParam(time,TimeEnum);
+-		femmodel->parameters->SetParam(step,StepEnum);
+-
+-		if (hydrology_model==HydrologyshreveEnum){
+-			if(VerboseSolution()) _printf0_("   computing water column\n");
+-			femmodel->SetCurrentConfiguration(HydrologyShreveAnalysisEnum);
+-			solutionsequence_nonlinear(femmodel,modify_loads);
+-
+-			/*transfer water column thickness to old water column thickness: */
+-
+-			InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
+-
+-			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+-				if(VerboseSolution()) _printf0_("   saving results \n");
+-				int outputs[3] = {WatercolumnEnum,HydrologyWaterVxEnum,HydrologyWaterVyEnum};
+-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
+-
+-				/*unload results*/
+-				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+-			}
+-		}
+-
+-		else if (hydrology_model==HydrologydcEnum){
+-			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+-			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-			if (isefficientlayer){
+-				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+-			}
+-
+-			if(VerboseSolution()) _printf0_("   computing water head\n");
+-			solutionsequence_hydro_nonlinear(femmodel);
+-			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
+-				if(VerboseSolution()) _printf0_("   saving results \n");
+-				if(isefficientlayer){
+-					int outputs[4] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum};
+-					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
+-				}
+-				else{
+-					int outputs[2] = {SedimentHeadEnum,SedimentHeadResidualEnum};
+-					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
+-				}
+-				/*unload results*/
+-				if(VerboseSolution()) _printf0_("   saving temporary results\n");
+-				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+-			}
+-		}
+-
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/DakotaSpawnCore.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DakotaSpawnCore.h	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/DakotaSpawnCore.h	(revision 16518)
+@@ -1,4 +0,0 @@
+-#ifndef _DAKOTA_SPAWN_CORE_
+-#define _DAKOTA_SPAWN_CORE_
+-int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+-#endif
+Index: ../trunk-jpl/src/c/analyses/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16518)
+@@ -1,356 +0,0 @@
+-/*!\file ad_core
+- * \brief: compute outputs from the AD mode,  using our dependents and independents, and drivers available in Adolc.
+- */
+-
+-/*Includes: {{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <set>
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-/*}}}*/
+-
+-void ad_core(FemModel* femmodel){
+-
+-	/*diverse: */
+-	int     i;
+-	int     dummy;
+-	int     num_dependents=0;
+-	int     num_independents=0;
+-	bool    isautodiff       = false;
+-	char   *driver           = NULL;
+-	size_t  tape_stats[11];
+-
+-	/*state variables: */
+-	IssmDouble *axp = NULL;
+-	double     *xp  = NULL;
+-	int my_rank=IssmComm::GetRank();
+-
+-	/*AD mode on?: */
+-	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+-
+-	if(isautodiff){
+-
+-		#ifdef _HAVE_ADOLC_
+-			if(VerboseAutodiff())_printf0_("   start ad core\n");
+-
+-			/*First, stop tracing: */
+-			trace_off();
+-		
+-			/*retrieve parameters: */
+-			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-	
+-			/*if no dependents, no point in running a driver: */
+-			if(!(num_dependents*num_independents)) return;
+-
+-			/*for adolc to run in parallel, we 0 out on rank~=0:*/
+-			if (my_rank!=0){
+-				num_dependents=0; num_independents=0;
+-			}
+-			
+-			/*Print tape statistics so that user can kill this run if something is off already:*/
+-			tapestats(my_rank,tape_stats); //reading of tape statistics
+-			if(VerboseAutodiff()){
+-				int commSize=IssmComm::GetSize();
+-				int *sstats=new int[7];
+-				sstats[0]=tape_stats[NUM_OPERATIONS];
+-				sstats[1]=tape_stats[OP_FILE_ACCESS];
+-				sstats[2]=tape_stats[NUM_LOCATIONS];
+-				sstats[3]=tape_stats[LOC_FILE_ACCESS];
+-				sstats[4]=tape_stats[NUM_VALUES];
+-				sstats[5]=tape_stats[VAL_FILE_ACCESS];
+-				sstats[6]=tape_stats[TAY_STACK_SIZE];
+-				int *rstats=NULL;
+-				if (my_rank==0) rstats=new int[commSize*7];
+-				ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
+-				if (my_rank==0) {
+-					int offset=50;
+-					int rOffset=(commSize/10)+1;
+-					_printf_("   ADOLC statistics: \n");
+-					_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
+-					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
+-					_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
+-					for (int r=0;r<commSize;++r)
+-					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
+-					_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
+-					for (int r=0;r<commSize;++r)
+-					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
+-					_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
+-					for (int r=0;r<commSize;++r)
+-					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
+-					_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
+-					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
+-					for (int r=0;r<commSize;++r)
+-					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
+-					delete []rstats;
+-				}
+-				delete [] sstats;
+-			}
+-
+-			/*retrieve state variable: */
+-			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+-
+-			/* driver argument */
+-			xp=xNew<double>(num_independents);
+-			for(i=0;i<num_independents;i++){
+-				xp[i]=reCast<double,IssmDouble>(axp[i]);
+-			}
+-
+-			/*get the EDF pointer:*/
+-			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+-
+-			/*Branch according to AD driver: */
+-			femmodel->parameters->FindParam(&driver,AutodiffDriverEnum);
+-
+-			/* these are always needed regardless of the interpreter */
+-			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-			if (strcmp(driver,"fos_forward")==0){ /*{{{*/
+-
+-				int     anIndepIndex;
+-				double *tangentDir         = NULL;
+-				double *jacTimesTangentDir = NULL;
+-				double *theOutput          = NULL;
+-
+-				/*retrieve direction index: */
+-				femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+-
+-				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
+-
+-				tangentDir=xNewZeroInit<double>(num_independents);
+-				tangentDir[anIndepIndex]=1.0;
+-
+-				jacTimesTangentDir=xNew<double>(num_dependents);
+-				theOutput=xNew<double>(num_dependents);
+-
+-				/*set the forward method function pointer: */
+-#ifdef _HAVE_GSL_
+-				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
+-#endif
+-
+-				/*allocate the space for the parameters to invoke the EDF fos_forward:*/
+-				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-				/*call driver: */
+-				fos_forward(my_rank,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
+-
+-				/*add to results*/
+-				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+-
+-				/*free resources :*/
+-				xDelete(theOutput);
+-				xDelete(jacTimesTangentDir);
+-				xDelete(tangentDir);
+-			} /*}}}*/
+-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){ /*{{{*/
+-
+-				int      tangentDirNum;
+-				int      dummy;
+-				int     *indepIndices  = NULL;
+-				double **jacTimesSeed  = NULL;
+-				double **seed          = NULL;
+-				double  *theOutput     = NULL;
+-				std::set<unsigned int> anIndexSet;
+-
+-				/*retrieve directions:*/
+-				if (strcmp(driver,"fov_forward_all")==0){
+-					tangentDirNum=num_independents;
+-					indepIndices=xNewZeroInit<int>(tangentDirNum);
+-					for(i=0;i<num_independents;i++)indepIndices[i]=1;
+-				}
+-				else{
+-					femmodel->parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
+-				}
+-
+-				/*Some checks: */
+-				if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
+-
+-				/* full Jacobian or Jacobian projection:*/
+-				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-
+-				/*set the forward method function pointers: */
+-#ifdef _HAVE_GSL_
+-				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+-#endif
+-				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+-
+-				/*allocate the space for the parameters to invoke EDF fov_forward:*/
+-				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
+-				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
+-
+-				/*seed matrix: */
+-				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+-
+-				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
+-				for (int i=0; i<tangentDirNum; ++i) {
+-					/* make sure the index is in range*/
+-					if (indepIndices[i]>num_independents) {
+-						_error_("indepIndices values must be in [0,num_independents-1]");
+-					}
+-					if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
+-						_error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
+-					}
+-					anIndexSet.insert(indepIndices[i]);
+-					/* now populate the seed matrix from the set of independent indices;
+-					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
+-					seed[indepIndices[i]][i]=1.0;
+-				}
+-
+-				/*allocate output: */
+-				theOutput=xNew<double>(num_dependents);
+-
+-				/*call driver: */
+-				fov_forward(my_rank,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
+-				/*Free resources: */
+-				xDelete(theOutput);
+-				xDelete(indepIndices);
+-				xDelete(seed);
+-
+-				/*add to results: */
+-				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
+-
+-				/*Free resources: */
+-				xDelete(jacTimesSeed);
+-				xDelete(indepIndices);
+-			} /*}}}*/
+-			else if (strcmp(driver,"fos_reverse")==0) { /*{{{*/
+-
+-				int     aDepIndex=0;
+-				double *aWeightVector=NULL;
+-				double *weightVectorTimesJac=NULL;
+-
+-				/*retrieve direction index: */
+-				femmodel->parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
+-				aWeightVector=xNewZeroInit<double>(num_dependents);
+-				if (my_rank==0) {
+-					if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
+-					aWeightVector[aDepIndex]=1.0;
+-				}
+-				weightVectorTimesJac=xNew<double>(num_independents);
+-
+-				/*set the forward method function pointer: */
+-#ifdef _HAVE_GSL_
+-				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+-#endif
+-#ifdef _HAVE_MUMPS_
+-				anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
+-#endif
+-
+-				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+-				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+-
+-				/*call driver: */
+-				fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+-				if(VerboseAutodiff())_printf0_("   done with fos_reverse\n");
+-
+-				/*add to results*/
+-				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
+-
+-				/*free resources :*/
+-				xDelete(weightVectorTimesJac);
+-				xDelete(aWeightVector);
+-			} /*}}}*/
+-			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){ /*{{{*/
+-
+-				int* depIndices=NULL;
+-				int weightNum;
+-				int dummy;
+-				double **weightsTimesJac=NULL;
+-				double **weights=NULL;
+-				std::set<unsigned int> anIndexSet;
+-
+-				/*retrieve directions:*/
+-				if (strcmp(driver,"fov_reverse_all")==0){
+-					weightNum=num_dependents;
+-					depIndices=xNewZeroInit<int>(weightNum);
+-					for(i=0;i<num_dependents;i++)depIndices[i]=1;
+-				}
+-				else{
+-					femmodel->parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
+-				}
+-
+-				/*Some checks: */
+-				if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
+-
+-				/* full Jacobian or Jacobian projection:*/
+-				weightsTimesJac=xNew<double>(weightNum,num_independents);
+-
+-				/*set the forward method function pointers: */
+-				#ifdef _HAVE_GSL_
+-				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+-				#endif
+-
+-				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+-				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
+-
+-				/*seed matrix: */
+-				weights=xNewZeroInit<double>(weightNum,num_dependents);
+-
+-				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
+-				for (int i=0; i<weightNum; ++i) {
+-					/* make sure the index is in range*/
+-					if (depIndices[i]>num_dependents) {
+-						_error_("depIndices values must be in [0,num_dependents-1]");
+-					}
+-					if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
+-						_error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
+-					}
+-					anIndexSet.insert(depIndices[i]);
+-					/* now populate the seed matrix from the set of independent indices;
+-					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
+-					weights[depIndices[i]][i]=1.0;
+-				}
+-
+-				/*call driver: */
+-				fov_reverse(my_rank,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
+-
+-				/*add to results: */
+-				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
+-
+-				/*Free resources: */
+-				xDelete(weights);
+-				xDelete(weightsTimesJac);
+-				xDelete(depIndices);
+-			} /*}}}*/
+-			else _error_("driver: " << driver << " not yet supported!");
+-
+-			/* delete the allocated space for the parameters:*/
+-			xDelete(anEDF_for_solverx_p->dp_x);
+-			xDelete(anEDF_for_solverx_p->dp_X);
+-			xDelete(anEDF_for_solverx_p->dpp_X);
+-			xDelete(anEDF_for_solverx_p->dp_y);
+-			xDelete(anEDF_for_solverx_p->dp_Y);
+-			xDelete(anEDF_for_solverx_p->dpp_Y);
+-			xDelete(anEDF_for_solverx_p->dp_U);
+-			xDelete(anEDF_for_solverx_p->dpp_U);
+-			xDelete(anEDF_for_solverx_p->dp_Z);
+-			xDelete(anEDF_for_solverx_p->dpp_Z);
+-
+-			if(VerboseAutodiff())_printf0_("   end AD core\n");
+-
+-			/*Free resources: */
+-			xDelete(xp);
+-			xDelete(axp); 
+-			xDelete(driver);
+-		#else
+-			_error_("Should not be requesting AD drivers when an AD library is not available!");
+-		#endif
+-	}
+-}
+Index: ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/meshdeformation_core.cpp	(revision 16518)
+@@ -1,30 +0,0 @@
+-/*!\file: meshdeformation_core.cpp
+- * \brief: core of the slope solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../solutionsequences/solutionsequences.h"
+-#include "../modules/modules.h"
+-
+-void meshdeformation_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool save_results;
+-
+-	/*Recover some parameters: */
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-
+-	if(VerboseSolution()) _printf0_("computing mesh deformation (elasticity)...\n");
+-
+-	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(MeshdeformationAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("saving results:\n");
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/WrapperCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/WrapperCorePointerFromSolutionEnum.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/WrapperCorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -1,57 +0,0 @@
+-/*!\file:  WrapperCorePointerFromSolutionEnum.cpp
+- * \brief: return type of analyses, number of analyses and core solution function.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
+-
+-	/*output: */
+-	void (*solutioncore)(FemModel*)=NULL;
+-
+-	/*parameters: */
+-	bool control_analysis=false;
+-	bool tao_analysis=false;
+-	bool dakota_analysis=false;
+-
+-	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
+-	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
+-	 * carries out adjoint based inversion on a certain core: */
+-	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-	parameters->FindParam(&tao_analysis,InversionTaoEnum);
+-
+-	if(nodakotacore)dakota_analysis=false;
+-
+-	if(dakota_analysis){
+-		#ifdef _HAVE_DAKOTA_
+-		solutioncore=dakota_core;
+-		#else
+-		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
+-		#endif
+-	}
+-	else if(control_analysis){
+-		#ifdef _HAVE_CONTROL_
+-		if(tao_analysis) solutioncore=controltao_core;
+-		else solutioncore=control_core;
+-		#else
+-		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
+-		#endif
+-	}
+-	else CorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
+-
+-	/*Assign output pointer:*/
+-	_assert_(psolutioncore);
+-	*psolutioncore=solutioncore;
+-
+-}
+Index: ../trunk-jpl/src/c/analyses/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 16518)
+@@ -1,97 +0,0 @@
+-/*!\file: stressbalance_core.cpp
+- * \brief: core of the stressbalance solution 
+- */ 
+-
+-#include "./analyses.h"
+-#include "../toolkits/toolkits.h"
+-#include "../classes/classes.h"
+-#include "../shared/shared.h"
+-#include "../modules/modules.h"
+-#include "../solutionsequences/solutionsequences.h"
+-
+-void stressbalance_core(FemModel* femmodel){
+-
+-	/*parameters: */
+-	bool  dakota_analysis;
+-	int   meshtype;
+-	bool  isSIA,isSSA,isL1L2,isHO,isFS;
+-	bool  conserve_loads    = true;
+-	bool  save_results;
+-	int   newton;
+-	int   solution_type;
+-	int   numoutputs        = 0;
+-	char** requested_outputs = NULL;
+-	int    i;
+-
+-
+-	/* recover parameters:*/
+-	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+-	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+-	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
+-	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
+-	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
+-	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
+-	femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&numoutputs,StressbalanceNumRequestedOutputsEnum);
+-	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,StressbalanceRequestedOutputsEnum);
+-
+-	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
+-	if(dakota_analysis && solution_type==StressbalanceSolutionEnum){
+-		InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
+-		InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
+-		InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
+-		if(isFS) InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
+-	}
+-
+-	/*Compute slopes: */
+-	if(isSIA) surfaceslope_core(femmodel);
+-	if(isFS){
+-		bedslope_core(femmodel);
+-		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+-		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	}
+-
+-	if(isSIA){
+-		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
+-
+-		/*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
+-		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,StressbalanceSIAAnalysisEnum);
+-		femmodel->SetCurrentConfiguration(StressbalanceSIAAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,StressbalanceAnalysisEnum);
+-	}
+-
+-	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
+-		if(VerboseSolution()) _printf0_("   computing velocities\n");
+-
+-		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
+-		if(newton>0)
+-		 solutionsequence_newton(femmodel);
+-		else
+-		 solutionsequence_nonlinear(femmodel,conserve_loads); 
+-	}
+-
+-	if ((isSSA || isL1L2 || isHO) && isFS){
+-		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
+-		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
+-	}
+-
+-	if (meshtype==Mesh3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
+-		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
+-		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
+-		solutionsequence_linear(femmodel);
+-	}
+-
+-	if(save_results){
+-		if(VerboseSolution()) _printf0_("   saving results\n");
+-		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+-	}
+-
+-	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
+-
+-	/*Free ressources:*/	
+-	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
+-}
+Index: ../trunk-jpl/src/c/main/issm.h
+===================================================================
+--- ../trunk-jpl/src/c/main/issm.h	(revision 16517)
++++ ../trunk-jpl/src/c/main/issm.h	(revision 16518)
+@@ -15,8 +15,12 @@
+ #include "../shared/shared.h"
+ #include "../classes/classes.h"
+ #include "../toolkits/toolkits.h"
+-#include "../analyses/analyses.h"
++#include "../cores/cores.h"
+ #include "../solutionsequences/solutionsequences.h"
+ #include "../modules/modules.h"
+ 
++/*Environment*/
++ISSM_MPI_Comm EnvironmentInit(int argc,char** argv);
++void EnvironmentFinalize(void);
++
+ #endif //ifndef _ISSM_H_
+Index: ../trunk-jpl/src/c/main/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/EnvironmentFinalize.cpp	(revision 0)
++++ ../trunk-jpl/src/c/main/EnvironmentFinalize.cpp	(revision 16518)
+@@ -0,0 +1,25 @@
++/*!\file:  EnvironmentFinalize.cpp
++ * \brief: finalize Petsc, MPI, you name it
++ */ 
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "../toolkits/toolkits.h"
++#include "../shared/shared.h"
++
++void EnvironmentFinalize(void){
++
++	int my_rank;
++
++	/*Make sure we are all here*/
++	ISSM_MPI_Barrier(ISSM_MPI_COMM_WORLD);
++
++	/*Print closing statement*/
++	ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&my_rank);
++	if(!my_rank) printf("closing MPI\n");
++
++	/*Finalize: */
++	ISSM_MPI_Finalize();
++}
+Index: ../trunk-jpl/src/c/main/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/main/EnvironmentInit.cpp	(revision 0)
++++ ../trunk-jpl/src/c/main/EnvironmentInit.cpp	(revision 16518)
+@@ -0,0 +1,35 @@
++/*!\file:  EnvironmentInit.cpp
++ * \brief: initialize Petsc, MPI, you name it
++ */ 
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include <stdio.h>
++#include "../toolkits/toolkits.h"
++
++ISSM_MPI_Comm EnvironmentInit(int argc,char** argv){
++
++	/*Output*/
++	ISSM_MPI_Comm comm = 0;
++
++	/*Initialize MPI environment: */
++	#if defined(_HAVE_MPI_)
++	ISSM_MPI_Init(&argc,&argv);
++	comm = ISSM_MPI_COMM_WORLD;
++	#else
++	comm = 1; //bogus number for comm, which does not exist anyway.
++	#endif
++
++	/*Print Banner*/
++	int my_rank = 0;
++	ISSM_MPI_Comm_rank(comm,&my_rank);
++	if(!my_rank) printf("\n");
++	if(!my_rank) printf("%s version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
++	if(!my_rank) printf("(website: %s contact: %s)\n",PACKAGE_URL,PACKAGE_BUGREPORT);
++	if(!my_rank) printf("\n");
++
++	/*Return communicator*/
++	return comm;
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16517)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16518)
+@@ -329,14 +329,14 @@
+ 					./modules/VecMergex/VecMergex.h\
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h\
+-					./analyses/ProcessArguments.cpp\
+-					./analyses/ResetBoundaryConditions.cpp\
+-					./analyses/AnalysisConfiguration.cpp\
+-					./analyses/WrapperCorePointerFromSolutionEnum.cpp\
+-					./analyses/CorePointerFromSolutionEnum.cpp\
+-					./analyses/EnvironmentInit.cpp\
+-					./analyses/EnvironmentFinalize.cpp\
+-					./analyses/ad_core.cpp\
++					./cores/ProcessArguments.cpp\
++					./cores/ResetBoundaryConditions.cpp\
++					./cores/AnalysisConfiguration.cpp\
++					./cores/WrapperCorePointerFromSolutionEnum.cpp\
++					./cores/CorePointerFromSolutionEnum.cpp\
++					./cores/ad_core.cpp\
++					./main/EnvironmentInit.cpp\
++					./main/EnvironmentFinalize.cpp\
+ 					./solutionsequences/solutionsequence_linear.cpp\
+ 					./solutionsequences/solutionsequence_nonlinear.cpp\
+ 					./solutionsequences/solutionsequence_newton.cpp\
+@@ -361,16 +361,16 @@
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.h\
+ 					  ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp\
+ 					  ./modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp\
+-					  ./analyses/dakota_core.cpp\
+-					  ./analyses/DakotaSpawnCore.h\
+-					  ./analyses/DakotaSpawnCore.cpp
++					  ./cores/dakota_core.cpp\
++					  ./cores/DakotaSpawnCore.h\
++					  ./cores/DakotaSpawnCore.cpp
+ #}}}
+ #Transient sources  {{{
+ transient_sources  = ./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp \
+-							./analyses/transient_core.cpp
++							./cores/transient_core.cpp
+ #}}}
+ #Steadystate sources  {{{
+-steadystate_sources = ./analyses/steadystate_core.cpp
++steadystate_sources = ./cores/steadystate_core.cpp
+ #}}}
+ #Masstransport sources  {{{
+ masstransport_sources = ./modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp\
+@@ -393,9 +393,9 @@
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp \
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp\
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp\
+-								./analyses/masstransport_core.cpp\
+-								./analyses/extrudefrombase_core.cpp\
+-								./analyses/extrudefromtop_core.cpp
++								./cores/masstransport_core.cpp\
++								./cores/extrudefrombase_core.cpp\
++								./cores/extrudefromtop_core.cpp
+ 
+ #}}}
+ #Thermal sources  {{{
+@@ -413,7 +413,7 @@
+ 					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+-					   ./analyses/thermal_core.cpp\
++					   ./cores/thermal_core.cpp\
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
+ #}}}
+ #Control sources  {{{
+@@ -459,13 +459,13 @@
+ 					  ./classes/Inputs/ControlInput.cpp\
+ 					  ./shared/Numerics/BrentSearch.cpp\
+ 					  ./shared/Numerics/OptimalSearch.cpp \
+-					  ./analyses/control_core.cpp\
+-					  ./analyses/controltao_core.cpp\
+-					  ./analyses/objectivefunction.cpp\
+-					  ./analyses/gradient_core.cpp\
+-					  ./analyses/adjointstressbalance_core.cpp\
+-					  ./analyses/adjointbalancethickness_core.cpp\
+-					  ./analyses/AdjointCorePointerFromSolutionEnum.cpp\
++					  ./cores/control_core.cpp\
++					  ./cores/controltao_core.cpp\
++					  ./cores/objectivefunction.cpp\
++					  ./cores/gradient_core.cpp\
++					  ./cores/adjointstressbalance_core.cpp\
++					  ./cores/adjointbalancethickness_core.cpp\
++					  ./cores/AdjointCorePointerFromSolutionEnum.cpp\
+ 					  ./solutionsequences/solutionsequence_adjoint_linear.cpp
+ 
+ #}}}
+@@ -485,7 +485,7 @@
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp\
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp \
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp \
+-							./analyses/hydrology_core.cpp\
++							./cores/hydrology_core.cpp\
+ 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp
+ #}}}
+ #Stressbalance sources  {{{
+@@ -502,7 +502,7 @@
+ 					      ./modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp \
+ 					      ./modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp \
+ 							./modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp \
+-							./analyses/stressbalance_core.cpp\
++							./cores/stressbalance_core.cpp\
+ 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+ #}}}
+ #Balanced sources  {{{
+@@ -514,9 +514,9 @@
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp\
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp\
+-						 ./analyses/balancethickness_core.cpp \
+-						 ./analyses/balancevelocity_core.cpp \
+-						 ./analyses/dummy_core.cpp
++						 ./cores/balancethickness_core.cpp \
++						 ./cores/balancevelocity_core.cpp \
++						 ./cores/dummy_core.cpp
+ #}}}
+ #Slope sources  {{{
+ slope_sources =  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp\
+@@ -527,18 +527,18 @@
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp \
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp\
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp\
+-					  ./analyses/surfaceslope_core.cpp\
+-					  ./analyses/bedslope_core.cpp
++					  ./cores/surfaceslope_core.cpp\
++					  ./cores/bedslope_core.cpp
+ #}}}
+ #MeshDeformation sources  {{{
+ meshdeformation_sources =  ./modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp\
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
+-					  ./analyses/meshdeformation_core.cpp
++					  ./cores/meshdeformation_core.cpp
+ #}}}
+ #Gia sources  {{{
+-gia_sources =  ./analyses/gia_core.cpp\
++gia_sources =  ./cores/gia_core.cpp\
+ 					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
+ 					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp \
+ 					./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp\
+@@ -556,7 +556,7 @@
+ 
+ #}}}
+ #Damage sources  {{{
+-damage_sources =  ./analyses/damage_core.cpp\
++damage_sources =  ./cores/damage_core.cpp\
+ 					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+ 					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+ 					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
+Index: ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/extrudefromtop_core.cpp	(revision 16518)
+@@ -0,0 +1,21 @@
++/*!\file: extrudefromtop_core.cpp
++ * \brief: core of the extrusion solution
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void extrudefromtop_core(FemModel* femmodel){
++
++	if(VerboseSolution()) _printf0_("extruding solution from top...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(ExtrudeFromTopAnalysisEnum);
++	femmodel->UpdateConstraintsExtrudeFromTopx();
++	solutionsequence_linear(femmodel);
++
++}
+Index: ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -0,0 +1,127 @@
++/*!\file:  CorePointerFromSolutionEnum.cpp
++ * \brief: return type of analyses, number of analyses and core solution function.
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
++
++	/*output: */
++	void (*solutioncore)(FemModel*)=NULL;
++
++	switch(solutiontype){
++
++		case StressbalanceSolutionEnum:
++			#ifdef _HAVE_STRESSBALANCE_
++			solutioncore=&stressbalance_core;
++			#else
++			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
++			#endif
++			break;
++		case SteadystateSolutionEnum:
++			#ifdef _HAVE_STEADYSTATE_
++			solutioncore=&steadystate_core;
++			#else
++			_error_("ISSM was not compiled with steady state capabilities. Exiting");
++			#endif
++			break;
++		case ThermalSolutionEnum:
++			#ifdef _HAVE_THERMAL_
++			solutioncore=&thermal_core;
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++			break;
++		case BalancethicknessSolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&balancethickness_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
++		case BalancethicknessSoftSolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&dummy_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
++		case BalancevelocitySolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&balancevelocity_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
++		case HydrologySolutionEnum:
++			#ifdef _HAVE_HYDROLOGY_
++			solutioncore=&hydrology_core;
++			#else
++			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
++			#endif
++			break;
++		case SurfaceSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&surfaceslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case BedSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&bedslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case TransientSolutionEnum:
++			#ifdef _HAVE_TRANSIENT_
++			solutioncore=&transient_core;
++			#else
++			_error_("ISSM was not compiled with transient capabilities. Exiting");
++			#endif
++			break;
++		case MasstransportSolutionEnum:
++			#ifdef _HAVE_MASSTRANSPORT_
++			solutioncore=&masstransport_core;
++			#else
++			_error_("ISSM was not compiled with masstransport capabilities. Exiting");
++			#endif
++			break;
++
++		case GiaSolutionEnum:
++			#ifdef _HAVE_GIA_
++			solutioncore=&gia_core;
++			#else
++			_error_("ISSM was not compiled with gia capabilities. Exiting");
++			#endif
++			break;
++		case DamageEvolutionSolutionEnum:
++			#ifdef _HAVE_DAMAGE_
++			solutioncore=&damage_core;
++			#else
++			_error_("ISSM was not compiled with damage evolution capabilities. Exiting");
++			#endif
++			break;
++
++		default:
++			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
++			break;
++	}
++
++	/*Assign output pointer:*/
++	_assert_(psolutioncore);
++	*psolutioncore=solutioncore;
++
++}
+Index: ../trunk-jpl/src/c/cores/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/surfaceslope_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/surfaceslope_core.cpp	(revision 16518)
+@@ -0,0 +1,43 @@
++/*!\file: surfaceslope_core.cpp
++ * \brief: core of the slope solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void surfaceslope_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++	int  meshtype;
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
++
++	if(VerboseSolution()) _printf0_("computing slope...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeXAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("saving results:\n");
++		if(meshtype!=Mesh2DverticalEnum){
++			int outputs[2] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++
++		}
++		else{
++			int outputs = SurfaceSlopeXEnum;
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
++		}
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/dummy_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/dummy_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/dummy_core.cpp	(revision 16518)
+@@ -0,0 +1,11 @@
++/*!\file: dummy_core.cpp
++ * \brief: dummy core (nothing done)
++ */ 
++
++class FemModel;
++
++void dummy_core(FemModel* femmodel){
++
++	/*We do not do anything*/
++
++}
+Index: ../trunk-jpl/src/c/cores/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/thermal_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/thermal_core.cpp	(revision 16518)
+@@ -0,0 +1,65 @@
++/*!\file: thermal_core.cpp
++ * \brief: core of the thermal solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void thermal_core(FemModel* femmodel){
++
++	/*intermediary*/
++	bool   save_results,isenthalpy;
++	bool   dakota_analysis;
++	int    solution_type,numoutputs;
++	char** requested_outputs = NULL;
++
++	/*first recover parameters common to all solutions*/
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	femmodel->parameters->FindParam(&numoutputs,ThermalNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,ThermalRequestedOutputsEnum);
++
++	if(dakota_analysis && solution_type!=TransientSolutionEnum){
++		InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
++		InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
++		InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
++		InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
++		InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
++		InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
++		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
++		ResetConstraintsx(femmodel);
++	}
++
++	if(isenthalpy){
++
++		if(VerboseSolution()) _printf0_("   computing enthalpy\n");
++		femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum);
++		solutionsequence_nonlinear(femmodel,true);
++
++		/*transfer enthalpy to enthalpy picard for the next step: */
++		InputDuplicatex(femmodel,EnthalpyEnum,EnthalpyPicardEnum);
++
++		/*Post process*/
++		if(solution_type!=SteadystateSolutionEnum) PostprocessingEnthalpyx(femmodel);
++	}
++	else{
++		if(VerboseSolution()) _printf0_("   computing temperatures\n");
++		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
++		solutionsequence_thermal_nonlinear(femmodel);
++
++		if(VerboseSolution()) _printf0_("   computing melting\n");
++		femmodel->SetCurrentConfiguration(MeltingAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++	}
++}
+Index: ../trunk-jpl/src/c/cores/gradient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/gradient_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/gradient_core.cpp	(revision 16518)
+@@ -0,0 +1,48 @@
++/*!\file:  gradient_core.cpp
++ * \brief compute inverse method gradient direction.
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void gradient_core(FemModel* femmodel,int step,bool orthogonalize){ 
++
++	/*Intermediaries*/
++	IssmDouble  norm_inf;
++	IssmDouble *norm_list    = NULL;
++	Vector<IssmDouble>*     new_gradient = NULL;
++	Vector<IssmDouble>*     gradient     = NULL;
++	Vector<IssmDouble>*     old_gradient = NULL;
++
++	/*Compute gradient*/
++	if(VerboseControl()) _printf0_("   compute cost function gradient\n");
++	Gradjx(&gradient,&norm_list,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
++
++	if (orthogonalize){
++		if(VerboseControl()) _printf0_("   orthogonalization\n");
++		ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
++		Orthx(&new_gradient,gradient,old_gradient); delete old_gradient; delete gradient;
++	}
++	else{ 
++		new_gradient=gradient;
++	}
++
++	/*Check that gradient is clean*/
++	norm_inf=new_gradient->Norm(NORM_INF);
++	if(norm_inf<=0)    _error_("||∂J/∂α||∞ = 0    gradient norm is zero");
++	if(xIsNan<IssmDouble>(norm_inf))_error_("||∂J/∂α||∞ = NaN  gradient norm is NaN");
++
++	/*plug back into inputs: */
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,new_gradient);
++	delete new_gradient;
++
++	/*Scale Gradients*/
++	ControlInputScaleGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,norm_list,step);
++
++	/*Clean up and return*/
++	xDelete<IssmDouble>(norm_list);
++}
+Index: ../trunk-jpl/src/c/cores/gia_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/gia_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/gia_core.cpp	(revision 16518)
+@@ -0,0 +1,56 @@
++/*!\file: gia_core.cpp
++ * \brief: core of the GIA solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++void gia_core(FemModel* femmodel){
++
++	Vector<IssmDouble> *wg    = NULL;
++	Vector<IssmDouble> *dwdtg = NULL;
++	IssmDouble          *x    = NULL;
++	IssmDouble          *y    = NULL;
++
++	/*parameters: */
++	bool save_results;
++	int  gsize;
++	int  configuration_type;
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++
++	if(VerboseSolution()) _printf0_("   computing GIA\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(GiaAnalysisEnum);
++
++	/*Figure out size of g-set deflection vector and allocate solution vector: */
++	gsize      = femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
++	wg = new Vector<IssmDouble>(gsize);
++	dwdtg = new Vector<IssmDouble>(gsize);
++
++	/*first, recover x and y vectors from vertices: */
++	VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
++
++	/*call the main module: */
++	femmodel->Deflection(wg,dwdtg,x,y);
++
++	/*assemble vector: */
++	wg->Assemble();
++	dwdtg->Assemble();
++
++	InputUpdateFromVectorx(femmodel,wg,GiaWEnum,VertexSIdEnum);
++	InputUpdateFromVectorx(femmodel,dwdtg,GiadWdtEnum,VertexSIdEnum);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		const int outputs[2] = {GiaWEnum,GiadWdtEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/AdjointCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/AdjointCorePointerFromSolutionEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/AdjointCorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -0,0 +1,46 @@
++/*!\file:  AdjointCorePointerFromSolutionEnum.cpp
++ * \brief: return type of analyses, number of analyses and core solution function.
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype){
++
++	/*output: */
++	void (*adjointcore)(FemModel*)=NULL;
++
++	switch(solutiontype){
++
++		case StressbalanceSolutionEnum:
++			adjointcore=&adjointstressbalance_core;
++			break;
++		case SteadystateSolutionEnum:
++			adjointcore=&adjointstressbalance_core;
++			break;
++		case BalancethicknessSolutionEnum:
++			adjointcore=&adjointbalancethickness_core;
++			break;
++		case BalancethicknessSoftSolutionEnum:
++			adjointcore=&dummy_core;
++			break;
++		default:
++			_error_("No adjoint has been implemented for solution " << EnumToStringx(solutiontype) << " yet");
++			break;
++	}
++
++	/*Assign output pointer:*/
++	_assert_(padjointcore);
++	*padjointcore=adjointcore;
++
++}
+Index: ../trunk-jpl/src/c/cores/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/balancethickness_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/balancethickness_core.cpp	(revision 16518)
+@@ -0,0 +1,32 @@
++/*!\file: balancethickness_core.cpp
++ * \brief: core of the balancethickness solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void balancethickness_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++	/*activate formulation: */
++	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	if(VerboseSolution()) _printf0_("call computational core:\n");
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		int outputs = ThicknessEnum;
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/transient_core.cpp	(revision 16518)
+@@ -0,0 +1,182 @@
++/*!\file: transient_3d_core.cpp
++ * \brief: core of the transient_3d solution 
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <float.h>
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void transient_core(FemModel* femmodel){
++
++	/*parameters: */
++	int    i;
++	IssmDouble starttime,finaltime,dt,yts;
++	bool   isstressbalance,ismasstransport,isFS,isthermal,isgroundingline,isdelta18o,isgia;
++	bool   save_results,dakota_analysis;
++	bool   time_adapt=false;
++	int    output_frequency;
++	int    meshtype,groundingline_migration;
++	int    numoutputs         = 0;
++	char** requested_outputs = NULL;
++
++
++	/*intermediary: */
++	int    step;
++	IssmDouble time;
++
++	//first recover parameters common to all solutions
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
++	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
++	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
++	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
++	femmodel->parameters->FindParam(&time_adapt,TimesteppingTimeAdaptEnum);
++	femmodel->parameters->FindParam(&isstressbalance,TransientIsstressbalanceEnum);
++	femmodel->parameters->FindParam(&ismasstransport,TransientIsmasstransportEnum);
++	femmodel->parameters->FindParam(&isthermal,TransientIsthermalEnum);
++	femmodel->parameters->FindParam(&isgia,TransientIsgiaEnum);
++	femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
++	femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
++	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++
++	/*initialize: */
++	step=0;
++	time=starttime;
++
++	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
++	if(dakota_analysis){
++		if(isstressbalance){
++			InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
++			InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
++			if(meshtype==Mesh3DEnum){
++				InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
++				if(isFS)InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
++			}
++		}
++		if(ismasstransport || isgroundingline){
++			InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
++			InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
++			InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
++			InputDuplicatex(femmodel,QmuMaskIceLevelsetEnum,MaskIceLevelsetEnum);
++		}
++		if(isgroundingline) InputDuplicatex(femmodel,QmuMaskGroundediceLevelsetEnum,MaskGroundediceLevelsetEnum);
++		if(isthermal && meshtype==Mesh3DEnum){
++			//Update Vertex Position after updating Thickness and Bed
++			femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
++			femmodel->UpdateVertexPositionsx();
++			InputDuplicatex(femmodel,QmuVxMeshEnum,VxMeshEnum);
++			InputDuplicatex(femmodel,QmuVyMeshEnum,VyMeshEnum);
++			InputDuplicatex(femmodel,QmuVzMeshEnum,VzMeshEnum);
++			InputDuplicatex(femmodel,QmuTemperatureEnum,TemperatureEnum);
++			InputDuplicatex(femmodel,QmuMeltingEnum,BasalforcingsMeltingRateEnum);
++			InputDuplicatex(femmodel,QmuMaterialsRheologyBEnum,MaterialsRheologyBEnum);
++			//Reset Thermal Constraints
++			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
++			ResetConstraintsx(femmodel);
++		}
++	}
++
++	while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
++
++		/*Increment*/
++		if(time_adapt){
++			femmodel->TimeAdaptx(&dt);
++			if(time+dt>finaltime) dt=finaltime-time;
++			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
++		}
++		step+=1;
++		time+=dt;
++		femmodel->parameters->SetParam(time,TimeEnum);
++		femmodel->parameters->SetParam(step,StepEnum);
++
++		if(VerboseSolution()) _printf0_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")\n");
++		if(step%output_frequency==0 || time==finaltime)
++		 save_results=true;
++		else
++		 save_results=false;
++		femmodel->parameters->SetParam(save_results,SaveResultsEnum);
++
++		if(isthermal && meshtype==Mesh3DEnum){
++			if(VerboseSolution()) _printf0_("   computing temperatures\n");
++			#ifdef _HAVE_THERMAL_
++			thermal_core(femmodel);
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++		}
++
++		if(isstressbalance){
++			if(VerboseSolution()) _printf0_("   computing new velocity\n");
++			#ifdef _HAVE_STRESSBALANCE_
++			stressbalance_core(femmodel);
++			#else
++			_error_("ISSM was not compiled with stressbalance capabilities. Exiting");
++			#endif
++		}
++
++		if(ismasstransport){
++			if(VerboseSolution()) _printf0_("   computing new thickness\n");
++			masstransport_core(femmodel);
++			if(VerboseSolution()) _printf0_("   updating vertices positions\n");
++			femmodel->UpdateVertexPositionsx();
++		}
++
++		if(isgroundingline){
++			if(VerboseSolution()) _printf0_("   computing new grounding line position\n");
++			#ifdef _HAVE_GROUNDINGLINE_
++			GroundinglineMigrationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++			#else
++			_error_("ISSM was not compiled with grounding line migration capabilities. Exiting");
++			#endif
++			if(save_results){
++				int outputs[3] = {SurfaceEnum,BedEnum,MaskGroundediceLevelsetEnum};
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
++			}
++		}
++		if(isgia){
++			if(VerboseSolution()) _printf0_("   computing glacial isostatic adjustment\n");
++			#ifdef _HAVE_GIA_
++			gia_core(femmodel);
++			#else
++			_error_("ISSM was not compiled with gia capabilities. Exiting");
++			#endif
++
++		}
++
++		/*unload results*/
++		if(save_results){
++			if(VerboseSolution()) _printf0_("   saving transient results\n");
++			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++			if(isdelta18o){
++				int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++			}
++			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
++				int outputs[1] = {MaskGroundediceLevelsetEnum};
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
++			}
++			if(VerboseSolution()) _printf0_("   saving temporary results\n");
++			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
++		}
++	}
++
++	femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
++}
+Index: ../trunk-jpl/src/c/cores/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/objectivefunction.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/objectivefunction.cpp	(revision 16518)
+@@ -0,0 +1,77 @@
++/*!\file:  objectivefunction
++ * \brief  objective function that returns a misfit, for a certain parameter.
++ */ 
++
++/*include files: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++/*}}}*/
++
++IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs){
++
++	/*output: */
++	IssmDouble J;
++
++	/*parameters: */
++	int        solution_type,analysis_type;
++	bool       isFS       = false;
++	bool       conserve_loads = true;
++	FemModel  *femmodel       = NULL;
++
++	/*Recover finite element model: */
++	femmodel=optargs->femmodel;
++
++	/*Recover parameters: */
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++
++	/*set analysis type to compute velocity: */
++	if (solution_type==SteadystateSolutionEnum || solution_type==StressbalanceSolutionEnum){
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++	}
++	else if (solution_type==BalancethicknessSolutionEnum){
++		femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
++	}
++	else if (solution_type==BalancethicknessSoftSolutionEnum){
++		femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
++	}
++	else{
++		_error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
++	}
++
++	/*update parameter according to scalar: */ //false means: do not save control
++	InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,false);
++
++	/*Run stressbalance with updated inputs: */
++	if (solution_type==SteadystateSolutionEnum){
++		stressbalance_core(femmodel);	//We need a 3D velocity!! (vz is required for the next thermal run)
++	}
++	else if (solution_type==StressbalanceSolutionEnum){
++		solutionsequence_nonlinear(femmodel,conserve_loads); 
++	}
++	else if (solution_type==BalancethicknessSolutionEnum){
++		solutionsequence_linear(femmodel); 
++	}
++	else if (solution_type==BalancethicknessSoftSolutionEnum){
++		/*Don't do anything*/
++	}
++	else{
++		_error_("Solution " << EnumToStringx(solution_type) << " not implemented yet");
++	}
++
++	/*Compute misfit for this velocity field.*/
++	femmodel->CostFunctionx(&J);
++
++	/*Free ressources:*/
++	return J;
++}
+Index: ../trunk-jpl/src/c/cores/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ResetBoundaryConditions.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/ResetBoundaryConditions.cpp	(revision 16518)
+@@ -0,0 +1,27 @@
++/*!\file: ResetBoundaryConditions.cpp
++ * \brief: change boundary conditions of a model, using a solution vector from another analysis
++ */ 
++
++#include "../classes/classes.h"
++#include "../modules/modules.h"
++#include "../shared/io/io.h"
++
++void ResetBoundaryConditions(FemModel* femmodel, int analysis_type){
++
++	/*variables: */
++	Vector<IssmDouble>* yg = NULL;
++
++	if(VerboseSolution()) _printf0_("   updating boundary conditions...\n");
++
++	/*set current analysis: */
++	femmodel->SetCurrentConfiguration(analysis_type);
++
++	/*retrieve boundary conditions from element inputs :*/
++	GetSolutionFromInputsx(&yg,femmodel);
++
++	/*update spcs using this new vector of constraints: */
++	UpdateDynamicConstraintsx(femmodel->constraints,femmodel->nodes,femmodel->parameters,yg);
++
++	/*Free ressources:*/
++	delete yg;
++}
+Index: ../trunk-jpl/src/c/cores/damage_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/damage_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/damage_core.cpp	(revision 16518)
+@@ -0,0 +1,39 @@
++/* 
++ * \brief: damgage_core.cpp: core for the damage solution
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void damage_core(FemModel* femmodel){
++
++	/*intermediary*/
++	bool   save_results;
++	bool   dakota_analysis  = false;
++	int    solution_type;
++
++	if(VerboseSolution()) _printf0_("   computing damage\n");
++	
++	//first recover parameters common to all solutions
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++
++	if(dakota_analysis && solution_type!=TransientSolutionEnum){
++		femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
++		ResetConstraintsx(femmodel);
++	}
++
++	femmodel->SetCurrentConfiguration(DamageEvolutionAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		int outputs = DamageDEnum;
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs,1);
++	}
++}
+Index: ../trunk-jpl/src/c/cores/masstransport_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/masstransport_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/masstransport_core.cpp	(revision 16518)
+@@ -0,0 +1,87 @@
++/*!\file: masstransport_core.cpp
++ * \brief: core of the masstransport solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void masstransport_core(FemModel* femmodel){
++
++	/*parameters: */
++	int    i;
++	int    numoutputs,meshtype;
++	bool   save_results;
++	bool   issmbgradients,ispdd,isdelta18o,isFS,isfreesurface,dakota_analysis;
++	int    solution_type;
++	char** requested_outputs = NULL;
++
++	/*activate configuration*/
++	femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum);
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
++	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&isfreesurface,MasstransportIsfreesurfaceEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,MasstransportNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,MasstransportRequestedOutputsEnum);
++
++	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
++	if(dakota_analysis && solution_type==MasstransportSolutionEnum){
++		InputDuplicatex(femmodel,QmuSurfaceEnum,SurfaceEnum);
++		InputDuplicatex(femmodel,QmuThicknessEnum,ThicknessEnum);
++		InputDuplicatex(femmodel,QmuBedEnum,BedEnum);
++	}
++
++	if(issmbgradients){
++	  if(VerboseSolution())_printf_("	call smb gradients module\n\n");
++	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++	if(ispdd){
++		if(isdelta18o){
++			if(VerboseSolution()) _printf0_("   call Delta18oParametrization module\n");
++			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		} 
++		if(VerboseSolution()) _printf0_("   call positive degree day module\n");
++		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++
++	if(isFS && isfreesurface){
++		if(VerboseSolution()) _printf0_("   call free surface computational core\n");
++		femmodel->SetCurrentConfiguration(FreeSurfaceBaseAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		if(meshtype==Mesh2DverticalEnum){
++			femmodel->parameters->SetParam(BedEnum,InputToExtrudeEnum);
++			extrudefrombase_core(femmodel);
++		}
++		femmodel->SetCurrentConfiguration(FreeSurfaceTopAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		if(meshtype==Mesh2DverticalEnum){
++			femmodel->parameters->SetParam(SurfaceEnum,InputToExtrudeEnum);
++			extrudefromtop_core(femmodel);
++		}
++	}
++	else{
++		if(VerboseSolution()) _printf0_("   call computational core\n");
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++	}
++
++	if(solution_type==MasstransportSolutionEnum)femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/
++	if(numoutputs){for(int i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);} 
++}
+Index: ../trunk-jpl/src/c/cores/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 16518)
+@@ -0,0 +1,105 @@
++/*!\file: hydrology_core.cpp
++ * \brief: core of the hydrology solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void hydrology_core(FemModel* femmodel){
++
++	int i;
++
++	/*intermediary*/
++	int        step,nsteps;
++	int        output_frequency,hydrology_model;
++	bool       save_results;
++	bool       modify_loads=true;
++	bool       isefficientlayer;
++	IssmDouble starttime,final_time;
++	IssmDouble time,dt;
++
++	/*first recover parameters common to all solutions*/
++	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
++	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
++	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
++	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
++
++	/*first compute slopes: */
++	if (hydrology_model==HydrologyshreveEnum){
++		surfaceslope_core(femmodel);
++		bedslope_core(femmodel);
++	}
++
++	/*Compute number of time steps: */
++	if((dt==0)|| (final_time==0)){
++		dt=0;
++		nsteps=1;
++	}
++	else nsteps=reCast<int,IssmDouble>((final_time-starttime)/dt);
++
++	/*initialize: */
++	step=0;
++	time=starttime;
++
++	/*Loop through time: */
++	for(i=0;i<nsteps;i++){
++
++		if(nsteps)if(VerboseSolution()) _printf0_("time step:" << i+1 << "/" << nsteps << "\n");
++		time+=dt;
++		step+=1;
++		femmodel->parameters->SetParam(time,TimeEnum);
++		femmodel->parameters->SetParam(step,StepEnum);
++
++		if (hydrology_model==HydrologyshreveEnum){
++			if(VerboseSolution()) _printf0_("   computing water column\n");
++			femmodel->SetCurrentConfiguration(HydrologyShreveAnalysisEnum);
++			solutionsequence_nonlinear(femmodel,modify_loads);
++
++			/*transfer water column thickness to old water column thickness: */
++
++			InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum);
++
++			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
++				if(VerboseSolution()) _printf0_("   saving results \n");
++				int outputs[3] = {WatercolumnEnum,HydrologyWaterVxEnum,HydrologyWaterVyEnum};
++				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
++
++				/*unload results*/
++				if(VerboseSolution()) _printf0_("   saving temporary results\n");
++				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
++			}
++		}
++
++		else if (hydrology_model==HydrologydcEnum){
++			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
++			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++			if (isefficientlayer){
++				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
++			}
++
++			if(VerboseSolution()) _printf0_("   computing water head\n");
++			solutionsequence_hydro_nonlinear(femmodel);
++			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
++				if(VerboseSolution()) _printf0_("   saving results \n");
++				if(isefficientlayer){
++					int outputs[4] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum};
++					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
++				}
++				else{
++					int outputs[2] = {SedimentHeadEnum,SedimentHeadResidualEnum};
++					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++				}
++				/*unload results*/
++				if(VerboseSolution()) _printf0_("   saving temporary results\n");
++				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
++			}
++		}
++
++	}
++}
+Index: ../trunk-jpl/src/c/cores/DakotaSpawnCore.h
+===================================================================
+--- ../trunk-jpl/src/c/cores/DakotaSpawnCore.h	(revision 0)
++++ ../trunk-jpl/src/c/cores/DakotaSpawnCore.h	(revision 16518)
+@@ -0,0 +1,4 @@
++#ifndef _DAKOTA_SPAWN_CORE_
++#define _DAKOTA_SPAWN_CORE_
++int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
++#endif
+Index: ../trunk-jpl/src/c/cores/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/ad_core.cpp	(revision 16518)
+@@ -0,0 +1,356 @@
++/*!\file ad_core
++ * \brief: compute outputs from the AD mode,  using our dependents and independents, and drivers available in Adolc.
++ */
++
++/*Includes: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <set>
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++/*}}}*/
++
++void ad_core(FemModel* femmodel){
++
++	/*diverse: */
++	int     i;
++	int     dummy;
++	int     num_dependents=0;
++	int     num_independents=0;
++	bool    isautodiff       = false;
++	char   *driver           = NULL;
++	size_t  tape_stats[11];
++
++	/*state variables: */
++	IssmDouble *axp = NULL;
++	double     *xp  = NULL;
++	int my_rank=IssmComm::GetRank();
++
++	/*AD mode on?: */
++	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++
++	if(isautodiff){
++
++		#ifdef _HAVE_ADOLC_
++			if(VerboseAutodiff())_printf0_("   start ad core\n");
++
++			/*First, stop tracing: */
++			trace_off();
++		
++			/*retrieve parameters: */
++			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++	
++			/*if no dependents, no point in running a driver: */
++			if(!(num_dependents*num_independents)) return;
++
++			/*for adolc to run in parallel, we 0 out on rank~=0:*/
++			if (my_rank!=0){
++				num_dependents=0; num_independents=0;
++			}
++			
++			/*Print tape statistics so that user can kill this run if something is off already:*/
++			tapestats(my_rank,tape_stats); //reading of tape statistics
++			if(VerboseAutodiff()){
++				int commSize=IssmComm::GetSize();
++				int *sstats=new int[7];
++				sstats[0]=tape_stats[NUM_OPERATIONS];
++				sstats[1]=tape_stats[OP_FILE_ACCESS];
++				sstats[2]=tape_stats[NUM_LOCATIONS];
++				sstats[3]=tape_stats[LOC_FILE_ACCESS];
++				sstats[4]=tape_stats[NUM_VALUES];
++				sstats[5]=tape_stats[VAL_FILE_ACCESS];
++				sstats[6]=tape_stats[TAY_STACK_SIZE];
++				int *rstats=NULL;
++				if (my_rank==0) rstats=new int[commSize*7];
++				ISSM_MPI_Gather(sstats,7,ISSM_MPI_INT,rstats,7,ISSM_MPI_INT,0,IssmComm::GetComm());
++				if (my_rank==0) {
++					int offset=50;
++					int rOffset=(commSize/10)+1;
++					_printf_("   ADOLC statistics: \n");
++					_printf_("     "<<setw(offset)<<left<<"#independents: " <<setw(12)<<right<<tape_stats[NUM_INDEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"#dependents: " <<setw(12)<<right<<tape_stats[NUM_DEPENDENTS] << "\n");
++					_printf_("     "<<setw(offset)<<left<<"max #live active variables: " <<setw(12)<<right<<tape_stats[NUM_MAX_LIVES] << "\n");
++					_printf_("     operations: entry size "<< sizeof(unsigned char) << " Bytes \n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffObufsizeEnum) " <<setw(12)<<right<<tape_stats[OP_BUFFER_SIZE] << "\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+0] << (rstats[r*7+1]?" ->file":"") << "\n");
++					_printf_("     locations: entry size " << sizeof(locint) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffLbufsizeEnum) " <<setw(12)<<right<<tape_stats[LOC_BUFFER_SIZE] << "\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+2] << (rstats[r*7+3]?" ->file":"") << "\n");
++					_printf_("     constant values: entry size " << sizeof(double) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffCbufsizeEnum) " <<setw(12)<<right<<tape_stats[VAL_BUFFER_SIZE] << "\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+4] << (rstats[r*7+5]?" ->file":"") << "\n");
++					_printf_("     Taylor stack: entry size " << sizeof(revreal) << " Bytes\n");
++					_printf_("     "<<setw(offset)<<left<<"  #entries in buffer (AutodiffTbufsizeEnum) " <<setw(12)<<right<<tape_stats[TAY_BUFFER_SIZE] << "\n");
++					for (int r=0;r<commSize;++r)
++					_printf_("       ["<<setw(rOffset)<<right<<r<<"]"<<setw(offset-rOffset-4)<<left<<" #entries total" <<setw(12)<<right<<rstats[r*7+6] << (rstats[r*7+6]>tape_stats[TAY_BUFFER_SIZE]?" ->file":"") << "\n");
++					delete []rstats;
++				}
++				delete [] sstats;
++			}
++
++			/*retrieve state variable: */
++			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
++
++			/* driver argument */
++			xp=xNew<double>(num_independents);
++			for(i=0;i<num_independents;i++){
++				xp[i]=reCast<double,IssmDouble>(axp[i]);
++			}
++
++			/*get the EDF pointer:*/
++			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
++
++			/*Branch according to AD driver: */
++			femmodel->parameters->FindParam(&driver,AutodiffDriverEnum);
++
++			/* these are always needed regardless of the interpreter */
++			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++			if (strcmp(driver,"fos_forward")==0){ /*{{{*/
++
++				int     anIndepIndex;
++				double *tangentDir         = NULL;
++				double *jacTimesTangentDir = NULL;
++				double *theOutput          = NULL;
++
++				/*retrieve direction index: */
++				femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
++
++				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
++
++				tangentDir=xNewZeroInit<double>(num_independents);
++				tangentDir[anIndepIndex]=1.0;
++
++				jacTimesTangentDir=xNew<double>(num_dependents);
++				theOutput=xNew<double>(num_dependents);
++
++				/*set the forward method function pointer: */
++#ifdef _HAVE_GSL_
++				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
++#endif
++
++				/*allocate the space for the parameters to invoke the EDF fos_forward:*/
++				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++				/*call driver: */
++				fos_forward(my_rank,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
++
++				/*add to results*/
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
++
++				/*free resources :*/
++				xDelete(theOutput);
++				xDelete(jacTimesTangentDir);
++				xDelete(tangentDir);
++			} /*}}}*/
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){ /*{{{*/
++
++				int      tangentDirNum;
++				int      dummy;
++				int     *indepIndices  = NULL;
++				double **jacTimesSeed  = NULL;
++				double **seed          = NULL;
++				double  *theOutput     = NULL;
++				std::set<unsigned int> anIndexSet;
++
++				/*retrieve directions:*/
++				if (strcmp(driver,"fov_forward_all")==0){
++					tangentDirNum=num_independents;
++					indepIndices=xNewZeroInit<int>(tangentDirNum);
++					for(i=0;i<num_independents;i++)indepIndices[i]=1;
++				}
++				else{
++					femmodel->parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
++
++				/*Some checks: */
++				if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
++
++				/*set the forward method function pointers: */
++#ifdef _HAVE_GSL_
++				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
++#endif
++				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke EDF fov_forward:*/
++				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
++				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
++
++				/*seed matrix: */
++				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<tangentDirNum; ++i) {
++					/* make sure the index is in range*/
++					if (indepIndices[i]>num_independents) {
++						_error_("indepIndices values must be in [0,num_independents-1]");
++					}
++					if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(indepIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					seed[indepIndices[i]][i]=1.0;
++				}
++
++				/*allocate output: */
++				theOutput=xNew<double>(num_dependents);
++
++				/*call driver: */
++				fov_forward(my_rank,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
++				/*Free resources: */
++				xDelete(theOutput);
++				xDelete(indepIndices);
++				xDelete(seed);
++
++				/*add to results: */
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
++
++				/*Free resources: */
++				xDelete(jacTimesSeed);
++				xDelete(indepIndices);
++			} /*}}}*/
++			else if (strcmp(driver,"fos_reverse")==0) { /*{{{*/
++
++				int     aDepIndex=0;
++				double *aWeightVector=NULL;
++				double *weightVectorTimesJac=NULL;
++
++				/*retrieve direction index: */
++				femmodel->parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
++				aWeightVector=xNewZeroInit<double>(num_dependents);
++				if (my_rank==0) {
++					if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
++					aWeightVector[aDepIndex]=1.0;
++				}
++				weightVectorTimesJac=xNew<double>(num_independents);
++
++				/*set the forward method function pointer: */
++#ifdef _HAVE_GSL_
++				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++#endif
++#ifdef _HAVE_MUMPS_
++				anEDF_for_solverx_p->fos_reverse_iArr=fos_reverse_mumpsSolveEDF;
++#endif
++
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++
++				/*call driver: */
++				fos_reverse(my_rank,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++				if(VerboseAutodiff())_printf0_("   done with fos_reverse\n");
++
++				/*add to results*/
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
++
++				/*free resources :*/
++				xDelete(weightVectorTimesJac);
++				xDelete(aWeightVector);
++			} /*}}}*/
++			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){ /*{{{*/
++
++				int* depIndices=NULL;
++				int weightNum;
++				int dummy;
++				double **weightsTimesJac=NULL;
++				double **weights=NULL;
++				std::set<unsigned int> anIndexSet;
++
++				/*retrieve directions:*/
++				if (strcmp(driver,"fov_reverse_all")==0){
++					weightNum=num_dependents;
++					depIndices=xNewZeroInit<int>(weightNum);
++					for(i=0;i<num_dependents;i++)depIndices[i]=1;
++				}
++				else{
++					femmodel->parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
++
++				/*Some checks: */
++				if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				weightsTimesJac=xNew<double>(weightNum,num_independents);
++
++				/*set the forward method function pointers: */
++				#ifdef _HAVE_GSL_
++				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++				#endif
++
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
++
++				/*seed matrix: */
++				weights=xNewZeroInit<double>(weightNum,num_dependents);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<weightNum; ++i) {
++					/* make sure the index is in range*/
++					if (depIndices[i]>num_dependents) {
++						_error_("depIndices values must be in [0,num_dependents-1]");
++					}
++					if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(depIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					weights[depIndices[i]][i]=1.0;
++				}
++
++				/*call driver: */
++				fov_reverse(my_rank,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
++
++				/*add to results: */
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
++
++				/*Free resources: */
++				xDelete(weights);
++				xDelete(weightsTimesJac);
++				xDelete(depIndices);
++			} /*}}}*/
++			else _error_("driver: " << driver << " not yet supported!");
++
++			/* delete the allocated space for the parameters:*/
++			xDelete(anEDF_for_solverx_p->dp_x);
++			xDelete(anEDF_for_solverx_p->dp_X);
++			xDelete(anEDF_for_solverx_p->dpp_X);
++			xDelete(anEDF_for_solverx_p->dp_y);
++			xDelete(anEDF_for_solverx_p->dp_Y);
++			xDelete(anEDF_for_solverx_p->dpp_Y);
++			xDelete(anEDF_for_solverx_p->dp_U);
++			xDelete(anEDF_for_solverx_p->dpp_U);
++			xDelete(anEDF_for_solverx_p->dp_Z);
++			xDelete(anEDF_for_solverx_p->dpp_Z);
++
++			if(VerboseAutodiff())_printf0_("   end AD core\n");
++
++			/*Free resources: */
++			xDelete(xp);
++			xDelete(axp); 
++			xDelete(driver);
++		#else
++			_error_("Should not be requesting AD drivers when an AD library is not available!");
++		#endif
++	}
++}
+Index: ../trunk-jpl/src/c/cores/meshdeformation_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/meshdeformation_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/meshdeformation_core.cpp	(revision 16518)
+@@ -0,0 +1,30 @@
++/*!\file: meshdeformation_core.cpp
++ * \brief: core of the slope solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void meshdeformation_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	if(VerboseSolution()) _printf0_("computing mesh deformation (elasticity)...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(MeshdeformationAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("saving results:\n");
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp	(revision 16518)
+@@ -0,0 +1,57 @@
++/*!\file:  WrapperCorePointerFromSolutionEnum.cpp
++ * \brief: return type of analyses, number of analyses and core solution function.
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
++
++	/*output: */
++	void (*solutioncore)(FemModel*)=NULL;
++
++	/*parameters: */
++	bool control_analysis=false;
++	bool tao_analysis=false;
++	bool dakota_analysis=false;
++
++	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
++	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
++	 * carries out adjoint based inversion on a certain core: */
++	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++	parameters->FindParam(&tao_analysis,InversionTaoEnum);
++
++	if(nodakotacore)dakota_analysis=false;
++
++	if(dakota_analysis){
++		#ifdef _HAVE_DAKOTA_
++		solutioncore=dakota_core;
++		#else
++		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
++		#endif
++	}
++	else if(control_analysis){
++		#ifdef _HAVE_CONTROL_
++		if(tao_analysis) solutioncore=controltao_core;
++		else solutioncore=control_core;
++		#else
++		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
++		#endif
++	}
++	else CorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
++
++	/*Assign output pointer:*/
++	_assert_(psolutioncore);
++	*psolutioncore=solutioncore;
++
++}
+Index: ../trunk-jpl/src/c/cores/stressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/stressbalance_core.cpp	(revision 16518)
+@@ -0,0 +1,97 @@
++/*!\file: stressbalance_core.cpp
++ * \brief: core of the stressbalance solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void stressbalance_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool  dakota_analysis;
++	int   meshtype;
++	bool  isSIA,isSSA,isL1L2,isHO,isFS;
++	bool  conserve_loads    = true;
++	bool  save_results;
++	int   newton;
++	int   solution_type;
++	int   numoutputs        = 0;
++	char** requested_outputs = NULL;
++	int    i;
++
++
++	/* recover parameters:*/
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
++	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
++	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
++	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
++	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,StressbalanceNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,StressbalanceRequestedOutputsEnum);
++
++	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
++	if(dakota_analysis && solution_type==StressbalanceSolutionEnum){
++		InputDuplicatex(femmodel,QmuVxEnum,VxEnum);
++		InputDuplicatex(femmodel,QmuVyEnum,VyEnum);
++		InputDuplicatex(femmodel,QmuVzEnum,VzEnum);
++		if(isFS) InputDuplicatex(femmodel,QmuPressureEnum,PressureEnum);
++	}
++
++	/*Compute slopes: */
++	if(isSIA) surfaceslope_core(femmodel);
++	if(isFS){
++		bedslope_core(femmodel);
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++		ResetCoordinateSystemx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	}
++
++	if(isSIA){
++		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
++
++		/*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
++		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,StressbalanceSIAAnalysisEnum);
++		femmodel->SetCurrentConfiguration(StressbalanceSIAAnalysisEnum);
++		solutionsequence_linear(femmodel);
++		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,StressbalanceAnalysisEnum);
++	}
++
++	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
++		if(VerboseSolution()) _printf0_("   computing velocities\n");
++
++		femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++		if(newton>0)
++		 solutionsequence_newton(femmodel);
++		else
++		 solutionsequence_nonlinear(femmodel,conserve_loads); 
++	}
++
++	if ((isSSA || isL1L2 || isHO) && isFS){
++		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
++		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
++	}
++
++	if (meshtype==Mesh3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
++		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
++		femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++	}
++
++	if(solution_type==StressbalanceSolutionEnum)femmodel->RequestedDependentsx();
++
++	/*Free ressources:*/	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
++}
+Index: ../trunk-jpl/src/c/cores/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/steadystate_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/steadystate_core.cpp	(revision 16518)
+@@ -0,0 +1,130 @@
++/*!\file: steadystate_core.cpp
++ * \brief: core of the steadystate solution 
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++/*Local prototypes*/
++bool steadystateconvergence(Vector<IssmDouble>* tg,Vector<IssmDouble>* tg_old,Vector<IssmDouble>* ug,Vector<IssmDouble>* ug_old,IssmDouble reltol);
++
++void steadystate_core(FemModel* femmodel){
++
++	/*intermediary: */
++	int i;
++	int step; 
++	Vector<IssmDouble>* ug     = NULL;
++	Vector<IssmDouble>* ug_old = NULL;
++	Vector<IssmDouble>* tg     = NULL;
++	Vector<IssmDouble>* tg_old = NULL;
++
++	/*parameters: */
++	bool        save_results,isenthalpy;
++	int         maxiter;
++	IssmDouble  reltol;
++	int         numoutputs        = 0;
++	char** requested_outputs = NULL;
++
++	/* recover parameters:*/
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum);
++	femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
++	femmodel->parameters->FindParam(&reltol,SteadystateReltolEnum);
++	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	femmodel->parameters->FindParam(&numoutputs,SteadystateNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,SteadystateRequestedOutputsEnum);
++
++	/*intialize counters: */
++	step=1;
++
++	for(;;){
++
++		if(VerboseSolution()) _printf0_("   computing temperature and velocity for step: " << step << "\n");
++		#ifdef _HAVE_THERMAL_
++		thermal_core(femmodel);
++		if(!isenthalpy)femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);/*Could be MeltingAnalysis...*/
++		GetSolutionFromInputsx(&tg,femmodel);
++		#else
++		_error_("ISSM was not compiled with thermal capabilities. Exiting");
++		#endif
++
++		if(VerboseSolution()) _printf0_("   computing new velocity\n");
++		stressbalance_core(femmodel);
++		GetSolutionFromInputsx(&ug,femmodel);
++
++		if(step>1){
++			if(VerboseSolution()) _printf0_("   checking steadystate convergence\n");
++			if(steadystateconvergence(tg,tg_old,ug,ug_old,reltol)) break;
++		}
++		if(step>maxiter){
++			if(VerboseSolution()) _printf0_("   maximum number steadystate iterations " << maxiter << " reached\n");
++			break;
++		}
++
++		/*update results and increase counter*/
++		delete tg_old;tg_old=tg;
++		delete ug_old;ug_old=ug;
++		step++;
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
++	}
++
++	/*Free ressources:*/
++	delete tg_old;
++	delete ug_old;
++	delete tg;
++	delete ug;	
++	if(numoutputs){ for (i=0;i<numoutputs;i++){char* string=requested_outputs[i];xDelete<char>(string);} xDelete<char*>(requested_outputs);}
++}
++bool steadystateconvergence(Vector<IssmDouble>* tg,Vector<IssmDouble>* tg_old,Vector<IssmDouble>* ug,Vector<IssmDouble>* ug_old,IssmDouble reltol){
++
++	/*Output*/
++	bool converged = true;
++
++	/*Intermediary*/
++	Vector<IssmDouble>* dug    = NULL;
++	Vector<IssmDouble>* dtg    = NULL;
++	IssmDouble          ndt,nt;
++	IssmDouble          ndu,nu;
++
++	/*compute norm(du)/norm(u)*/
++	dug=ug_old->Duplicate(); ug_old->Copy(dug); dug->AYPX(ug,-1.0);
++	ndu=dug->Norm(NORM_TWO); nu=ug_old->Norm(NORM_TWO);
++	if (xIsNan<IssmDouble>(ndu) || xIsNan<IssmDouble>(nu)) _error_("convergence criterion is NaN!");
++	if((ndu/nu)<reltol){
++		if(VerboseConvergence()) _printf0_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" < "<<reltol*100<<" %\n");
++	}
++	else{ 
++		if(VerboseConvergence()) _printf0_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" > "<<reltol*100<<" %\n");
++		converged=false;
++	}
++
++	/*compute norm(dt)/norm(t)*/
++	dtg=tg_old->Duplicate(); tg_old->Copy(dtg); dtg->AYPX(tg,-1.0);
++	ndt=dtg->Norm(NORM_TWO); nt=tg_old->Norm(NORM_TWO);
++	if (xIsNan<IssmDouble>(ndt) || xIsNan<IssmDouble>(nt)) _error_("convergence criterion is NaN!");
++	if((ndt/nt)<reltol){
++		if(VerboseConvergence()) _printf0_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" < "<<reltol*100<<" %\n");
++	}
++	else{ 
++		if(VerboseConvergence()) _printf0_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" > "<<reltol*100<<" %\n");
++		converged=false;
++	}
++
++	/*clean up and return*/
++	delete dtg;
++	delete dug;
++	return converged;
++}
+Index: ../trunk-jpl/src/c/cores/ProcessArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/ProcessArguments.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/ProcessArguments.cpp	(revision 16518)
+@@ -0,0 +1,57 @@
++/*!\file:  ProcessArguments.cpp
++ * \brief: process arguments
++ */ 
++
++#include <stdio.h>
++#include <cstring>
++
++#include "../shared/shared.h"
++
++void ProcessArguments(int* solution_type,char** pbinfilename,char** poutbinfilename,char** ptoolkitsfilename,char** plockfilename,char** prootpath, int argc,char **argv){
++
++	char *modelname      = NULL;
++	char *binfilename    = NULL;
++	char *outbinfilename = NULL;
++	char *toolkitsfilename  = NULL;
++	char *lockfilename   = NULL;
++	char *rootpath       = NULL;
++	char *rootpatharg    = NULL;
++
++	/*Check input arguments*/
++	if(argc<2)_error_("Usage error: no solution requested");
++	if(argc<3)_error_("Usage error: missing execution directory");
++	if(argc<4)_error_("Usage error: missing model name");
++
++	/*Get requested solution*/
++	*solution_type=StringToEnumx(argv[1]);
++
++	rootpatharg=argv[2];
++	if(strcmp(strstr(rootpatharg,"/"),"/")!=0){ 
++		rootpath       = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
++	}
++	else{
++		rootpath       = xNew<char>(strlen(rootpatharg)+1); sprintf(rootpath,"%s",rootpatharg);
++	}
++
++	modelname=argv[3];
++	if(strstr(modelname,rootpath)==NULL){
++		binfilename    = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s%s",rootpath,modelname,".bin");
++		outbinfilename = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s%s",rootpath,modelname,".outbin");
++		toolkitsfilename  = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".toolkits") +1); sprintf(toolkitsfilename, "%s%s%s",rootpath,modelname,".toolkits");
++		lockfilename   = xNew<char>(strlen(rootpath)+strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s%s",rootpath,modelname,".lock");
++	}
++	else{
++		binfilename    = xNew<char>(strlen(modelname)+strlen(".bin")   +1); sprintf(binfilename,   "%s%s",modelname,".bin");
++		outbinfilename = xNew<char>(strlen(modelname)+strlen(".outbin")+1); sprintf(outbinfilename,"%s%s",modelname,".outbin");
++		toolkitsfilename  = xNew<char>(strlen(modelname)+strlen(".toolkits") +1); sprintf(toolkitsfilename, "%s%s",modelname,".toolkits");
++		lockfilename   = xNew<char>(strlen(modelname)+strlen(".lock")  +1); sprintf(lockfilename,  "%s%s",modelname,".lock");
++	}
++
++	/*Clean up and assign output pointer*/
++	*pbinfilename=binfilename;
++	*poutbinfilename=outbinfilename;
++	*ptoolkitsfilename=toolkitsfilename;
++	*plockfilename=lockfilename;
++	*prootpath=rootpath;
++
++}
+Index: ../trunk-jpl/src/c/cores/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/bedslope_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/bedslope_core.cpp	(revision 16518)
+@@ -0,0 +1,44 @@
++/*!\file: bedslope_core.cpp
++ * \brief: core of the slope solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void bedslope_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++	int  meshtype;
++
++	/*Recover some parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
++
++	if(VerboseSolution()) _printf0_("   computing slope\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeXAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	if(meshtype!=Mesh2DverticalEnum){
++		femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
++		solutionsequence_linear(femmodel);
++	}
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		if(meshtype!=Mesh2DverticalEnum){
++			int outputs[2] = {BedSlopeXEnum,BedSlopeYEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++		}
++		else{
++			int outputs[1] = {BedSlopeXEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
++		}
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/extrudefrombase_core.cpp	(revision 16518)
+@@ -0,0 +1,21 @@
++/*!\file: extrudefrombase_core.cpp
++ * \brief: core of the extrusion solution
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../solutionsequences/solutionsequences.h"
++#include "../modules/modules.h"
++
++void extrudefrombase_core(FemModel* femmodel){
++
++	if(VerboseSolution()) _printf0_("extruding solution from base...\n");
++
++	/*Call on core computations: */
++	femmodel->SetCurrentConfiguration(ExtrudeFromBaseAnalysisEnum);
++	femmodel->UpdateConstraintsExtrudeFromBasex();
++	solutionsequence_linear(femmodel);
++
++}
+Index: ../trunk-jpl/src/c/cores/adjointstressbalance_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/adjointstressbalance_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/adjointstressbalance_core.cpp	(revision 16518)
+@@ -0,0 +1,48 @@
++/*!\file:  adjointstressbalance_core.cpp
++ * \brief compute inverse method adjoint state
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void adjointstressbalance_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool isFS;
++	bool save_results;
++	bool conserve_loads   = true;
++
++	/*retrieve parameters:*/
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	/*Compute velocities*/
++	if(VerboseSolution()) _printf0_("   computing velocities\n");
++	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
++	solutionsequence_nonlinear(femmodel,conserve_loads); 
++
++	/*Call SurfaceAreax, because some it might be needed by PVector*/
++	SurfaceAreax(NULL,femmodel);
++
++	/*Compute adjoint*/
++	if(VerboseSolution()) _printf0_("   computing adjoint\n");
++	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum,AdjointHorizAnalysisEnum);
++	solutionsequence_adjoint_linear(femmodel);
++
++	/*Save results*/
++	if(save_results || true){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		if (isFS){
++			int outputs[4] = {AdjointxEnum,AdjointyEnum,AdjointzEnum,AdjointpEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4);
++		}
++		else{
++			int outputs[2] = {AdjointxEnum,AdjointyEnum};
++			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
++		}
++	}
++}
+Index: ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 16518)
+@@ -0,0 +1,144 @@
++/*!\file:  AnalysisConfiguration.cpp
++ * \brief: return type of analyses, number of analyses 
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype){
++
++	/*output: */
++	int  numanalyses;
++	int* analyses=NULL;
++
++	/*Analyses lists*/
++	switch(solutiontype){
++
++		case StressbalanceSolutionEnum:
++			numanalyses=5;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=StressbalanceAnalysisEnum;
++			analyses[1]=StressbalanceVerticalAnalysisEnum;
++			analyses[2]=StressbalanceSIAAnalysisEnum;
++			analyses[3]=SurfaceSlopeAnalysisEnum;
++			analyses[4]=BedSlopeAnalysisEnum;
++			break;
++
++		case SteadystateSolutionEnum:
++			numanalyses=8;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=StressbalanceAnalysisEnum;
++			analyses[1]=StressbalanceVerticalAnalysisEnum;
++			analyses[2]=StressbalanceSIAAnalysisEnum;
++			analyses[3]=SurfaceSlopeAnalysisEnum;
++			analyses[4]=BedSlopeAnalysisEnum;
++			analyses[5]=EnthalpyAnalysisEnum;
++			analyses[6]=ThermalAnalysisEnum;
++			analyses[7]=MeltingAnalysisEnum;
++			break;
++
++		case ThermalSolutionEnum:
++			numanalyses=3;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=ThermalAnalysisEnum;
++			analyses[1]=MeltingAnalysisEnum;
++			analyses[2]=EnthalpyAnalysisEnum;
++			break;
++
++		case HydrologySolutionEnum:
++			numanalyses=5;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=HydrologyShreveAnalysisEnum;
++			analyses[1]=HydrologyDCInefficientAnalysisEnum;
++			analyses[2]=HydrologyDCEfficientAnalysisEnum;
++			analyses[3]=SurfaceSlopeAnalysisEnum;
++			analyses[4]=BedSlopeAnalysisEnum;
++			break;
++
++		case MasstransportSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=MasstransportAnalysisEnum;
++			break;
++
++		case BalancethicknessSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=BalancethicknessAnalysisEnum;
++			break;
++
++		case BalancethicknessSoftSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=BalancethicknessAnalysisEnum;
++			break;
++
++		case BalancevelocitySolutionEnum:
++			numanalyses=2;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=BalancevelocityAnalysisEnum;
++			analyses[1]=SurfaceSlopeAnalysisEnum;
++			break;
++
++		case SurfaceSlopeSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=SurfaceSlopeAnalysisEnum;
++			break;
++
++		case BedSlopeSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=BedSlopeAnalysisEnum;
++			break;
++
++		case GiaSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=GiaAnalysisEnum;
++			break;
++		
++		case DamageEvolutionSolutionEnum:
++			numanalyses=1;
++			analyses=xNew<int>(numanalyses);
++			analyses[0]=DamageEvolutionAnalysisEnum;
++			break;
++
++		case TransientSolutionEnum:
++			numanalyses=13;
++			analyses=xNew<int>(numanalyses);
++			analyses[ 0]=StressbalanceAnalysisEnum;
++			analyses[ 1]=StressbalanceVerticalAnalysisEnum;
++			analyses[ 2]=StressbalanceSIAAnalysisEnum;
++			analyses[ 3]=SurfaceSlopeAnalysisEnum;
++			analyses[ 4]=BedSlopeAnalysisEnum;
++			analyses[ 5]=ThermalAnalysisEnum;
++			analyses[ 6]=MeltingAnalysisEnum;
++			analyses[ 7]=EnthalpyAnalysisEnum;
++			analyses[ 8]=MasstransportAnalysisEnum;
++			analyses[ 9]=FreeSurfaceBaseAnalysisEnum;
++			analyses[10]=FreeSurfaceTopAnalysisEnum;
++			analyses[11]=ExtrudeFromBaseAnalysisEnum;
++			analyses[12]=ExtrudeFromTopAnalysisEnum;
++			break;
++
++		default:
++			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
++			break;
++	}
++
++	/*Assign output pointers:*/
++	if(pnumanalyses) *pnumanalyses=numanalyses;
++	if(panalyses)    *panalyses=analyses;
++	else              xDelete<int>(analyses);
++}
+Index: ../trunk-jpl/src/c/cores/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/dakota_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/dakota_core.cpp	(revision 16518)
+@@ -0,0 +1,230 @@
++/*!\file:  dakota_core.cpp
++ * \brief: wrapper to the Dakota capabilities. qmu fires up Dakota, and registers a Dakota Pluggin
++ * which will be in charge of running the solution sequences repeteadly, to garner statistics. 
++ *
++ * This routine deals with running ISSM and Dakota in library mode. In library mode, Dakota does not 
++ * run as an execuatble. Its capabilities are linked into the ISSM software. ISSM calls dakota routines 
++ * directly from the dakota library. qmu.cpp is the code that is in charge of calling those routines. 
++ *
++ * Dakota has its own way of running in parallel (for embarassingly parallel jobs). We do not want that, 
++ * as ISSM knows exactly how to run "really parallel" jobs that use all CPUS. To bypass Dakota's parallelism, 
++ * we overloaded the constructor for the parallel library (see the Dakota patch in the externalpackages/dakota
++ * directory). This overloaded constructor fires up Dakota serially on CPU 0 only! We take care of broadcasting 
++ * to the other CPUS, hence ISSM is running in parallel, and Dakota serially on CPU0. 
++ *
++ * Now, how does CPU 0 drive all other CPUS to carry out sensitivity analysese? By synchronizing its call to 
++ * our ISSM cores (stressbalance_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
++ * This explains the structure of qmu.cpp, where cpu 0 runs Dakota, the Dakota pluggin fires up DakotaSpawnCore.cpp, 
++ * while the other CPUS are waiting for a broadcast from CPU0, once they get it, they also fire up 
++ * DakotaSpawnCore. In the end, DakotaSpawnCore is fired up on all CPUS, with CPU0 having Dakota inputs, that it will 
++ * broacast to other CPUS. 
++ *
++ * Now, how does dakota call the DakotaSpawnCore routine? The DakotaSpawnCore is embedded into the DakotaPlugin object 
++ * which is derived from the Direct Interface Dakota objct. This is the only way to run Dakota in library 
++ * mode (see their developper guide for more info). Dakota registers the DakotaPlugin object into its own 
++ * database, and calls on the embedded DakotaSpawnCore from CPU0. 
++ *
++ */ 
++
++/*include files: {{{*/
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../shared/shared.h"
++#include "../classes/classes.h"
++
++#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
++#if _DAKOTA_MAJOR_ < 5 || (_DAKOTA_MAJOR_ == 5 && _DAKOTA_MINOR_ < 3)
++#include <ParallelLibrary.H>
++#include <ProblemDescDB.H>
++#include <DakotaStrategy.H>
++#include <DakotaModel.H>
++#include <DakotaInterface.H>
++#else
++#include <ParallelLibrary.hpp>
++#include <ProblemDescDB.hpp>
++#include <DakotaStrategy.hpp>
++#include <DakotaModel.hpp>
++#include <DakotaInterface.hpp>
++#endif
++#include "./DakotaSpawnCore.h"
++#endif
++/*}}}*/
++/*DakotaPlugin class {{{*/
++#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
++#if _DAKOTA_MAJOR_ < 5 || (_DAKOTA_MAJOR_ == 5 && _DAKOTA_MINOR_ < 3)
++#include <DirectApplicInterface.H>
++#include <DakotaResponse.H>
++#include <ParamResponsePair.H>
++#include <system_defs.h>
++#include <ProblemDescDB.H>
++#include <ParallelLibrary.H>
++#else
++#include <DirectApplicInterface.hpp>
++#include <DakotaResponse.hpp>
++#include <ParamResponsePair.hpp>
++#include <ProblemDescDB.hpp>
++#include <ParallelLibrary.hpp>
++#endif
++namespace SIM {
++	class DakotaPlugin: public Dakota::DirectApplicInterface{
++		public:
++			/*these fields are used by core solutions: */
++			void *femmodel;
++			int   counter;
++			/*Constructors/Destructors*/
++			DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodel):Dakota::DirectApplicInterface(problem_db){/*{{{*/
++				femmodel = in_femmodel;
++				counter  = 0;
++			}/*}}}*/
++			~DakotaPlugin(){/*{{{*/
++				/* Virtual destructor handles referenceCount at Interface level. */ 
++			}/*}}}*/
++		protected:
++			/*execute the input filter portion of a direct evaluation invocation*/
++			//int derived_map_if(const Dakota::String& if_name);
++			/*execute an analysis code portion of a direct evaluation invocation*/
++			int derived_map_ac(const Dakota::String& driver){/*{{{*/
++
++				int i;
++				IssmDouble* variables=NULL;
++				char** variable_descriptors=NULL;
++				char*  variable_descriptor=NULL;
++				IssmDouble* responses=NULL;
++
++				/*increae counter: */
++				counter++;
++
++				/*Before launching analysis, we need to transfer the dakota inputs into Issm 
++				 *readable variables: */
++
++				/*First, the variables: */
++				variables=xNew<IssmDouble>(numACV);
++				for(i=0;i<numACV;i++){
++					variables[i]=xC[i];
++				}
++				/*The descriptors: */
++				variable_descriptors=xNew<char*>(numACV);
++				for(i=0;i<numACV;i++){
++					std::string label=xCLabels[i];
++					variable_descriptor=xNew<char>(strlen(label.c_str())+1);
++					memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
++
++					variable_descriptors[i]=variable_descriptor;
++				}
++
++				/*Initialize responses: */
++				responses=xNewZeroInit<IssmDouble>(numFns);
++
++				/*run core solution: */
++				DakotaSpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodel,counter);
++
++				/*populate responses: */
++				for(i=0;i<numFns;i++){
++					fnVals[i]=responses[i];
++				}
++
++				/*Free ressources:*/
++				xDelete<IssmDouble>(variables);
++				for(i=0;i<numACV;i++){
++					variable_descriptor=variable_descriptors[i];
++					xDelete<char>(variable_descriptor);
++				}
++				xDelete<char*>(variable_descriptors);
++				xDelete<IssmDouble>(responses);
++
++				return 0;
++			}/*}}}*/
++			/*execute the output filter portion of a direct evaluation invocation*/
++			//int derived_map_of(const Dakota::String& of_name);
++			/*add for issm: */
++			int GetCounter(){/*{{{*/
++				return counter;
++			}/*}}}*/
++		private:
++	};
++} 
++#endif
++/*}}}*/
++
++void dakota_core(FemModel* femmodel){ 
++
++	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
++
++	int                my_rank;
++	char              *dakota_input_file  = NULL;
++	char              *dakota_output_file = NULL;
++	char              *dakota_error_file  = NULL;
++	Dakota::ModelLIter ml_iter;
++
++	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
++	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
++	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
++	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	if(my_rank==0){
++
++		// Instantiate/initialize the parallel library and problem description
++		// database objects.
++		char* dakotamode=xNew<char>(strlen("serial")+1);
++		xMemCpy<char>(dakotamode,"serial",strlen("serial")+1);
++		Dakota::ParallelLibrary parallel_lib(dakotamode); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
++		Dakota::ProblemDescDB problem_db(parallel_lib); 
++		xDelete<char>(dakotamode);
++
++		// Manage input file parsing, output redirection, and restart processing
++		// without a CommandLineHandler.  This version relies on parsing of an
++		// input file.
++		problem_db.manage_inputs(dakota_input_file);
++		// specify_outputs_restart() is only necessary if specifying non-defaults
++		parallel_lib.specify_outputs_restart(dakota_output_file,dakota_error_file,NULL,NULL);
++
++		// Instantiate the Strategy object (which instantiates all Model and
++		// Iterator objects) using the parsed information in problem_db.
++		Dakota::Strategy selected_strategy(problem_db);
++
++		// convenience function for iterating over models and performing any
++		// interface plug-ins
++		Dakota::ModelList& models = problem_db.model_list();
++
++		for (ml_iter = models.begin(); ml_iter != models.end(); ml_iter++) {
++
++			Dakota::Interface& interface = ml_iter->interface();
++
++			//set DB nodes to the existing Model specification
++			problem_db.set_db_model_nodes(ml_iter->model_id());
++
++			// Serial case: plug in derived Interface object without an analysisComm
++			interface.assign_rep(new SIM::DakotaPlugin(problem_db,(void*)femmodel), false);
++		}
++
++		// Execute the strategy
++		problem_db.lock(); // prevent run-time DB queries
++		selected_strategy.run_strategy();
++
++		//Warn other cpus that we are done running the dakota iterator, by setting the counter to -1:
++		DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,-1);
++
++	}
++	else{
++
++		for(;;){
++			if(!DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,0))break; //counter came in at -1 on cpu0, bail out.
++		}
++	}
++
++	/*Free ressources:*/
++	xDelete<char>(dakota_input_file);
++	xDelete<char>(dakota_error_file);
++	xDelete<char>(dakota_output_file);
++
++	#endif //#ifdef _HAVE_DAKOTA_
++}
+Index: ../trunk-jpl/src/c/cores/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/balancevelocity_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/balancevelocity_core.cpp	(revision 16518)
+@@ -0,0 +1,37 @@
++/*!\file: balancevelocity_core.cpp
++ * \brief: core of the balancevelocity solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void balancevelocity_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++	/*recover parameters: */
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	if(VerboseSolution()) _printf0_("computing smoothed slopes:\n");
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
++	solutionsequence_linear(femmodel);
++	//surfaceslope_core(femmodel);
++
++	if(VerboseSolution()) _printf0_("call computational core:\n");
++	femmodel->SetCurrentConfiguration(BalancevelocityAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		int outputs[3] = {SurfaceSlopeXEnum,SurfaceSlopeYEnum,VelEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
++	}
++
++}
+Index: ../trunk-jpl/src/c/cores/cores.h
+===================================================================
+--- ../trunk-jpl/src/c/cores/cores.h	(revision 0)
++++ ../trunk-jpl/src/c/cores/cores.h	(revision 16518)
+@@ -0,0 +1,60 @@
++/*
++ * cores.h: 
++ */
++
++#ifndef _ANALYSES_H_
++#define _ANALYSES_H_
++
++/*forward declarations: */
++struct OptArgs;
++class FemModel;
++class Parameters;
++template <class doubletype> class Matrix;
++template <class doubletype> class Vector;
++
++#include "../shared/io/Comm/IssmComm.h"
++#include "../shared/Numerics/types.h"
++
++/*cores: */
++void adjointstressbalance_core(FemModel* femmodel);
++void adjointbalancethickness_core(FemModel* femmodel);
++void gradient_core(FemModel* femmodel,int n=0,bool orthogonalize=false);
++void stressbalance_core(FemModel* femmodel);
++void hydrology_core(FemModel* femmodel);
++void thermal_core(FemModel* femmodel);
++void surfaceslope_core(FemModel* femmodel);
++void bedslope_core(FemModel* femmodel);
++void meshdeformation_core(FemModel* femmodel);
++void control_core(FemModel* femmodel);
++void controltao_core(FemModel* femmodel);
++void masstransport_core(FemModel* femmodel);
++void extrudefrombase_core(FemModel* femmodel);
++void extrudefromtop_core(FemModel* femmodel);
++void balancethickness_core(FemModel* femmodel);
++void balancevelocity_core(FemModel* femmodel);
++void slopecompute_core(FemModel* femmodel);
++void steadystate_core(FemModel* femmodel);
++void transient_core(FemModel* femmodel);
++void dakota_core(FemModel* femmodel);
++void ad_core(FemModel* femmodel);
++void dummy_core(FemModel* femmodel);
++void gia_core(FemModel* femmodel);
++void damage_core(FemModel* femmodel);
++IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
++
++//optimization
++int GradJSearch(IssmDouble* search_vector,FemModel* femmodel,int step);
++
++//diverse
++void ProcessArguments(int* solution,char** pbinname,char** poutbinname,char** ptoolkitsname,char** plockname,char** prootpath,int argc,char **argv);
++void WriteLockFile(char* filename);
++void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
++void PrintBanner(void);
++
++//solution configuration
++void AnalysisConfiguration(int** pcores,int* pnumcores, int solutiontype);
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
++void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
++void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
++
++#endif
+Index: ../trunk-jpl/src/c/cores/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/adjointbalancethickness_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/adjointbalancethickness_core.cpp	(revision 16518)
+@@ -0,0 +1,39 @@
++/*!\file:  adjointbalancethickness_core.cpp
++ * \brief compute inverse method adjoint state
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++void adjointbalancethickness_core(FemModel* femmodel){
++
++	/*parameters: */
++	bool save_results;
++
++	/*retrieve parameters:*/
++	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
++
++	/*compute thickness */
++	if(VerboseSolution()) _printf0_("   computing thickness\n");
++	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
++	solutionsequence_linear(femmodel);
++
++	/*Call SurfaceAreax, because some it might be needed by PVector*/
++	SurfaceAreax(NULL,femmodel);
++
++	/*compute adjoint*/
++	if(VerboseSolution()) _printf0_("   computing adjoint\n");
++	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum,AdjointBalancethicknessAnalysisEnum);
++	solutionsequence_adjoint_linear(femmodel);
++
++	/*Save results*/
++	if(save_results){
++		if(VerboseSolution()) _printf0_("   saving results\n");
++		int outputs[1] = {AdjointEnum};
++		femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
++	}
++}
+Index: ../trunk-jpl/src/c/cores/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/DakotaSpawnCore.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/DakotaSpawnCore.cpp	(revision 16518)
+@@ -0,0 +1,187 @@
++/*!\file:  DakotaSpawnCore.cpp
++
++ * \brief: run core ISSM solution using Dakota inputs coming from CPU 0.
++ * \sa qmu.cpp DakotaPlugin.cpp
++ *
++ * This routine needs to be understood simultaneously with qmu.cpp and DakotaPlugin. 
++ * DakotaSpawnCoreParallel is called by all CPUS, with CPU 0 holding Dakota variable values, along 
++ * with variable descriptors. 
++ *
++ * DakotaSpawnCoreParallel takes care of broadcasting the variables and their descriptors across the MPI 
++ * ring. Once this is done, we use the variables to modify the inputs for the solution core. 
++ * For ex, if "rho_ice" is provided, for ex 920, we include "rho_ice" in the inputs, then 
++ * call the core with the modified inputs. This is the way we get Dakota to explore the parameter 
++ * spce of the core. 
++ *
++ * Once the core is called, we process the results of the core, and using the processed results, 
++ * we compute response functions. The responses are computed on all CPUS, but they are targeted 
++ * for CPU 0, which will get these values back to the Dakota engine. 
++ *
++ */ 
++
++/*Includes and prototypes: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./cores.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses);
++void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses);
++/*}}}*/
++
++/*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
++int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
++
++	char     **responses_descriptors    = NULL;      //these are our! there are only numresponsedescriptors of them, not d_numresponses!!!
++	int        numresponsedescriptors;
++	int        solution_type;
++	bool       control_analysis         = false;
++	void     (*solutioncore)(FemModel*) = NULL;
++	FemModel  *femmodel                 = NULL;
++	bool       nodakotacore             = true;
++
++	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
++	ISSM_MPI_Bcast(&counter,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++	if(counter==-1)return 0;
++
++	/*cast void_femmodel to FemModel: */
++	femmodel=reinterpret_cast<FemModel*>(void_femmodel);
++
++	/*retrieve parameters: */
++	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++
++	if(VerboseQmu()) _printf0_("qmu iteration: " << counter << "\n");
++
++	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
++	DakotaMPI_Bcast(&d_variables,&d_variables_descriptors,&d_numvariables,&d_numresponses);
++
++	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
++	InputUpdateFromDakotax(femmodel,d_variables,d_variables_descriptors,d_numvariables);
++
++	/*Determine solution sequence: */
++	if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n");
++	WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
++
++	/*Run the core solution sequence: */
++	solutioncore(femmodel);
++
++	/*compute responses: */
++	if(VerboseQmu()) _printf0_("compute dakota responses:\n");
++	femmodel->DakotaResponsesx(d_responses,responses_descriptors,numresponsedescriptors,d_numresponses);
++
++	/*Free ressources:*/
++	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
++
++	return 1; //this is critical! do not return 0, otherwise, dakota_core will stop running!
++}
++
++void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){ /*{{{*/
++
++	/* * \brief: broadcast variables_descriptors, variables, numvariables and numresponses
++	 * from cpu 0 to all other cpus.
++	 */ 
++
++	int i;
++	int my_rank;
++
++	/*inputs and outputs: */
++	double* variables=NULL;
++	char**  variables_descriptors=NULL;
++	int     numvariables;
++	int     numresponses;
++
++	/*intermediary: */
++	char* string=NULL;
++	int   string_length;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*recover inputs from pointers: */
++	variables=*pvariables;
++	variables_descriptors=*pvariables_descriptors;
++	numvariables=*pnumvariables;
++	numresponses=*pnumresponses;
++
++	/*numvariables: */
++	ISSM_MPI_Bcast(&numvariables,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++	/*variables:*/
++	if(my_rank!=0)variables=xNew<double>(numvariables);
++	ISSM_MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
++
++	/*variables_descriptors: */
++	if(my_rank!=0){
++		variables_descriptors=xNew<char*>(numvariables);
++	}
++	for(i=0;i<numvariables;i++){
++		if(my_rank==0){
++			string=variables_descriptors[i];
++			string_length=(strlen(string)+1)*sizeof(char);
++		}
++		ISSM_MPI_Bcast(&string_length,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++		if(my_rank!=0)string=xNew<char>(string_length);
++		ISSM_MPI_Bcast(string,string_length,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
++		if(my_rank!=0)variables_descriptors[i]=string;
++	}
++
++	/*numresponses: */
++	ISSM_MPI_Bcast(&numresponses,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
++
++	/*Assign output pointers:*/
++	*pnumvariables=numvariables;
++	*pvariables=variables;
++	*pvariables_descriptors=variables_descriptors;
++	*pnumresponses=numresponses;
++} /*}}}*/
++void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses){ /*{{{*/
++
++	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
++
++	int i;
++	int my_rank;
++
++	double  *variables             = NULL;
++	char   **variables_descriptors = NULL;
++	char   **responses_descriptors = NULL;
++	char    *string                = NULL;
++
++	/*recover pointers: */
++	variables=*pvariables;
++	variables_descriptors=*pvariables_descriptors;
++	responses_descriptors=*presponses_descriptors;
++
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++
++	/*Free variables and variables_descriptors only on cpu !=0*/
++	if(my_rank!=0){
++		xDelete<double>(variables);
++		for(i=0;i<numvariables;i++){
++			string=variables_descriptors[i];
++			xDelete<char>(string);
++		}
++		xDelete<char*>(variables_descriptors);
++	}
++
++	//responses descriptors on every cpu
++	for(i=0;i<numresponses;i++){
++		string=responses_descriptors[i];
++		xDelete<char>(string);
++	}
++	//rest of dynamic allocations.
++	xDelete<char*>(responses_descriptors);
++
++	/*Assign output pointers:*/
++	*pvariables=variables;
++	*pvariables_descriptors=variables_descriptors;
++	*presponses_descriptors=responses_descriptors;
++} /*}}}*/
+Index: ../trunk-jpl/src/c/cores/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/control_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/control_core.cpp	(revision 16518)
+@@ -0,0 +1,129 @@
++/*!\file: control_core.cpp
++ * \brief: core of the control solution 
++ */ 
++
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++/*Local prototypes*/
++bool controlconvergence(IssmDouble J, IssmDouble tol_cm);
++
++void control_core(FemModel* femmodel){
++
++	int     i;
++
++	/*parameters: */
++	int        num_controls;
++	int        nsteps;
++	IssmDouble tol_cm;
++	int        solution_type;
++	bool       isFS;
++	bool       dakota_analysis = false;
++
++	int        *control_type   = NULL;
++	IssmDouble *maxiter        = NULL;
++	IssmDouble *cm_jump        = NULL;
++
++	/*intermediary: */
++	IssmDouble search_scalar = 1.;
++	OptArgs    optargs;
++	OptPars    optpars;
++
++	/*Solution and Adjoint core pointer*/
++	void (*solutioncore)(FemModel*) = NULL;
++	void (*adjointcore)(FemModel*)  = NULL;
++
++	/*output: */
++	IssmDouble* J=NULL;
++
++	/*Recover parameters used throughout the solution*/
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
++	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
++	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
++	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
++	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
++	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	femmodel->parameters->SetParam(false,SaveResultsEnum);
++
++	/*out of solution_type, figure out solution core and adjoint function pointer*/
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
++
++	/*Launch once a complete solution to set up all inputs*/
++	if(VerboseControl()) _printf0_("   preparing initial solution\n");
++	if(isFS) solutioncore(femmodel);
++
++	/*Initialize cost function: */
++	J=xNew<IssmDouble>(nsteps);
++
++	/*Initialize some of the BrentSearch arguments: */
++	optargs.femmodel=femmodel;
++	optpars.xmin=0; optpars.xmax=1;
++
++	/*Start looping: */
++	for(int n=0;n<nsteps;n++){
++
++		/*Display info*/
++		if(VerboseControl()) _printf0_("\n" << "   control method step " << n+1 << "/" << nsteps << "\n");
++
++
++		/*In steady state inversion, compute new temperature field now*/
++		if(solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
++
++		if(VerboseControl()) _printf0_("   compute adjoint state:\n");
++		adjointcore(femmodel);
++		gradient_core(femmodel,n,search_scalar==0.);
++
++		if(VerboseControl()) _printf0_("   optimizing along gradient direction\n");
++		optpars.maxiter=reCast<int,IssmDouble>(maxiter[n]); optpars.cm_jump=cm_jump[n];
++		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunction,&optargs);
++
++		if(VerboseControl()) _printf0_("   updating parameter using optimized search scalar\n"); //true means update save controls
++		InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
++
++		if(controlconvergence(J[n],tol_cm)) break;
++	}
++
++	if(VerboseControl()) _printf0_("   preparing final solution\n");
++	femmodel->parameters->SetParam(true,SaveResultsEnum);
++	solutioncore(femmodel);
++
++	/*some results not computed by steadystate_core or stressbalance_core: */
++	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
++		femmodel->OutputControlsx(&femmodel->results);
++
++		#ifdef _HAVE_ADOLC_
++		IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
++		for(i=0;i<nsteps;i++) J_passive[i]=reCast<IssmPDouble>(J[i]);
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J_passive,nsteps,1,1,0));
++		xDelete<IssmPDouble>(J_passive);
++		#else
++		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J,nsteps,1,1,0));
++		#endif
++	}
++
++	/*Free ressources: */
++	xDelete<int>(control_type);
++	xDelete<IssmDouble>(maxiter);
++	xDelete<IssmDouble>(cm_jump);
++	xDelete<IssmDouble>(J);
++}
++bool controlconvergence(IssmDouble J, IssmDouble tol_cm){
++
++	bool converged=false;
++
++	/*Has convergence been reached?*/
++	if (!xIsNan<IssmDouble>(tol_cm) && J<tol_cm){
++		converged=true;
++		if(VerboseConvergence()) _printf0_("      Convergence criterion reached: J = " << J << " < " << tol_cm);
++	}
++
++	return converged;
++}
+Index: ../trunk-jpl/src/c/cores/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/controltao_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/cores/controltao_core.cpp	(revision 16518)
+@@ -0,0 +1,179 @@
++/*!\file: control_core.cpp
++ * \brief: core of the control solution 
++ */ 
++#include <config.h>
++#include "./cores.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++#include "../solutionsequences/solutionsequences.h"
++
++#if defined (_HAVE_TAO_) && defined (_HAVE_PETSC_) && (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 1)
++#include <tao.h>
++
++/*Local prototype*/
++int FormFunctionGradient(TaoSolver,Vec,IssmDouble*,Vec,void*);
++int IssmMonitor(TaoSolver,void*);
++typedef struct {
++	FemModel* femmodel;
++	double*   J;
++} AppCtx;
++
++void controltao_core(FemModel* femmodel){
++
++	/*TAO*/
++	int                 ierr;
++	int                 num_controls,solution_type;
++	int                 nsteps,maxiter;
++	AppCtx              user;
++	TaoSolver           tao = 0;
++	int                *control_list = NULL;
++	Vector<IssmDouble> *X            = NULL;
++	Vector<IssmDouble> *G            = NULL;
++	Vector<IssmDouble> *XL           = NULL;
++	Vector<IssmDouble> *XU           = NULL;
++
++	/*Initialize TAO*/
++	int argc; char **args=NULL;
++	PetscGetArgs(&argc,&args);
++	ierr = TaoInitialize(&argc,&args,(char*)0,"");
++	if(ierr) _error_("Could not initialize Tao");
++
++	/*Recover some parameters*/
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
++	femmodel->parameters->FindParam(&control_list,NULL,InversionControlParametersEnum);
++	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
++	femmodel->parameters->SetParam(false,SaveResultsEnum);
++	maxiter=nsteps*10;
++
++	/*Prepare Toolkit*/
++	ToolkitsOptionsFromAnalysis(femmodel->parameters,DefaultAnalysisEnum);
++
++	/*Initialize TAO*/
++	TaoCreate(IssmComm::GetComm(),&tao);
++	if(VerboseControl()) _printf0_("   Initializing the Toolkit for Advanced Optimization (TAO)\n");
++	TaoSetFromOptions(tao);
++	TaoSetType(tao,"tao_blmvm");
++	//TaoSetType(tao,"tao_cg");
++	//TaoSetType(tao,"tao_lmvm");
++
++	/*Prepare all TAO parameters*/
++	TaoSetMonitor(tao,IssmMonitor,&user,NULL);
++	TaoSetMaximumFunctionEvaluations(tao,maxiter);
++	TaoSetMaximumIterations(tao,nsteps);
++	TaoSetTolerances(tao,0.,0.,0.,0.,0.);
++
++	GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
++	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
++	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
++	TaoSetInitialVector(tao,X->pvector->vector);
++	TaoSetVariableBounds(tao,XL->pvector->vector,XU->pvector->vector);
++	delete XL;
++	delete XU;
++
++	user.J=xNewZeroInit<double>(maxiter+5);
++	user.femmodel=femmodel;
++	TaoSetObjectiveAndGradientRoutine(tao,FormFunctionGradient,(void*)&user); 
++
++	/*Solver optimization problem*/
++	if(VerboseControl()) _printf0_("   Starting optimization\n");
++	TaoSolve(tao);
++	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
++
++	/*Save results*/
++	TaoGetSolutionVector(tao,&X->pvector->vector);
++	G=new Vector<IssmDouble>(0); VecFree(&G->pvector->vector);
++	TaoGetGradientVector(tao,&G->pvector->vector);
++	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
++	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
++	femmodel->OutputControlsx(&femmodel->results);
++	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
++
++	/*Finalize*/
++	if(VerboseControl()) _printf0_("   preparing final solution\n");
++	femmodel->parameters->SetParam(true,SaveResultsEnum);
++	void (*solutioncore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	solutioncore(femmodel);
++
++	/*Clean up and return*/
++	xDelete<int>(control_list);
++	xDelete<double>(user.J);
++	delete X;
++	TaoDestroy(&tao);
++	TaoFinalize();
++}
++int FormFunctionGradient(TaoSolver tao, Vec Xpetsc, IssmDouble *fcn,Vec G,void *userCtx){
++
++	/*Retreive arguments*/
++	int                  solution_type;
++	AppCtx              *user            = (AppCtx *)userCtx;
++	FemModel            *femmodel        = user->femmodel;
++	Vector<IssmDouble>  *gradient        = NULL;
++	Vector<IssmDouble>  *X               = NULL;
++
++	/*Convert input to Vec*/
++	X=new Vector<IssmDouble>(Xpetsc);
++
++	/*Set new variable*/
++	//VecView(X,PETSC_VIEWER_STDOUT_WORLD);
++	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
++	delete X;
++
++	/*Recover some parameters*/
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++
++	/*Compute solution and adjoint*/
++	void (*solutioncore)(FemModel*)=NULL;
++	void (*adjointcore)(FemModel*)=NULL;
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
++	solutioncore(femmodel);
++	adjointcore(femmodel);
++
++	/*Compute objective function*/
++	femmodel->CostFunctionx(fcn);
++
++	/*Compute gradient*/
++	Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	VecCopy(gradient->pvector->vector,G); delete gradient;
++	VecScale(G,-1.);
++
++	/*Clean-up and return*/
++	return 0;
++}
++int IssmMonitor(TaoSolver tao, void *userCtx){
++
++	int         its,num_responses;
++	IssmDouble  f,gnorm,cnorm,xdiff;
++	AppCtx     *user      = (AppCtx *)userCtx;
++	FemModel   *femmodel  = user->femmodel;
++	int        *responses = NULL;
++
++	femmodel->parameters->FindParam(&responses,&num_responses,InversionCostFunctionsEnum);
++
++	TaoGetSolutionStatus(tao, &its, &f, &gnorm, &cnorm, &xdiff, NULL);
++	if(its==0) _printf0_("Iter       Function      Residual  |  List of contributions\n");
++	if(its==0) _printf0_("___________________________________________________________\n");
++	_printf0_(setw(4)<<its<<"   "<<setw(12)<<setprecision(7)<<f<<"  "<<setw(12)<<setprecision(7)<<gnorm<<"  | ");
++	user->J[its]=f;
++
++	/*Retrieve objective functions independently*/
++	for(int i=0;i<num_responses;i++){
++		femmodel->Responsex(&f,EnumToStringx(responses[i]));
++		_printf0_(" "<<setw(12)<<setprecision(7)<<f);
++	}
++	_printf0_("\n");
++
++	/*Clean-up and return*/
++	xDelete<int>(responses);
++	return 0;
++}
++
++#else
++void controltao_core(FemModel* femmodel){
++	_error_("TAO not installed or PETSc version not supported");
++}
++#endif //_HAVE_TAO_ 
+Index: ../trunk-jpl/src/c/cores
+===================================================================
+--- ../trunk-jpl/src/c/cores	(revision 16517)
++++ ../trunk-jpl/src/c/cores	(revision 16518)
+
+Property changes on: ../trunk-jpl/src/c/cores
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16517)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16518)
+@@ -71,7 +71,7 @@
+                           $ENV{ISSM_DIR}/src/c/modules/Solverx 
+                           $ENV{ISSM_DIR}/src/c/modules/VecMergex 
+                           $ENV{ISSM_DIR}/src/c/modules/Mergesolutionfromftogx 
+-                          $ENV{ISSM_DIR}/src/c/analyses 
++                          $ENV{ISSM_DIR}/src/c/cores 
+                           $ENV{ISSM_DIR}/src/c/solutionsequences 
+                           $ENV{ISSM_DIR}/src/c/solutionsequences)
+ # }}}
+@@ -213,14 +213,14 @@
+ 					./modules/Solverx/Solverx.cpp
+ 					./modules/VecMergex/VecMergex.cpp
+ 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
+-					./analyses/ProcessArguments.cpp
+-					./analyses/ResetBoundaryConditions.cpp
+-					./analyses/AnalysisConfiguration.cpp
+-					./analyses/WrapperCorePointerFromSolutionEnum.cpp
+-					./analyses/CorePointerFromSolutionEnum.cpp
+-					./analyses/EnvironmentInit.cpp
+-					./analyses/EnvironmentFinalize.cpp
+-					./analyses/ad_core.cpp
++					./cores/ProcessArguments.cpp
++					./cores/ResetBoundaryConditions.cpp
++					./cores/AnalysisConfiguration.cpp
++					./cores/WrapperCorePointerFromSolutionEnum.cpp
++					./cores/CorePointerFromSolutionEnum.cpp
++					./cores/EnvironmentInit.cpp
++					./cores/EnvironmentFinalize.cpp
++					./cores/ad_core.cpp
+ 					./solutionsequences/solutionsequence_linear.cpp
+ 					./solutionsequences/solutionsequence_nonlinear.cpp
+ 					./solutionsequences/solutionsequence_newton.cpp
+@@ -237,22 +237,22 @@
+ 					  				  ./modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
+ 					  				  ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+-					  ./analyses/dakota_core.cpp
+-					  				  ./analyses/DakotaSpawnCore.cpp)
++					  ./cores/dakota_core.cpp
++					  				  ./cores/DakotaSpawnCore.cpp)
+ #}}}
+ #Transient sources  {{{
+ set(transient_sources ./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp 
+-							./analyses/transient_core.cpp)
++							./cores/transient_core.cpp)
+ #}}}
+ #Steadystate sources  {{{
+-set(steadystate_sources ./analyses/steadystate_core.cpp)
++set(steadystate_sources ./cores/steadystate_core.cpp)
+ #}}}
+ #Prognostic sources  {{{
+ set(prognostic_sources ./modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+ 					      ./modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+ 					      ./modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+ 					      ./modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+-							./analyses/prognostic_core.cpp)
++							./cores/prognostic_core.cpp)
+ #}}}
+ #Thermal sources  {{{
+ set(thermal_sources ./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+@@ -270,7 +270,7 @@
+ 					   ./modules/ConstraintsStatex/ThermalConstraintsState.cpp
+ 					   ./modules/ConstraintsStatex/ThermalIsPresent.cpp
+ 					   ./modules/ResetConstraintsx/ThermalConstraintsReset.cpp 
+-					   ./analyses/thermal_core.cpp
++					   ./cores/thermal_core.cpp
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp)
+ #}}}
+ #Control sources  {{{
+@@ -297,13 +297,13 @@
+ 					  				  				  ./classes/Inputs/ControlInput.cpp
+ 					  ./shared/Numerics/BrentSearch.cpp
+ 					  ./shared/Numerics/OptimalSearch.cpp 
+-					  ./analyses/control_core.cpp
+-					  ./analyses/controltao_core.cpp
+-					  ./analyses/objectivefunction.cpp
+-					  ./analyses/gradient_core.cpp
+-					  ./analyses/adjointdiagnostic_core.cpp
+-					  ./analyses/adjointbalancethickness_core.cpp
+-					  ./analyses/AdjointCorePointerFromSolutionEnum.cpp
++					  ./cores/control_core.cpp
++					  ./cores/controltao_core.cpp
++					  ./cores/objectivefunction.cpp
++					  ./cores/gradient_core.cpp
++					  ./cores/adjointdiagnostic_core.cpp
++					  ./cores/adjointbalancethickness_core.cpp
++					  ./cores/AdjointCorePointerFromSolutionEnum.cpp
+ 					  ./solutionsequences/solutionsequence_adjoint_linear.cpp)
+ #}}}
+ #Hydrology sources  {{{
+@@ -322,7 +322,7 @@
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp 
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp 
+-							./analyses/hydrology_core.cpp
++							./cores/hydrology_core.cpp
+ 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp)
+ #}}}
+ #Diagnostic sources  {{{
+@@ -338,7 +338,7 @@
+ 					      ./modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp 
+ 					      ./modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp 
+ 							./modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp 
+-							./analyses/diagnostic_core.cpp
++							./cores/diagnostic_core.cpp
+ 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp)
+ #}}}
+ #Balanced sources  {{{
+@@ -346,8 +346,8 @@
+ 					    ./modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+ 					    ./modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+ 						 ./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+-						 ./analyses/balancethickness_core.cpp 
+-						 ./analyses/dummy_core.cpp)
++						 ./cores/balancethickness_core.cpp 
++						 ./cores/dummy_core.cpp)
+ #}}}
+ #Slope sources  {{{
+ set(slope_sources  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+@@ -358,11 +358,11 @@
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp 
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+ 					  ./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
+-					  ./analyses/surfaceslope_core.cpp
+-					  ./analyses/bedslope_core.cpp)
++					  ./cores/surfaceslope_core.cpp
++					  ./cores/bedslope_core.cpp)
+ #}}}
+ #Gia sources  {{{
+-set(gia_sources  ./analyses/gia_core.cpp
++set(gia_sources  ./cores/gia_core.cpp
+ 					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
+ 					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp 
+ 					./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16517)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 16518)
+@@ -9,7 +9,7 @@
+ #endif
+ 
+ #include <stdio.h>
+-#include "../analyses/analyses.h"
++#include "../cores/cores.h"
+ #include "../shared/io/io.h"
+ #include "./classes.h"
+ #include "./modules/modules.h"
Index: issm/oecreview/Archive/16133-16554/ISSM-16518-16519.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16518-16519.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16518-16519.diff	(revision 16556)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/configs/config-linux64-skylla.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-skylla.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-skylla.sh	(revision 16519)
+@@ -0,0 +1,22 @@
++#!/bin/sh
++
++#External packages versions:
++#petsc 3.4
++#mpich 3.0
++
++./configure \
++ --prefix=$ISSM_DIR \
++ --with-matlab-dir=$ISSM_DIR/externalpackages/matlab/install \
++ --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++ --with-metis-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-mpi-include=$ISSM_DIR/externalpackages/mpich/install/include  \
++ --with-mpi-libflags="-L$ISSM_DIR/externalpackages/mpich/install/lib/ -lmpich -lmpl " \
++ --with-petsc-arch=$ISSM_ARCH \
++ --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-fortran-lib="-L/usr/lib/gcc/x86_64-redhat-linux/4.1.2/ -lgfortran" \
++ --with-graphics-lib="/usr/lib64/libX11.so.6" \
++ --with-cxxoptflags="-g -O2" \
++ --with-numthreads=8
+
+Property changes on: ../trunk-jpl/configs/config-linux64-skylla.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16519-16520.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16519-16520.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16519-16520.diff	(revision 16556)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/test/Archives/Archive1107.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1108.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16520-16521.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16520-16521.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16520-16521.diff	(revision 16556)
@@ -0,0 +1,410 @@
+Index: ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 16521)
+@@ -313,7 +313,7 @@
+ //	_printf0_("KMLFileTagAttrib -- initial token=\"" << ktokn << "\".\n");
+ 
+ 	/*  return next non " =?/>" and move past subsequent " =?/>"  */
+-	while (ktokn=strtok(NULL," =?/>")) {
++	while((ktokn=strtok(NULL," =?/>"))){
+ 
+ 		/*  return next non quote and move past subsequent quote  */
+ 		ktokv=strtok(NULL,quote);
+@@ -357,15 +357,17 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+ 			(kstr[1] != '/') ||
+ 			(strncmp(&(kstr[2]),&(ktag[1]),strlen(ktag)-1)))
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+-		else
++		else{
+ 			xDelete<char>(kstr);
++		}
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=" << *pival << ".\n");
+ 
+@@ -391,7 +393,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -400,6 +402,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=" << (*pbval ? "true" : "false") << ".\n");
+ 
+@@ -452,7 +455,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -461,6 +464,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=\"" << pstr << "\".\n");
+ 
+@@ -486,7 +490,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -495,6 +499,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=" << *pfval << ".\n");
+ 
+@@ -520,7 +525,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -529,6 +534,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=" << *pdval << ".\n");
+ 
+@@ -553,11 +559,12 @@
+ 		(kstr[0] == '<'))
+ 		_error_("KMLFileTokenParse -- Missing double [m] field for " << ktag << ".\n");
+ 
+-	if (!*pdval)
++	if(!*pdval){
+ 		if (maxlen)
+ 			*pdval=xNew<IssmPDouble>(maxlen            );
+ 		else
+ 			*pdval=xNew<IssmPDouble>((strlen(kstr)+1)/2);
++	}
+ 
+ /*  loop through string to get all values  */
+ 
+@@ -584,7 +591,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -593,6 +600,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=...\n");
+ //	for (j=0; j<=i; j++)
+@@ -619,11 +627,12 @@
+ 		(kstr[0] == '<'))
+ 		_error_("KMLFileTokenParse -- Missing double [m x n] field for " << ktag << ".\n");
+ 
+-	if (!*pdval)
++	if(!*pdval){
+ 		if (maxlen)
+ 			*pdval=xNew<IssmPDouble>(maxlen*n          );
+ 		else
+ 			*pdval=xNew<IssmPDouble>((strlen(kstr)+1)/2);
++	}
+ 
+ /*  loop through string to get all values  */
+ 
+@@ -654,7 +663,7 @@
+ 
+ /*  get additional token and compare to closing tag  */
+ 
+-	if (ktag)
++	if(ktag){
+ 		if (!(kstr=KMLFileToken(fid,
+ 								NULL,NULL)) ||
+ 			(kstr[0] != '<') ||
+@@ -663,6 +672,7 @@
+ 		  {_error_("KMLFileTokenParse -- Missing closing tag for " << ktag << ".\n");}
+ 		else
+ 			xDelete<char>(kstr);
++	}
+ 
+ //	_printf0_("KMLFileTokenParse -- " << ktag << "=...\n");
+ //	for (j=0; j<=i; j++)
+@@ -672,8 +682,7 @@
+ }
+ /*}}}*/
+ /*FUNCTION  KMLFileTagSkip {{{*/
+-int KMLFileTagSkip(char* ktag,
+-				   FILE* fid){
++int KMLFileTagSkip(char* ktag, FILE* fid){
+ 
+ 	char*   kstr;
+ 
+@@ -684,11 +693,8 @@
+ 
+ /*  if next token is a closing tag, compare to input  */
+ 
+-	while (kstr=KMLFileToken(fid,
+-							 NULL,NULL)) {
+-		if      ((kstr[0] == '<') &&
+-				 (kstr[1] == '/') &&
+-				 (!strncmp(&(kstr[2]),&(ktag[1]),(strcspn(ktag," >")-1)/sizeof(char)))) {
++	while((kstr=KMLFileToken(fid,NULL,NULL))){
++		if((kstr[0] == '<') && (kstr[1] == '/') && (!strncmp(&(kstr[2]),&(ktag[1]),(strcspn(ktag," >")-1)/sizeof(char)))){
+ 			_printf0_("KMLFileTagSkip -- closing tag " << kstr << ".\n");
+ 			xDelete<char>(kstr);
+ 			return(0);
+Index: ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/bamg/BamgQuadtree.cpp	(revision 16521)
+@@ -349,7 +349,7 @@
+ 					BamgQuadtreeBox* b0=b;
+ 
+ 					/*if the next box exists:*/
+-					if (b=b->b[k]){
++					if((b=b->b[k])){
+ 
+ 						/*Get size (hb) and coordinates of the current sub-box lowest left corner*/
+ 						hb>>=1;
+Index: ../trunk-jpl/src/c/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/bamg/Mesh.cpp	(revision 16521)
+@@ -1151,7 +1151,7 @@
+ 		int infvertexindex = &s0 ?  ((  &s1 ? ( &s2  ? -1 : 2) : 1  )) : 0;
+ 
+ 		//some checks
+-		if (( infvertexindex <0 ) && (detOld <0) ||  ( infvertexindex >=0  ) && (detOld >0) ){
++		if(((infvertexindex <0 ) && (detOld <0)) ||  ((infvertexindex >=0) && (detOld >0)) ){
+ 			_error_("inconsistent configuration (Contact ISSM developers)");
+ 		}
+ 
+@@ -2760,7 +2760,7 @@
+ 		if (maxnbv_in) {
+ 			vertices=new BamgVertex[maxnbv];
+ 			_assert_(vertices);
+-			orderedvertices=new (BamgVertex* [maxnbv]);
++			orderedvertices=new BamgVertex* [maxnbv];
+ 			_assert_(orderedvertices);
+ 			triangles=new Triangle[maxnbt];
+ 			_assert_(triangles);
+@@ -3009,7 +3009,7 @@
+ 		if (!Gh.nbe){
+ 			_error_("!Gh.nbe");
+ 		}
+-		Edge **e= new (Edge* [Gh.nbe]);
++		Edge **e= new Edge* [Gh.nbe];
+ 
+ 		long i;
+ 		for ( i=0;i<Gh.nbe ; i++)
+@@ -3114,7 +3114,7 @@
+ 			Triangle &t=triangles[it];
+ 			for (int j=0;j<3;j++){
+ 				Triangle &tt = *t.TriangleAdj(j);
+-				if ( ! &tt ||  it < GetId(tt) && ( tt.link || t.link)){
++				if ( (!&tt ||  it < GetId(tt)) && ( tt.link || t.link)){
+ 					BamgVertex &v0 = t[VerticesOfTriangularEdge[j][0]];
+ 					BamgVertex &v1 = t[VerticesOfTriangularEdge[j][1]];
+ 					R2 AB= (R2) v1-(R2) v0;
+@@ -4966,7 +4966,7 @@
+ 				 _error_("Loop in forcing Egde, nb de swap=" << NbSwap << ", nb of try swap (" << l << ") too big");
+ 			 }
+ 			BamgVertex *aa = tc.EdgeVertex(0), *bb = tc.EdgeVertex(1);
+-			if (( aa == &a ) && (bb == &b) ||  (bb ==  &a ) && (aa == &b)) {
++			if (((aa == &a ) && (bb == &b)) ||((bb ==  &a ) && (aa == &b))){
+ 				tc.SetLock();
+ 				a.Optim(1,0);
+ 				b.Optim(1,0);
+@@ -5108,12 +5108,12 @@
+ 			detsa=-detsa;
+ 			detsb=-detsb;
+ 
+-			if (ToSwap) 
++			if(ToSwap){
+ 			 if (dets2 < 0) {// haut
+ 				 dets1 = (ToSwap ? dets1 : detsa) ;
+ 				 detsa = dets2; 
+ 				 tt1 =  Previous(tt2) ;}
+-			 else if (dets2 > 0){// bas 
++			 else if(dets2 > 0){// bas 
+ 				 dets1 = (ToSwap ? dets1 : detsb) ;
+ 				 detsb =  dets2;
+ 				 if(!ToSwap) tt1 =  Next(tt2);
+@@ -5121,6 +5121,7 @@
+ 			 else {// on a fin ???
+ 				 tt1 = Next(tt2);
+ 				 ret =0;}
++			}
+ 
+ 		}
+ 		return ret;
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 16521)
+@@ -473,8 +473,8 @@
+ 				if (k==j)continue;
+ 				node3=segments[3*k+0]-1; node4=segments[3*k+1]-1;
+ 				/*We are trying to find 2 elements, where position of node3 == position of node1, and position of node4 == position of node2*/
+-				if (   (x[node3]==x[node1]) && (y[node3]==y[node1]) && (x[node4]==x[node2]) && (y[node4]==y[node2])
+-				    || (x[node3]==x[node2]) && (y[node3]==y[node2]) && (x[node4]==x[node1]) && (y[node4]==y[node1])  ){
++				if (   ((x[node3]==x[node1]) && (y[node3]==y[node1]) && (x[node4]==x[node2]) && (y[node4]==y[node2]))
++				    || ((x[node3]==x[node2]) && (y[node3]==y[node2]) && (x[node4]==x[node1]) && (y[node4]==y[node1]))  ){
+ 					/*We found the corresponding element: */
+ 					pairs[2*j+1]=segments[3*k+2];
+ 					break;
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 16521)
+@@ -98,7 +98,7 @@
+ 			it=Th.GetId(tb);
+ 
+ 			/*Inside convex but outside mesh*/
+-			if (reft[it]<0 & isdefault){
++			if (reft[it]<0 && isdefault){
+ 				for(j=0;j<N_data;j++) data_interp[i*N_data+j]=defaultvalue;
+ 				continue;
+ 			}
+Index: ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 16521)
+@@ -85,7 +85,7 @@
+ 	klsty =new KML_LineStyle();
+ 	sprintf(klsty->color     ,"ff000000");
+ 	sprintf(klsty->colormode ,"normal");
+-	klsty->width     ,lwidth;
++	klsty->width     =lwidth;
+ 	kpsty =new KML_PolyStyle();
+ 	sprintf(kpsty->color     ,"00ffffff");
+ 	sprintf(kpsty->colormode ,"random");
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16521)
+@@ -37,7 +37,7 @@
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i])){
+-			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==SIAApproximationEnum){
++			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+ 
+ 				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
+ 				count++;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16521)
+@@ -23,12 +23,12 @@
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 		if (iomodel->meshtype==Mesh3DEnum){
+ 			/*keep only this partition's nodes:*/
+-			if((iomodel->my_vertices[i]==1)){
++			if(iomodel->my_vertices[i]){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+ 			}
+ 		}
+ 		else if(reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+-			if((iomodel->my_vertices[i]==1)){
++			if(iomodel->my_vertices[i]){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+ 			}	
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16521)
+@@ -20,7 +20,7 @@
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		/*keep only this partition's nodes:*/
+-		if((iomodel->my_vertices[i]==1)){
++		if(iomodel->my_vertices[i]){
+ 			if (xIsNan<IssmDouble>(iomodel->Data(ThermalSpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
+ 			}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16521)
+@@ -19,7 +19,7 @@
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if((iomodel->my_vertices[i]==1)){
++		if(iomodel->my_vertices[i]){
+ 			if (reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
+ 			}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16521)
+@@ -18,7 +18,7 @@
+ 	for(int i=0;i<iomodel->numberofvertices;i++){
+ 
+ 		/*keep only this partition's nodes:*/
+-		if((iomodel->my_vertices[i]==1)){
++		if(iomodel->my_vertices[i]){
+ 			if (xIsNan<IssmDouble>(iomodel->Data(DamageSpcdamageEnum)[i])){ //No penalty applied on spc nodes!
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,DamageEvolutionAnalysisEnum));
+ 			}
+Index: ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 16521)
+@@ -222,7 +222,7 @@
+ 	klsty =new KML_LineStyle();
+ 	sprintf(klsty->color     ,"ff000000");
+ 	sprintf(klsty->colormode ,"normal");
+-	klsty->width     ,lwidth;
++	klsty->width     =lwidth;
+ 	kpsty =new KML_PolyStyle();
+ 	sprintf(kpsty->color     ,"00ffffff");
+ 	sprintf(kpsty->colormode ,"random");
+Index: ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16520)
++++ ../trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 16521)
+@@ -1225,7 +1225,7 @@
+ 	*Jdet=SQRT3/6.*pow(pow(((y2-y1)*(z3-z1)-(z2-z1)*(y3-y1)),2)+pow(((z2-z1)*(x3-x1)-(x2-x1)*(z3-z1)),2)+pow(((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)),2),0.5);
+ 	if(*Jdet<0) _error_("negative jacobian determinant!");
+ }
+-/*}}}*
++/*}}}*/
+ /*FUNCTION PentaRef::GetSegmentJacobianDeterminant{{{*/
+ void PentaRef::GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss){
+ 	/*The Jacobian determinant is constant over the element, discard the gaussian points. 
Index: issm/oecreview/Archive/16133-16554/ISSM-16521-16522.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16521-16522.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16521-16522.diff	(revision 16556)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/Archives/Archive1203.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1501.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1201.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1204.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive1202.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16522-16523.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16522-16523.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16522-16523.diff	(revision 16556)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 16522)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 16523)
+@@ -4,21 +4,23 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'SSA','all');
+-md=extrude(md,3,1.);
++%md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.transient.isthermal=0;
+ 
+-md.timestepping.time_step=1.;
+-md.settings.output_frequency=1;
+-md.timestepping.final_time=2000.;
++%md.timestepping.time_step=1.;
++%md.settings.output_frequency=1;
++%md.timestepping.final_time=2000.;
+ 
+ %Solve for thinning rate -> -1 * surface mass balance
+ smb= 2.*ones(md.mesh.numberofvertices,1);
+-md.surfaceforcings.mass_balance= smb;
+-md.basalforcings.melting_rate= smb;
++%md.surfaceforcings.mass_balance= smb;
++%md.basalforcings.melting_rate= smb;
++md.verbose=verbose('all');
+ 
+ md=solve(md,MasstransportSolutionEnum());
+ 
++error
+ for i=1:10
+ 	 md=solve(md,MasstransportSolutionEnum());
+ 	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.MasstransportSolution.Thickness)-md.geometry.thickness);
Index: issm/oecreview/Archive/16133-16554/ISSM-16523-16524.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16523-16524.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16523-16524.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive1208.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16524-16525.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16524-16525.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16524-16525.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive1109.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16525-16526.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16525-16526.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16525-16526.diff	(revision 16556)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive1110.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: issm/oecreview/Archive/16133-16554/ISSM-16526-16527.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16526-16527.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16526-16527.diff	(revision 16556)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh	(revision 16527)
+@@ -0,0 +1,61 @@
++#!/bin/bash
++
++#Some cleanup
++rm -rf install petsc-3.4.2 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
++
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --PETSC_ARCH="$ISSM_ARCH" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-batch=1  \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --with-mpi-lib="/nasa/mvapich2/1.6.sles11/gcc/lib/libmpich.a"\
++ --with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
++ --download-f-blas-lapack=yes \
++ --download-scalapack=yes \
++ --download-blacs=yes \
++ --download-mumps=yes \
++ --download-metis=yes \
++ --download-parmetis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-hypre=yes \
++ --COPTFLAGS="-lmpich" \
++ --FOPTFLAGS="-lmpich" \
++ --CXXOPTFLAGS="-lmpich"
++
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
++#PBS -S /bin/bash
++#PBS -l select=1:ncpus=1:model=wes 
++#PBS -l walltime=200 
++#PBS -W group_list=s1010
++#PBS -m e 
++
++. /usr/share/modules/init/bash 
++module load mpi-mvapich2/1.6/gcc
++module load gcc/4.7.0
++
++export PATH="$PATH:." 
++export MPI_GROUP_MAX=64 
++mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
++EOF
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub -q devel script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16527-16528.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16527-16528.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16527-16528.diff	(revision 16556)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades-gcc.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades-gcc.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades-gcc.sh	(revision 16528)
+@@ -0,0 +1,27 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++
++git clone -b ampi git://git.mcs.anl.gov/adol-c.git src
++#git reset --hard b254b2a001a1b7a024a9184cd087ae06eb975cad
++
++#Compile ADOL-C
++cd src
++autoreconf -f -i 
++
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install  \
++	--libdir=$ISSM_DIR/externalpackages/adolc/install/lib \
++	--with-mpi-root="/nasa/mvapich2/1.6.sles11/gcc" \
++	--enable-ampi \
++	--with-ampi=$ISSM_DIR/externalpackages/adjoinablempi/install \
++	--disable-tapedoc-values
++
++make clean
++if [ $# -eq 0 ]; then
++	make V=1
++else
++	make -j $1 V=1
++fi
++make V=1 install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install-withampi-pleiades-gcc.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16528-16529.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16528-16529.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16528-16529.diff	(revision 16556)
@@ -0,0 +1,1464 @@
+Index: ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16528)
++++ ../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16529)
+@@ -296,10 +296,8 @@
+ 	BalancethicknessSoftSolutionEnum,
+ 	BalancevelocityAnalysisEnum,
+ 	BalancevelocitySolutionEnum,
+-	BedSlopeAnalysisEnum,
++	L2ProjectionBaseAnalysisEnum,
+ 	BedSlopeSolutionEnum,
+-	BedSlopeXAnalysisEnum,
+-	BedSlopeYAnalysisEnum,
+ 	DamageEvolutionSolutionEnum,
+ 	DamageEvolutionAnalysisEnum,
+ 	StressbalanceAnalysisEnum,
+@@ -321,10 +319,8 @@
+ 	ExtrudeFromBaseAnalysisEnum,
+ 	ExtrudeFromTopAnalysisEnum,
+ 	SteadystateSolutionEnum,
+-	SurfaceSlopeAnalysisEnum,
++	L2ProjectionTopAnalysisEnum,
+ 	SurfaceSlopeSolutionEnum,
+-	SurfaceSlopeXAnalysisEnum,
+-	SurfaceSlopeYAnalysisEnum,
+ 	SmoothedSurfaceSlopeXAnalysisEnum,
+ 	SmoothedSurfaceSlopeYAnalysisEnum,
+ 	ThermalAnalysisEnum,
+@@ -379,6 +375,7 @@
+ 	InputEnum,
+ 	IntInputEnum,
+ 	InputToExtrudeEnum,
++	InputToL2ProjectEnum,
+ 	IntParamEnum,
+ 	IntVecParamEnum,
+ 	TransientParamEnum,
+Index: ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16529)
+@@ -302,10 +302,8 @@
+ 		case BalancethicknessSoftSolutionEnum : return "BalancethicknessSoftSolution";
+ 		case BalancevelocityAnalysisEnum : return "BalancevelocityAnalysis";
+ 		case BalancevelocitySolutionEnum : return "BalancevelocitySolution";
+-		case BedSlopeAnalysisEnum : return "BedSlopeAnalysis";
++		case L2ProjectionBaseAnalysisEnum : return "L2ProjectionBaseAnalysis";
+ 		case BedSlopeSolutionEnum : return "BedSlopeSolution";
+-		case BedSlopeXAnalysisEnum : return "BedSlopeXAnalysis";
+-		case BedSlopeYAnalysisEnum : return "BedSlopeYAnalysis";
+ 		case DamageEvolutionSolutionEnum : return "DamageEvolutionSolution";
+ 		case DamageEvolutionAnalysisEnum : return "DamageEvolutionAnalysis";
+ 		case StressbalanceAnalysisEnum : return "StressbalanceAnalysis";
+@@ -327,10 +325,8 @@
+ 		case ExtrudeFromBaseAnalysisEnum : return "ExtrudeFromBaseAnalysis";
+ 		case ExtrudeFromTopAnalysisEnum : return "ExtrudeFromTopAnalysis";
+ 		case SteadystateSolutionEnum : return "SteadystateSolution";
+-		case SurfaceSlopeAnalysisEnum : return "SurfaceSlopeAnalysis";
++		case L2ProjectionTopAnalysisEnum : return "L2ProjectionTopAnalysis";
+ 		case SurfaceSlopeSolutionEnum : return "SurfaceSlopeSolution";
+-		case SurfaceSlopeXAnalysisEnum : return "SurfaceSlopeXAnalysis";
+-		case SurfaceSlopeYAnalysisEnum : return "SurfaceSlopeYAnalysis";
+ 		case SmoothedSurfaceSlopeXAnalysisEnum : return "SmoothedSurfaceSlopeXAnalysis";
+ 		case SmoothedSurfaceSlopeYAnalysisEnum : return "SmoothedSurfaceSlopeYAnalysis";
+ 		case ThermalAnalysisEnum : return "ThermalAnalysis";
+@@ -379,6 +375,7 @@
+ 		case InputEnum : return "Input";
+ 		case IntInputEnum : return "IntInput";
+ 		case InputToExtrudeEnum : return "InputToExtrude";
++		case InputToL2ProjectEnum : return "InputToL2Project";
+ 		case IntParamEnum : return "IntParam";
+ 		case IntVecParamEnum : return "IntVecParam";
+ 		case TransientParamEnum : return "TransientParam";
+Index: ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16529)
+@@ -308,10 +308,8 @@
+ 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
+ 	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+ 	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
+-	      else if (strcmp(name,"BedSlopeAnalysis")==0) return BedSlopeAnalysisEnum;
++	      else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum;
+ 	      else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
+-	      else if (strcmp(name,"BedSlopeXAnalysis")==0) return BedSlopeXAnalysisEnum;
+-	      else if (strcmp(name,"BedSlopeYAnalysis")==0) return BedSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+ 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
+ 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
+@@ -333,10 +331,8 @@
+ 	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+ 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+-	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
++	      else if (strcmp(name,"L2ProjectionTopAnalysis")==0) return L2ProjectionTopAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+-	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+-	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"SmoothedSurfaceSlopeXAnalysis")==0) return SmoothedSurfaceSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"SmoothedSurfaceSlopeYAnalysis")==0) return SmoothedSurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+@@ -382,13 +378,14 @@
+ 	      else if (strcmp(name,"Element")==0) return ElementEnum;
+ 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+ 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
++	      else if (strcmp(name,"Input")==0) return InputEnum;
++	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
++	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
++	      else if (strcmp(name,"InputToL2Project")==0) return InputToL2ProjectEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Input")==0) return InputEnum;
+-	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+-	      else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
+-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
++	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
+ 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+ 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
+ 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
+@@ -505,13 +502,13 @@
+ 	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+ 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+ 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
++	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
++	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
++	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
+-	      else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
+-	      else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
+-	      else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
++	      if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum;
+ 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
+ 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
+ 	      else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 16529)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsBedSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 16529)
+@@ -1,21 +0,0 @@
+-/*
+- * CreateNodesBedSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesBedSlope(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	}
+-	else if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchData(1,MeshVertexonbedEnum);
+-	}
+-	CreateNodes(pnodes,iomodel,BedSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 16529)
+@@ -1,33 +0,0 @@
+-/*
+- * UpdateElementsBedSlope:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsBedSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 16529)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsBedSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 16529)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsSurfaceSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 16529)
+@@ -1,13 +0,0 @@
+-/*
+- * CreateConstraintsSurfaceSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 16529)
+@@ -1,21 +0,0 @@
+-/*
+- * CreateNodesSurfaceSlope.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	}
+-	else if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchData(1,MeshVertexonbedEnum);
+-	}
+-	CreateNodes(pnodes,iomodel,SurfaceSlopeAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 16529)
+@@ -1,30 +0,0 @@
+-/*
+- * UpdateElementsSurfaceSlope:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsSurfaceSlope(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp	(revision 16529)
+@@ -0,0 +1,14 @@
++/*
++ * CreateConstraintsL2ProjectionBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsL2ProjectionBase(Constraints** pconstraints, IoModel* iomodel){
++
++	/*No constraints*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp	(revision 16529)
+@@ -0,0 +1,21 @@
++/*
++ * CreateNodesL2ProjectionBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesL2ProjectionBase(Nodes** pnodes, IoModel* iomodel){
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchData(1,MeshVertexonbedEnum);
++	}
++	CreateNodes(pnodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp	(revision 16529)
+@@ -0,0 +1,33 @@
++/*
++ * UpdateElementsL2ProjectionBase:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsL2ProjectionBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp	(revision 16529)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsL2ProjectionBase.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsL2ProjectionBase(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase	(revision 16529)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16529)
+@@ -76,17 +76,17 @@
+ void CreateLoadsExtrudeFromTop(Loads** ploads, IoModel* iomodel);
+ void UpdateElementsExtrudeFromTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*bed slope*/
+-void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*L2 projection base*/
++void CreateNodesL2ProjectionBase(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsL2ProjectionBase(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsL2ProjectionBase(Loads** ploads, IoModel* iomodel);
++void UpdateElementsL2ProjectionBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+-/*surface slope*/
+-void CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++/*L2 projection top*/
++void CreateNodesL2ProjectionTop(Nodes** pnodes,IoModel* iomodel);
++void CreateConstraintsL2ProjectionTop(Constraints** pconstraints,IoModel* iomodel);
++void CreateLoadsL2ProjectionTop(Loads** ploads, IoModel* iomodel);
++void UpdateElementsL2ProjectionTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+ 
+ /*thermal:*/
+ void CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16529)
+@@ -91,10 +91,10 @@
+ 		case StressbalanceSIAAnalysisEnum:
+ 			numdofs=2;
+ 			break;
+-		case BedSlopeAnalysisEnum:
++		case L2ProjectionBaseAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+-		case SurfaceSlopeAnalysisEnum:
++		case L2ProjectionTopAnalysisEnum:
+ 			numdofs=1;
+ 			break;
+ 		case ThermalAnalysisEnum:
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp	(revision 16529)
+@@ -0,0 +1,13 @@
++/*! \file CreateLoadsL2ProjectionTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateLoadsL2ProjectionTop(Loads** ploads, IoModel* iomodel){
++
++	/*No loads*/
++
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp	(revision 16529)
+@@ -0,0 +1,13 @@
++/*
++ * CreateConstraintsL2ProjectionTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../ModelProcessorx.h"
++
++void	CreateConstraintsL2ProjectionTop(Constraints** pconstraints, IoModel* iomodel){
++
++	/*No constraints*/
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp	(revision 16529)
+@@ -0,0 +1,21 @@
++/*
++ * CreateNodesL2ProjectionTop.c:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	CreateNodesL2ProjectionTop(Nodes** pnodes, IoModel* iomodel){
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchData(1,MeshVertexonbedEnum);
++	}
++	CreateNodes(pnodes,iomodel,L2ProjectionTopAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp	(revision 16529)
+@@ -0,0 +1,30 @@
++/*
++ * UpdateElementsL2ProjectionTop:
++ */
++
++#include "../../../toolkits/toolkits.h"
++#include "../../../classes/classes.h"
++#include "../../../shared/shared.h"
++#include "../../MeshPartitionx/MeshPartitionx.h"
++#include "../ModelProcessorx.h"
++
++void	UpdateElementsL2ProjectionTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop	(revision 16529)
+
+Property changes on: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++.deps
++.dirstamp
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16529)
+@@ -141,18 +141,18 @@
+ 
+ 
+ 		#ifdef _HAVE_SLOPE_
+-		case BedSlopeAnalysisEnum:
+-			CreateNodesBedSlope(pnodes, iomodel);
+-			CreateConstraintsBedSlope(pconstraints,iomodel);
+-			CreateLoadsBedSlope(ploads,iomodel);
+-			UpdateElementsBedSlope(elements,iomodel,analysis_counter,analysis_type);
++		case L2ProjectionBaseAnalysisEnum:
++			CreateNodesL2ProjectionBase(pnodes, iomodel);
++			CreateConstraintsL2ProjectionBase(pconstraints,iomodel);
++			CreateLoadsL2ProjectionBase(ploads,iomodel);
++			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 
+-		case SurfaceSlopeAnalysisEnum:
+-			CreateNodesSurfaceSlope(pnodes, iomodel);
+-			CreateConstraintsSurfaceSlope(pconstraints,iomodel);
+-			CreateLoadsSurfaceSlope(ploads,iomodel);
+-			UpdateElementsSurfaceSlope(elements,iomodel,analysis_counter,analysis_type);
++		case L2ProjectionTopAnalysisEnum:
++			CreateNodesL2ProjectionTop(pnodes, iomodel);
++			CreateConstraintsL2ProjectionTop(pconstraints,iomodel);
++			CreateLoadsL2ProjectionTop(ploads,iomodel);
++			UpdateElementsL2ProjectionTop(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 		#endif
+ 
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16528)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16529)
+@@ -519,14 +519,14 @@
+ 						 ./cores/dummy_core.cpp
+ #}}}
+ #Slope sources  {{{
+-slope_sources =  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp\
+-					  ./modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp \
+-					  ./modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp\
+-					  ./modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp\
+-					  ./modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp\
+-					  ./modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp \
+-					  ./modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp\
+-					  ./modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp\
++slope_sources =  ./modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp\
++					  ./modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp \
++					  ./modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp\
++					  ./modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp\
++					  ./modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp\
++					  ./modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp \
++					  ./modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp\
++					  ./modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp\
+ 					  ./cores/surfaceslope_core.cpp\
+ 					  ./cores/bedslope_core.cpp
+ #}}}
+Index: ../trunk-jpl/src/c/cores/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/surfaceslope_core.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/cores/surfaceslope_core.cpp	(revision 16529)
+@@ -22,11 +22,16 @@
+ 	if(VerboseSolution()) _printf0_("computing slope...\n");
+ 
+ 	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeXAnalysisEnum);
++	femmodel->SetCurrentConfiguration(L2ProjectionBaseAnalysisEnum);
++
++	femmodel->parameters->SetParam(SurfaceSlopeXEnum,InputToL2ProjectEnum);
+ 	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum);
+-	solutionsequence_linear(femmodel);
+ 
++	if(meshtype!=Mesh2DverticalEnum){
++		femmodel->parameters->SetParam(SurfaceSlopeYEnum,InputToL2ProjectEnum);
++		solutionsequence_linear(femmodel);
++	}
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _printf0_("saving results:\n");
+ 		if(meshtype!=Mesh2DverticalEnum){
+Index: ../trunk-jpl/src/c/cores/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/bedslope_core.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/cores/bedslope_core.cpp	(revision 16529)
+@@ -22,10 +22,13 @@
+ 	if(VerboseSolution()) _printf0_("   computing slope\n");
+ 
+ 	/*Call on core computations: */
+-	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeXAnalysisEnum);
++	femmodel->SetCurrentConfiguration(L2ProjectionBaseAnalysisEnum);
++
++	femmodel->parameters->SetParam(BedSlopeXEnum,InputToL2ProjectEnum);
+ 	solutionsequence_linear(femmodel);
++
+ 	if(meshtype!=Mesh2DverticalEnum){
+-		femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
++		femmodel->parameters->SetParam(BedSlopeYEnum,InputToL2ProjectEnum);
+ 		solutionsequence_linear(femmodel);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 16529)
+@@ -25,26 +25,24 @@
+ 	switch(solutiontype){
+ 
+ 		case StressbalanceSolutionEnum:
+-			numanalyses=5;
++			numanalyses=4;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=StressbalanceAnalysisEnum;
+ 			analyses[1]=StressbalanceVerticalAnalysisEnum;
+ 			analyses[2]=StressbalanceSIAAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
++			analyses[3]=L2ProjectionBaseAnalysisEnum;
+ 			break;
+ 
+ 		case SteadystateSolutionEnum:
+-			numanalyses=8;
++			numanalyses=7;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=StressbalanceAnalysisEnum;
+ 			analyses[1]=StressbalanceVerticalAnalysisEnum;
+ 			analyses[2]=StressbalanceSIAAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
+-			analyses[5]=EnthalpyAnalysisEnum;
+-			analyses[6]=ThermalAnalysisEnum;
+-			analyses[7]=MeltingAnalysisEnum;
++			analyses[3]=L2ProjectionBaseAnalysisEnum;
++			analyses[4]=EnthalpyAnalysisEnum;
++			analyses[5]=ThermalAnalysisEnum;
++			analyses[6]=MeltingAnalysisEnum;
+ 			break;
+ 
+ 		case ThermalSolutionEnum:
+@@ -56,13 +54,12 @@
+ 			break;
+ 
+ 		case HydrologySolutionEnum:
+-			numanalyses=5;
++			numanalyses=4;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=HydrologyShreveAnalysisEnum;
+ 			analyses[1]=HydrologyDCInefficientAnalysisEnum;
+ 			analyses[2]=HydrologyDCEfficientAnalysisEnum;
+-			analyses[3]=SurfaceSlopeAnalysisEnum;
+-			analyses[4]=BedSlopeAnalysisEnum;
++			analyses[3]=L2ProjectionBaseAnalysisEnum;
+ 			break;
+ 
+ 		case MasstransportSolutionEnum:
+@@ -87,19 +84,19 @@
+ 			numanalyses=2;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=BalancevelocityAnalysisEnum;
+-			analyses[1]=SurfaceSlopeAnalysisEnum;
++			analyses[1]=L2ProjectionBaseAnalysisEnum;
+ 			break;
+ 
+ 		case SurfaceSlopeSolutionEnum:
+ 			numanalyses=1;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=SurfaceSlopeAnalysisEnum;
++			analyses[0]=L2ProjectionBaseAnalysisEnum;
+ 			break;
+ 
+ 		case BedSlopeSolutionEnum:
+ 			numanalyses=1;
+ 			analyses=xNew<int>(numanalyses);
+-			analyses[0]=BedSlopeAnalysisEnum;
++			analyses[0]=L2ProjectionBaseAnalysisEnum;
+ 			break;
+ 
+ 		case GiaSolutionEnum:
+@@ -115,21 +112,20 @@
+ 			break;
+ 
+ 		case TransientSolutionEnum:
+-			numanalyses=13;
++			numanalyses=12;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[ 0]=StressbalanceAnalysisEnum;
+ 			analyses[ 1]=StressbalanceVerticalAnalysisEnum;
+ 			analyses[ 2]=StressbalanceSIAAnalysisEnum;
+-			analyses[ 3]=SurfaceSlopeAnalysisEnum;
+-			analyses[ 4]=BedSlopeAnalysisEnum;
+-			analyses[ 5]=ThermalAnalysisEnum;
+-			analyses[ 6]=MeltingAnalysisEnum;
+-			analyses[ 7]=EnthalpyAnalysisEnum;
+-			analyses[ 8]=MasstransportAnalysisEnum;
+-			analyses[ 9]=FreeSurfaceBaseAnalysisEnum;
+-			analyses[10]=FreeSurfaceTopAnalysisEnum;
+-			analyses[11]=ExtrudeFromBaseAnalysisEnum;
+-			analyses[12]=ExtrudeFromTopAnalysisEnum;
++			analyses[ 3]=L2ProjectionBaseAnalysisEnum;
++			analyses[ 4]=ThermalAnalysisEnum;
++			analyses[ 5]=MeltingAnalysisEnum;
++			analyses[ 6]=EnthalpyAnalysisEnum;
++			analyses[ 7]=MasstransportAnalysisEnum;
++			analyses[ 8]=FreeSurfaceBaseAnalysisEnum;
++			analyses[ 9]=FreeSurfaceTopAnalysisEnum;
++			analyses[10]=ExtrudeFromBaseAnalysisEnum;
++			analyses[11]=ExtrudeFromTopAnalysisEnum;
+ 			break;
+ 
+ 		default:
+Index: ../trunk-jpl/src/c/cores/balancevelocity_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/balancevelocity_core.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/cores/balancevelocity_core.cpp	(revision 16529)
+@@ -18,9 +18,9 @@
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+ 	if(VerboseSolution()) _printf0_("computing smoothed slopes:\n");
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeXAnalysisEnum);
++	femmodel->SetCurrentConfiguration(SmoothedSurfaceSlopeXAnalysisEnum);
+ 	solutionsequence_linear(femmodel);
+-	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SmoothedSurfaceSlopeYAnalysisEnum);
++	femmodel->SetCurrentConfiguration(SmoothedSurfaceSlopeYAnalysisEnum);
+ 	solutionsequence_linear(femmodel);
+ 	//surfaceslope_core(femmodel);
+ 
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16529)
+@@ -236,7 +236,7 @@
+ 			return CreateKMatrixDamageEvolution();
+ 			break;
+ 		#endif
+-		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
++		case L2ProjectionBaseAnalysisEnum:
+ 			parameters->FindParam(&meshtype,MeshTypeEnum);
+ 			if(meshtype==Mesh2DverticalEnum){
+ 				return CreateBasalMassMatrix();
+@@ -450,13 +450,13 @@
+ 			return CreatePVectorDamageEvolution();
+ 			break;
+ 		#endif
+-		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
++		case L2ProjectionBaseAnalysisEnum:
+ 			parameters->FindParam(&meshtype,MeshTypeEnum);
+ 			if(meshtype==Mesh2DverticalEnum){
+-				return CreateBasalPVectorSlope();
++				return CreatePVectorL2ProjectionBase();
+ 			}
+ 			else{
+-				return CreatePVectorSlope();
++				return CreatePVectorL2Projection();
+ 			}
+ 			break;
+ 	 	#ifdef _HAVE_MASSTRANSPORT_
+@@ -530,8 +530,8 @@
+ 	return NULL;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreateBasalPVectorSlope{{{*/
+-ElementVector* Tria::CreateBasalPVectorSlope(void){
++/*FUNCTION Tria::CreatePVectorL2ProjectionBase{{{*/
++ElementVector* Tria::CreatePVectorL2ProjectionBase(void){
+ 
+ 	if(!HasEdgeOnBed()) return NULL;
+ 
+@@ -539,21 +539,22 @@
+ 	this->EdgeOnBedIndices(&index1,&index2);
+ 
+ 	Seg* seg=(Seg*)SpawnSeg(index1,index2); 
+-	ElementVector* pe=seg->CreatePVectorSlope();
++	ElementVector* pe=seg->CreatePVectorL2Projection();
+ 	delete seg->material; delete seg;
+ 
+ 	/*clean up and return*/
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::CreatePVectorSlope {{{*/
+-ElementVector* Tria::CreatePVectorSlope(void){
++/*FUNCTION Tria::CreatePVectorL2Projection {{{*/
++ElementVector* Tria::CreatePVectorL2Projection(void){
+ 
+ 	/*Intermediaries */
+-	int        i,analysis_type;
+-	IssmDouble Jdet;
++	int        i,input_enum;
++	IssmDouble Jdet,value;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble slope[2];
++	IssmDouble slopes[2];
++	Input*     input2 = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -563,15 +564,18 @@
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* slope_input=NULL;
+-	if ( (analysis_type==SurfaceSlopeXAnalysisEnum) || (analysis_type==SurfaceSlopeYAnalysisEnum)){
+-		slope_input=inputs->GetInput(SurfaceEnum); _assert_(slope_input);
++	this->parameters->FindParam(&input_enum,InputToL2ProjectEnum);
++	Input* input = inputs->GetInput(input_enum);
++	if(!input){
++		switch(input_enum){
++			case SurfaceSlopeXEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
++			case SurfaceSlopeYEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
++			case BedSlopeXEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
++			case BedSlopeYEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
++			default: _error_("input not found in element");
++		}
+ 	}
+-	if ( (analysis_type==BedSlopeXAnalysisEnum) || (analysis_type==BedSlopeYAnalysisEnum)){
+-		slope_input=inputs->GetInput(BedEnum);     _assert_(slope_input);
+-	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussTria* gauss=new GaussTria(2);
+@@ -582,14 +586,19 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		slope_input->GetInputDerivativeValue(&slope[0],&xyz_list[0][0],gauss);
+-
+-		if( (analysis_type==SurfaceSlopeXAnalysisEnum) || (analysis_type==BedSlopeXAnalysisEnum)){
+-			for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*slope[0]*basis[i];
++		if(input){
++			input->GetInputValue(&value,gauss);
+ 		}
+-		if( (analysis_type==SurfaceSlopeYAnalysisEnum) || (analysis_type==BedSlopeYAnalysisEnum)){
+-			for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*slope[1]*basis[i];
++		else{
++			input2->GetInputDerivativeValue(&slopes[0],&xyz_list[0][0],gauss);
++			switch(input_enum){
++				case SurfaceSlopeXEnum: case BedSlopeXEnum: value = slopes[0]; break;
++				case SurfaceSlopeYEnum: case BedSlopeYEnum: value = slopes[1]; break;
++				default: _error_("case not supported");
++			}
+ 		}
++
++		for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*value*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -1785,18 +1794,10 @@
+ 			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeYEnum);
+ 			break;
+ 		#endif
+-		case BedSlopeXAnalysisEnum:
+-			InputUpdateFromSolutionOneDof(solution,BedSlopeXEnum);
++		case L2ProjectionBaseAnalysisEnum:
++			this->parameters->FindParam(&extrusioninput,InputToL2ProjectEnum);
++			InputUpdateFromSolutionOneDof(solution,extrusioninput);
+ 			break;
+-		case BedSlopeYAnalysisEnum:
+-			InputUpdateFromSolutionOneDof(solution,BedSlopeYEnum);
+-			break;
+-		case SurfaceSlopeXAnalysisEnum:
+-			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeXEnum);
+-			break;
+-		case SurfaceSlopeYAnalysisEnum:
+-			InputUpdateFromSolutionOneDof(solution,SurfaceSlopeYEnum);
+-			break;
+ 		case MasstransportAnalysisEnum:
+ 			InputUpdateFromSolutionMasstransport(solution);
+ 			break;
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16529)
+@@ -211,8 +211,8 @@
+ 		ElementVector* CreatePVectorFreeSurfaceTop1D(void);
+ 		ElementVector* CreatePVectorFreeSurfaceBase(void);
+ 		ElementVector* CreatePVectorFreeSurfaceBase1D(void);
+-		ElementVector* CreatePVectorSlope(void);
+-		ElementVector* CreateBasalPVectorSlope(void);
++		ElementVector* CreatePVectorL2Projection(void);
++		ElementVector* CreatePVectorL2ProjectionBase(void);
+ 		IssmDouble     GetArea(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[3][3],int numpoints);
+ 		int            GetElementType(void);
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16529)
+@@ -446,7 +446,7 @@
+ 			return CreateKMatrixStressbalanceVert();
+ 			break;
+ 		#endif
+-		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
++		case L2ProjectionBaseAnalysisEnum:
+ 			return CreateBasalMassMatrix();
+ 			break;
+ 		case MasstransportAnalysisEnum:
+@@ -483,7 +483,7 @@
+ 			break;
+ 		#endif
+ 		default:
+-			_error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
++			_error_("analysis " << EnumToStringx(analysis_type) << " not supported yet");
+ 	}
+ 
+ 	/*Make compiler happy*/
+@@ -672,8 +672,8 @@
+ 			return CreatePVectorMelting();
+ 			break;
+ 		#endif
+-		case BedSlopeXAnalysisEnum: case SurfaceSlopeXAnalysisEnum: case BedSlopeYAnalysisEnum: case SurfaceSlopeYAnalysisEnum:
+-			return CreatePVectorSlope();
++		case L2ProjectionBaseAnalysisEnum:
++			return CreatePVectorL2ProjectionBase();
+ 			break;
+ 		case MasstransportAnalysisEnum:
+ 			return CreatePVectorMasstransport();
+@@ -755,14 +755,14 @@
+ 	return pe;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::CreatePVectorSlope {{{*/
+-ElementVector* Penta::CreatePVectorSlope(void){
++/*FUNCTION Penta::CreatePVectorL2ProjectionBase {{{*/
++ElementVector* Penta::CreatePVectorL2ProjectionBase(void){
+ 
+ 	if (!IsOnBed()) return NULL;
+ 
+ 	/*Call Tria function*/
+ 	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
+-	ElementVector* pe=tria->CreatePVectorSlope();
++	ElementVector* pe=tria->CreatePVectorL2Projection();
+ 	delete tria->material; delete tria;
+ 
+ 	/*clean up and return*/
+@@ -2200,7 +2200,7 @@
+ /*FUNCTION Penta::InputUpdateFromSolution {{{*/
+ void  Penta::InputUpdateFromSolution(IssmDouble* solution){
+ 
+-	int analysis_type;
++	int analysis_type,inputenum;
+ 
+ 	/*retreive parameters: */
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+@@ -2241,18 +2241,10 @@
+ 		InputUpdateFromSolutionOneDof(solution,BasalforcingsMeltingRateEnum);
+ 		break;
+ 	#endif
+-	case BedSlopeXAnalysisEnum:
+-		InputUpdateFromSolutionOneDofCollapsed(solution,BedSlopeXEnum);
++	case L2ProjectionBaseAnalysisEnum:
++		this->parameters->FindParam(&inputenum,InputToL2ProjectEnum);
++		InputUpdateFromSolutionOneDofCollapsed(solution,inputenum);
+ 		break;
+-	case BedSlopeYAnalysisEnum:
+-		InputUpdateFromSolutionOneDofCollapsed(solution,BedSlopeYEnum);
+-		break;
+-	case SurfaceSlopeXAnalysisEnum:
+-		InputUpdateFromSolutionOneDofCollapsed(solution,SurfaceSlopeXEnum);
+-		break;
+-	case SurfaceSlopeYAnalysisEnum:
+-		InputUpdateFromSolutionOneDofCollapsed(solution,SurfaceSlopeYEnum);
+-		break;
+ 	case MasstransportAnalysisEnum:
+ 		InputUpdateFromSolutionMasstransport(solution);
+ 		break;
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16529)
+@@ -178,7 +178,7 @@
+ 		ElementVector* CreatePVectorMasstransport(void);
+ 		ElementVector* CreatePVectorFreeSurfaceTop(void);
+ 		ElementVector* CreatePVectorFreeSurfaceBase(void);
+-		ElementVector* CreatePVectorSlope(void);
++		ElementVector* CreatePVectorL2ProjectionBase(void);
+ 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble xyz_zero[3][3],IssmDouble xyz_list[6][3],int numpoints);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+ 		void	         GetDofListVelocity(int** pdoflist,int setenum);
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 16529)
+@@ -339,14 +339,15 @@
+ 	return Ke;
+ }
+ /*}}}*/
+-/*FUNCTION Seg::CreatePVectorSlope {{{*/
+-ElementVector* Seg::CreatePVectorSlope(void){
++/*FUNCTION Seg::CreatePVectorL2Projection {{{*/
++ElementVector* Seg::CreatePVectorL2Projection(void){
+ 
+ 	/*Intermediaries */
+-	int        i,analysis_type;
++	int        i,input_enum;
+ 	IssmDouble Jdet;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+-	IssmDouble slope;
++	IssmDouble value;
++	Input*     input2 = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+ 	int numnodes = this->NumberofNodes();
+@@ -356,18 +357,16 @@
+ 	IssmDouble*    basis = xNew<IssmDouble>(numnodes);
+ 
+ 	/*Retrieve all inputs and parameters*/
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+-	Input* slope_input=NULL;
+-	if(analysis_type==SurfaceSlopeXAnalysisEnum){
+-		slope_input=inputs->GetInput(SurfaceEnum); _assert_(slope_input);
++	this->parameters->FindParam(&input_enum,InputToL2ProjectEnum);
++	Input* input = inputs->GetInput(input_enum);
++	if(!input){
++		switch(input_enum){
++			case SurfaceSlopeXEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
++			case BedSlopeXEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
++			default: _error_("input not found in element");
++		}
+ 	}
+-	else if(analysis_type==BedSlopeXAnalysisEnum){
+-		slope_input=inputs->GetInput(BedEnum);     _assert_(slope_input);
+-	}
+-	else{
+-		_error_("Analysis "<<EnumToStringx(analysis_type)<<" not inplemented yet");
+-	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	GaussSeg* gauss=new GaussSeg(2);
+@@ -378,9 +377,14 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		slope_input->GetInputDerivativeValue(&slope,&xyz_list[0][0],gauss);
++		if(input){
++			input->GetInputValue(&value,gauss);
++		}
++		else{
++			input2->GetInputDerivativeValue(&value,&xyz_list[0][0],gauss);
++		}
+ 
+-		for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*slope*basis[i];
++		for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*value*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Elements/Seg.h	(revision 16529)
+@@ -74,7 +74,7 @@
+ 		void        CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){_error_("not implemented yet");};
+ 		void        CreateDVector(Vector<IssmDouble>* df){_error_("not implemented yet");};
+ 		void        CreatePVector(Vector<IssmDouble>* pf){_error_("not implemented yet");};
+-		ElementVector* CreatePVectorSlope(void);
++		ElementVector* CreatePVectorL2Projection(void);
+ 		void        CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("not implemented yet");};
+ 		void        Delta18oParameterization(void){_error_("not implemented yet");};
+ 		int         GetNodeIndex(Node* node){_error_("not implemented yet");};
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16528)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16529)
+@@ -87,8 +87,7 @@
+ 				analysis_type==FreeSurfaceBaseAnalysisEnum || 
+ 				analysis_type==MasstransportAnalysisEnum || 
+ 				analysis_type==MeltingAnalysisEnum || 
+-				analysis_type==BedSlopeAnalysisEnum || 
+-				analysis_type==SurfaceSlopeAnalysisEnum || 
++				analysis_type==L2ProjectionBaseAnalysisEnum || 
+ 				analysis_type==BalancethicknessAnalysisEnum ||
+ 				analysis_type==HydrologyDCInefficientAnalysisEnum ||
+ 				analysis_type==DamageEvolutionAnalysisEnum || 
+@@ -102,7 +101,10 @@
+ 			}
+ 		}
+ 	}
+-	if(analysis_type==FreeSurfaceTopAnalysisEnum){
++	if(
++				analysis_type==FreeSurfaceTopAnalysisEnum ||
++				analysis_type==L2ProjectionTopAnalysisEnum
++				){
+ 		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16528)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 16529)
+@@ -9,7 +9,7 @@
+ 
+ %Get solution and associated analyses
+ solution=md.private.solution;
+-[analyses,numanalyses]=AnalysisConfiguration(solution);
++[analyses]=AnalysisConfiguration(solution);
+ 
+ %Go through a model field, check that it is a class, and call checkconsistency
+ fields=properties('model');
+@@ -36,68 +36,54 @@
+ end
+ end
+ 
+-function [analyses,numanalyses]=AnalysisConfiguration(solutiontype), % {{{
++function [analyses]=AnalysisConfiguration(solutiontype), % {{{
+ %ANALYSISCONFIGURATION - return type of analyses, number of analyses 
+ %
+ %   Usage:
+-%      [analyses, numanalyses]=AnalysisConfiguration(solutiontype);
++%      [analyses]=AnalysisConfiguration(solutiontype);
+ 
+ switch solutiontype,
+ 
+ 	case StressbalanceSolutionEnum(),
+-		numanalyses=5;
+-		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();L2ProjectionBaseAnalysisEnum()];
+ 
+ 	case SteadystateSolutionEnum(),
+-		numanalyses=7; 
+-		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();L2ProjectionBaseAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
+ 
+ 	case ThermalSolutionEnum(),
+-		numanalyses=2; 
+ 		analyses=[EnthalpyAnalysisEnum;ThermalAnalysisEnum();MeltingAnalysisEnum()];
+ 
+ 	case MasstransportSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[MasstransportAnalysisEnum()];
+ 
+ 	case BalancethicknessSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[BalancethicknessAnalysisEnum()];
+ 
+ 	case BalancethicknessSoftSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[BalancethicknessAnalysisEnum()];
+ 
+ 	case BalancevelocitySolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[BalancevelocityAnalysisEnum()];
+ 
+ 	case SurfaceSlopeSolutionEnum(),
+-		numanalyses=1; 
+-		analyses=[SurfaceSlopeAnalysisEnum()];
++		analyses=[L2ProjectionBaseAnalysisEnum()];
+ 
+ 	case BedSlopeSolutionEnum(),
+-		numanalyses=1; 
+-		analyses=[BedSlopeAnalysisEnum()];
++		analyses=[L2ProjectionBaseAnalysisEnum()];
+ 
+ 	case GiaSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[GiaAnalysisEnum()];
+ 
+ 	case TransientSolutionEnum(),
+-		numanalyses=9; 
+-		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
++		analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();L2ProjectionBaseAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
+ 
+ 	case FlaimSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[FlaimAnalysisEnum()];
+ 
+ 	case HydrologySolutionEnum(),
+-		numanalyses=3; 
+-		analyses=[BedSlopeAnalysisEnum();SurfaceSlopeAnalysisEnum();HydrologyShreveAnalysisEnum();HydrologyDCInefficientAnalysisEnum();HydrologyDCEfficientAnalysisEnum()];
++		analyses=[L2ProjectionBaseAnalysisEnum();HydrologyShreveAnalysisEnum();HydrologyDCInefficientAnalysisEnum();HydrologyDCEfficientAnalysisEnum()];
+ 	
+ 	case DamageEvolutionSolutionEnum(),
+-		numanalyses=1; 
+ 		analyses=[DamageEvolutionAnalysisEnum()];
+ 
+ 	otherwise
+Index: ../trunk-jpl/src/m/enum/BedSlopeAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BedSlopeAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/BedSlopeAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=BedSlopeAnalysisEnum()
+-%BEDSLOPEANALYSISENUM - Enum of BedSlopeAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=BedSlopeAnalysisEnum()
+-
+-macro=StringToEnum('BedSlopeAnalysis');
+Index: ../trunk-jpl/src/m/enum/BedSlopeXAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BedSlopeXAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/BedSlopeXAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=BedSlopeXAnalysisEnum()
+-%BEDSLOPEXANALYSISENUM - Enum of BedSlopeXAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=BedSlopeXAnalysisEnum()
+-
+-macro=StringToEnum('BedSlopeXAnalysis');
+Index: ../trunk-jpl/src/m/enum/SurfaceSlopeYAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SurfaceSlopeYAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/SurfaceSlopeYAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=SurfaceSlopeYAnalysisEnum()
+-%SURFACESLOPEYANALYSISENUM - Enum of SurfaceSlopeYAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SurfaceSlopeYAnalysisEnum()
+-
+-macro=StringToEnum('SurfaceSlopeYAnalysis');
+Index: ../trunk-jpl/src/m/enum/BedSlopeYAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/BedSlopeYAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/BedSlopeYAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=BedSlopeYAnalysisEnum()
+-%BEDSLOPEYANALYSISENUM - Enum of BedSlopeYAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=BedSlopeYAnalysisEnum()
+-
+-macro=StringToEnum('BedSlopeYAnalysis');
+Index: ../trunk-jpl/src/m/enum/SurfaceSlopeXAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SurfaceSlopeXAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/SurfaceSlopeXAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=SurfaceSlopeXAnalysisEnum()
+-%SURFACESLOPEXANALYSISENUM - Enum of SurfaceSlopeXAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SurfaceSlopeXAnalysisEnum()
+-
+-macro=StringToEnum('SurfaceSlopeXAnalysis');
+Index: ../trunk-jpl/src/m/enum/SurfaceSlopeAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SurfaceSlopeAnalysisEnum.m	(revision 16528)
++++ ../trunk-jpl/src/m/enum/SurfaceSlopeAnalysisEnum.m	(revision 16529)
+@@ -1,11 +0,0 @@
+-function macro=SurfaceSlopeAnalysisEnum()
+-%SURFACESLOPEANALYSISENUM - Enum of SurfaceSlopeAnalysis
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+-%            Please read src/c/shared/Enum/README for more information
+-%
+-%   Usage:
+-%      macro=SurfaceSlopeAnalysisEnum()
+-
+-macro=StringToEnum('SurfaceSlopeAnalysis');
+Index: ../trunk-jpl/src/m/enum/InputToL2ProjectEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/InputToL2ProjectEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/InputToL2ProjectEnum.m	(revision 16529)
+@@ -0,0 +1,11 @@
++function macro=InputToL2ProjectEnum()
++%INPUTTOL2PROJECTENUM - Enum of InputToL2Project
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=InputToL2ProjectEnum()
++
++macro=StringToEnum('InputToL2Project');
+Index: ../trunk-jpl/src/m/enum/L2ProjectionBaseAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/L2ProjectionBaseAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/L2ProjectionBaseAnalysisEnum.m	(revision 16529)
+@@ -0,0 +1,11 @@
++function macro=L2ProjectionBaseAnalysisEnum()
++%L2PROJECTIONBASEANALYSISENUM - Enum of L2ProjectionBaseAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=L2ProjectionBaseAnalysisEnum()
++
++macro=StringToEnum('L2ProjectionBaseAnalysis');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16528)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16529)
+@@ -294,10 +294,8 @@
+ def BalancethicknessSoftSolutionEnum(): return StringToEnum("BalancethicknessSoftSolution")[0]
+ def BalancevelocityAnalysisEnum(): return StringToEnum("BalancevelocityAnalysis")[0]
+ def BalancevelocitySolutionEnum(): return StringToEnum("BalancevelocitySolution")[0]
+-def BedSlopeAnalysisEnum(): return StringToEnum("BedSlopeAnalysis")[0]
++def L2ProjectionBaseAnalysisEnum(): return StringToEnum("L2ProjectionBaseAnalysis")[0]
+ def BedSlopeSolutionEnum(): return StringToEnum("BedSlopeSolution")[0]
+-def BedSlopeXAnalysisEnum(): return StringToEnum("BedSlopeXAnalysis")[0]
+-def BedSlopeYAnalysisEnum(): return StringToEnum("BedSlopeYAnalysis")[0]
+ def DamageEvolutionSolutionEnum(): return StringToEnum("DamageEvolutionSolution")[0]
+ def DamageEvolutionAnalysisEnum(): return StringToEnum("DamageEvolutionAnalysis")[0]
+ def StressbalanceAnalysisEnum(): return StringToEnum("StressbalanceAnalysis")[0]
+@@ -319,10 +317,8 @@
+ def ExtrudeFromBaseAnalysisEnum(): return StringToEnum("ExtrudeFromBaseAnalysis")[0]
+ def ExtrudeFromTopAnalysisEnum(): return StringToEnum("ExtrudeFromTopAnalysis")[0]
+ def SteadystateSolutionEnum(): return StringToEnum("SteadystateSolution")[0]
+-def SurfaceSlopeAnalysisEnum(): return StringToEnum("SurfaceSlopeAnalysis")[0]
++def L2ProjectionTopAnalysisEnum(): return StringToEnum("L2ProjectionTopAnalysis")[0]
+ def SurfaceSlopeSolutionEnum(): return StringToEnum("SurfaceSlopeSolution")[0]
+-def SurfaceSlopeXAnalysisEnum(): return StringToEnum("SurfaceSlopeXAnalysis")[0]
+-def SurfaceSlopeYAnalysisEnum(): return StringToEnum("SurfaceSlopeYAnalysis")[0]
+ def SmoothedSurfaceSlopeXAnalysisEnum(): return StringToEnum("SmoothedSurfaceSlopeXAnalysis")[0]
+ def SmoothedSurfaceSlopeYAnalysisEnum(): return StringToEnum("SmoothedSurfaceSlopeYAnalysis")[0]
+ def ThermalAnalysisEnum(): return StringToEnum("ThermalAnalysis")[0]
+@@ -371,6 +367,7 @@
+ def InputEnum(): return StringToEnum("Input")[0]
+ def IntInputEnum(): return StringToEnum("IntInput")[0]
+ def InputToExtrudeEnum(): return StringToEnum("InputToExtrude")[0]
++def InputToL2ProjectEnum(): return StringToEnum("InputToL2Project")[0]
+ def IntParamEnum(): return StringToEnum("IntParam")[0]
+ def IntVecParamEnum(): return StringToEnum("IntVecParam")[0]
+ def TransientParamEnum(): return StringToEnum("TransientParam")[0]
+Index: ../trunk-jpl/src/m/enum/L2ProjectionTopAnalysisEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/L2ProjectionTopAnalysisEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/L2ProjectionTopAnalysisEnum.m	(revision 16529)
+@@ -0,0 +1,11 @@
++function macro=L2ProjectionTopAnalysisEnum()
++%L2PROJECTIONTOPANALYSISENUM - Enum of L2ProjectionTopAnalysis
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
++%            Please read src/c/shared/Enum/README for more information
++%
++%   Usage:
++%      macro=L2ProjectionTopAnalysisEnum()
++
++macro=StringToEnum('L2ProjectionTopAnalysis');
Index: issm/oecreview/Archive/16133-16554/ISSM-16529-16530.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16529-16530.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16529-16530.diff	(revision 16556)
@@ -0,0 +1,139 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh	(revision 16529)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh	(revision 16530)
+@@ -1,61 +0,0 @@
+-#!/bin/bash
+-
+-#Some cleanup
+-rm -rf install petsc-3.4.2 src
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
+-
+-#Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
+-
+-#configure
+-cd src
+-./config/configure.py \
+- --prefix="$ISSM_DIR/externalpackages/petsc/install" \
+- --PETSC_ARCH="$ISSM_ARCH" \
+- --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+- --with-batch=1  \
+- --with-debugging=0 \
+- --with-shared-libraries=1 \
+- --known-mpi-shared-libraries=1 \
+- --with-mpi=1 \
+- --with-mpi-lib="/nasa/mvapich2/1.6.sles11/gcc/lib/libmpich.a"\
+- --with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
+- --download-f-blas-lapack=yes \
+- --download-scalapack=yes \
+- --download-blacs=yes \
+- --download-mumps=yes \
+- --download-metis=yes \
+- --download-parmetis=yes \
+- --download-trilinos=yes \
+- --download-euclid=yes \
+- --download-hypre=yes \
+- --COPTFLAGS="-lmpich" \
+- --FOPTFLAGS="-lmpich" \
+- --CXXOPTFLAGS="-lmpich"
+-
+-#prepare script to reconfigure petsc
+-cat > script.queue << EOF
+-#PBS -S /bin/bash
+-#PBS -l select=1:ncpus=1:model=wes 
+-#PBS -l walltime=200 
+-#PBS -W group_list=s1010
+-#PBS -m e 
+-
+-. /usr/share/modules/init/bash 
+-module load mpi-mvapich2/1.6/gcc
+-module load gcc/4.7.0
+-
+-export PATH="$PATH:." 
+-export MPI_GROUP_MAX=64 
+-mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
+-EOF
+-
+-#print instructions
+-echo "== Now: cd src/ "
+-echo "== qsub -q devel script.queue "
+-echo "== Then run reconfigure script generated by PETSc and follow instructions"
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh	(revision 16530)
+@@ -0,0 +1,61 @@
++#!/bin/bash
++
++#Some cleanup
++rm -rf install petsc-3.4.2 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
++
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --PETSC_ARCH="$ISSM_ARCH" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-batch=1  \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --with-mpi-lib="/nasa/mvapich2/1.6.sles11/gcc/lib/libmpich.a"\
++ --with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
++ --download-f-blas-lapack=yes \
++ --download-scalapack=yes \
++ --download-blacs=yes \
++ --download-mumps=yes \
++ --download-metis=yes \
++ --download-parmetis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-hypre=yes \
++ --COPTFLAGS="-lmpich" \
++ --FOPTFLAGS="-lmpich" \
++ --CXXOPTFLAGS="-lmpich"
++
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
++#PBS -S /bin/bash
++#PBS -l select=1:ncpus=1:model=wes 
++#PBS -l walltime=200 
++#PBS -W group_list=s1010
++#PBS -m e 
++
++. /usr/share/modules/init/bash 
++module load mpi-mvapich2/1.6/gcc
++module load gcc/4.7.0
++
++export PATH="$PATH:." 
++export MPI_GROUP_MAX=64 
++mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
++EOF
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub -q devel script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16530-16531.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16530-16531.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16530-16531.diff	(revision 16556)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh	(revision 16531)
+@@ -0,0 +1,61 @@
++#!/bin/bash
++
++#Some cleanup
++rm -rf install petsc-3.4.2 src
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.4.2.tar.gz
++mv petsc-3.4.2/* src/
++rm -rf petsc-3.4.2
++
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --PETSC_ARCH="$ISSM_ARCH" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-batch=1  \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --with-mpi-lib="/nasa/mvapich2/1.4.1/gcc.sles11/lib/libmpich.a"\
++ --with-mpi-include="/nasa/mvapich2/1.4.1/gcc.sles11/include"\
++ --download-f-blas-lapack=yes \
++ --download-scalapack=yes \
++ --download-blacs=yes \
++ --download-mumps=yes \
++ --download-metis=yes \
++ --download-parmetis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-hypre=yes \
++ --COPTFLAGS="-lmpich" \
++ --FOPTFLAGS="-lmpich" \
++ --CXXOPTFLAGS="-lmpich"
++
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
++#PBS -S /bin/bash
++#PBS -l select=1:ncpus=1:model=wes 
++#PBS -l walltime=200 
++#PBS -W group_list=s1010
++#PBS -m e 
++
++. /usr/share/modules/init/bash 
++module load mpi-mvapich2/1.4.1/gcc
++module load gcc/4.4.4
++
++export PATH="$PATH:." 
++export MPI_GROUP_MAX=64 
++mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
++EOF
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub -q devel script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16531-16532.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16531-16532.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16531-16532.diff	(revision 16556)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16531)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 16532)
+@@ -6,61 +6,49 @@
+ 	ANALYSISCONFIGURATION - return type of analyses, number of analyses 
+ 
+ 		Usage:
+-			[analyses, numanalyses]=AnalysisConfiguration(solutiontype);
++			[analyses]=AnalysisConfiguration(solutiontype);
+ 	"""
+ 
+ 	if   solutiontype == StressbalanceSolutionEnum():
+-		numanalyses=5
+-		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum()]
+ 
+ 	elif solutiontype == SteadystateSolutionEnum():
+-		numanalyses=7 
+-		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+ 
+ 	elif solutiontype == ThermalSolutionEnum():
+-		numanalyses=2 
+ 		analyses=[EnthalpyAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+ 
+ 	elif solutiontype == MasstransportSolutionEnum():
+-		numanalyses=1 
+ 		analyses=[MasstransportAnalysisEnum()]
+ 
+ 	elif solutiontype == BalancethicknessSolutionEnum():
+-		numanalyses=1 
+ 		analyses=[BalancethicknessAnalysisEnum()]
+ 
+ 	elif solutiontype == SurfaceSlopeSolutionEnum():
+-		numanalyses=1 
+-		analyses=[SurfaceSlopeAnalysisEnum()]
++		analyses=[L2ProjectionBaseAnalysisEnum()]
+ 
+ 	elif solutiontype == BalancevelocitySolutionEnum():
+-		numanalyses=1 
+ 		analyses=[BalancevelocityAnalysisEnum()]
+ 
+ 	elif solutiontype == BedSlopeSolutionEnum():
+-		numanalyses=1 
+-		analyses=[BedSlopeAnalysisEnum()]
++		analyses=[L2ProjectionBaseAnalysisEnum()]
+ 
+ 	elif solutiontype == GiaSolutionEnum():
+-		numanalyses=1
+ 		analyses=[GiaAnalysisEnum()]
+ 
+ 	elif solutiontype == TransientSolutionEnum():
+-		numanalyses=9 
+-		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum()]
++		analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum()]
+ 
+ 	elif solutiontype == FlaimSolutionEnum():
+-		numanalyses=1 
+ 		analyses=[FlaimAnalysisEnum()]
+ 
+ 	elif solutiontype == HydrologySolutionEnum():
+-		numanalyses=3 
+-		analyses=[BedSlopeAnalysisEnum(),SurfaceSlopeAnalysisEnum(),HydrologyShreveAnalysisEnum(),HydrologyDCInefficientAnalysisEnum(),HydrologyDCEfficientAnalysisEnum()]
++		analyses=[L2ProjectionBaseAnalysisEnum(),HydrologyShreveAnalysisEnum(),HydrologyDCInefficientAnalysisEnum(),HydrologyDCEfficientAnalysisEnum()]
+ 
+ 	else:
+ 		raise TypeError("solution type: '%s' not supported yet!" % EnumToString(solutiontype)[0])
+ 
+-	return analyses,numanalyses
++	return analyses
+ #}}}
+ 
+ def ismodelselfconsistent(md):
+@@ -76,7 +64,7 @@
+ 
+ 	#Get solution and associated analyses
+ 	solution=md.private.solution
+-	analyses,numanalyses=AnalysisConfiguration(solution)
++	analyses=AnalysisConfiguration(solution)
+ 
+ 	#Go through a model fields, check that it is a class, and call checkconsistency
+ 	fields=vars(md)
Index: issm/oecreview/Archive/16133-16554/ISSM-16532-16533.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16532-16533.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16532-16533.diff	(revision 16556)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16532)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16533)
+@@ -142,6 +142,12 @@
+ 		case BalancevelocityAnalysisEnum:
+ 			numdofs=1;
+ 			break;
++		case SmoothedSurfaceSlopeXAnalysisEnum:
++			numdofs=1;
++			break;
++		case SmoothedSurfaceSlopeYAnalysisEnum:
++			numdofs=1;
++			break;
+ 		default:
+ 			_error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16532)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16533)
+@@ -119,6 +119,18 @@
+ 			CreateLoadsBalancevelocity(ploads,iomodel);
+ 			UpdateElementsBalancevelocity(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
++		case SmoothedSurfaceSlopeXAnalysisEnum:
++			iomodel->FetchData(1,MeshVertexonbedEnum);
++			CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeXAnalysisEnum,P1Enum);
++			iomodel->DeleteData(1,MeshVertexonbedEnum);
++			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
++			break;
++		case SmoothedSurfaceSlopeYAnalysisEnum:
++			iomodel->FetchData(1,MeshVertexonbedEnum);
++			CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeYAnalysisEnum,P1Enum);
++			iomodel->DeleteData(1,MeshVertexonbedEnum);
++			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
++			break;
+ 		#endif
+ 
+ 		#ifdef _HAVE_GIA_
+Index: ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 16532)
++++ ../trunk-jpl/src/c/cores/AnalysisConfiguration.cpp	(revision 16533)
+@@ -81,10 +81,11 @@
+ 			break;
+ 
+ 		case BalancevelocitySolutionEnum:
+-			numanalyses=2;
++			numanalyses=3;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=BalancevelocityAnalysisEnum;
+-			analyses[1]=L2ProjectionBaseAnalysisEnum;
++			analyses[1]=SmoothedSurfaceSlopeXAnalysisEnum;
++			analyses[2]=SmoothedSurfaceSlopeYAnalysisEnum;
+ 			break;
+ 
+ 		case SurfaceSlopeSolutionEnum:
Index: issm/oecreview/Archive/16133-16554/ISSM-16533-16534.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16533-16534.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16533-16534.diff	(revision 16556)
@@ -0,0 +1,1632 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file StressbalanceSIAAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _StressbalanceSIAAnalysis_
++#define _StressbalanceSIAAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class StressbalanceSIAAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./HydrologyShreveAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int HydrologyShreveAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./BalancethicknessSoftAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int BalancethicknessSoftAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	_error_("not implemented");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file StressbalanceAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _StressbalanceAnalysis_
++#define _StressbalanceAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class StressbalanceAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file HydrologyDCInefficientAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _HydrologyDCInefficientAnalysis_
++#define _HydrologyDCInefficientAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class HydrologyDCInefficientAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./BalancethicknessAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int BalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file ThermalAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _THERMALANALYSIS_
++#define _THERMALANALYSIS_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class ThermalAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./HydrologyDCEfficientAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int HydrologyDCEfficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file ExtrudeFromBaseAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _ExtrudeFromBaseAnalysis_
++#define _ExtrudeFromBaseAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class ExtrudeFromBaseAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./AdjointHorizAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int AdjointHorizAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	_error_("not implemented");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./BalancevelocityAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int BalancevelocityAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file MeltingAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _MeltingAnalysis_
++#define _MeltingAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class MeltingAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file GiaAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _GiaAnalysis_
++#define _GiaAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class GiaAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./L2ProjectionBaseAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,47 @@
++/*
++* \file EnumToAnalysis.cpp
++* \brief: output class depending on enum
++*
++*   WARNING: DO NOT MODIFY THIS FILE
++*            this file has been automatically generated by Synchronize.sh
++*            Please read README for more information
++*/
++
++#include "./analyses.h"
++#include "../shared/shared.h"
++
++Analysis* EnumToAnalysis(int analysis_enum){
++
++	switch(analysis_enum){
++		case AdjointBalancethicknessAnalysisEnum : return new AdjointBalancethicknessAnalysis();
++		case AdjointHorizAnalysisEnum : return new AdjointHorizAnalysis();
++		case BalancethicknessAnalysisEnum : return new BalancethicknessAnalysis();
++		case BalancethicknessSoftAnalysisEnum : return new BalancethicknessSoftAnalysis();
++		case BalancevelocityAnalysisEnum : return new BalancevelocityAnalysis();
++		case L2ProjectionBaseAnalysisEnum : return new L2ProjectionBaseAnalysis();
++		case DamageEvolutionAnalysisEnum : return new DamageEvolutionAnalysis();
++		case StressbalanceAnalysisEnum : return new StressbalanceAnalysis();
++		case StressbalanceSIAAnalysisEnum : return new StressbalanceSIAAnalysis();
++		case StressbalanceVerticalAnalysisEnum : return new StressbalanceVerticalAnalysis();
++		case EnthalpyAnalysisEnum : return new EnthalpyAnalysis();
++		case HydrologyShreveAnalysisEnum : return new HydrologyShreveAnalysis();
++		case HydrologyDCInefficientAnalysisEnum : return new HydrologyDCInefficientAnalysis();
++		case HydrologyDCEfficientAnalysisEnum : return new HydrologyDCEfficientAnalysis();
++		case MeltingAnalysisEnum : return new MeltingAnalysis();
++		case MasstransportAnalysisEnum : return new MasstransportAnalysis();
++		case FreeSurfaceBaseAnalysisEnum : return new FreeSurfaceBaseAnalysis();
++		case FreeSurfaceTopAnalysisEnum : return new FreeSurfaceTopAnalysis();
++		case ExtrudeFromBaseAnalysisEnum : return new ExtrudeFromBaseAnalysis();
++		case ExtrudeFromTopAnalysisEnum : return new ExtrudeFromTopAnalysis();
++		case ThermalAnalysisEnum : return new ThermalAnalysis();
++		#ifdef _HAVE_GIA_
++		case GiaAnalysisEnum : return new GiaAnalysis();
++		#endif
++		#ifdef _HAVE_MESHDEFORMATION_
++		case MeshdeformationAnalysisEnum : return new MeshdeformationAnalysis();
++		#endif
++		case SmoothedSurfaceSlopeXAnalysisEnum: return new SmoothedSurfaceSlopeXAnalysis();
++		case SmoothedSurfaceSlopeYAnalysisEnum: return new SmoothedSurfaceSlopeYAnalysis();
++		default : _error_("enum provided not supported ("<<EnumToStringx(analysis_enum)<<")");
++	}
++}
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./FreeSurfaceTopAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file AdjointBalancethicknessAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _AdjointBalancethicknessAnalysis_
++#define _AdjointBalancethicknessAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class AdjointBalancethicknessAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./StressbalanceVerticalAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/Analysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Analysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/Analysis.h	(revision 16534)
+@@ -0,0 +1,15 @@
++/*!\file:  Analysis.h
++ * \brief abstract class for Analysis objects
++ */ 
++
++#ifndef _ANALYSIS_H_
++#define _ANALYSIS_H_
++
++class Analysis{
++
++	public: 
++
++		virtual         ~Analysis(){};
++		virtual int DofsPerNode(int** doflist,int meshtype,int approximation)=0;
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file MasstransportAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _MasstransportAnalysis_
++#define _MasstransportAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class MasstransportAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./StressbalanceSIAAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int StressbalanceSIAAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 2;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file DamageEvolutionAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _DamageEvolutionAnalysis_
++#define _DamageEvolutionAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class DamageEvolutionAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,67 @@
++#include "./StressbalanceAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int StressbalanceAnalysis::DofsPerNode(int** pdoftype,int meshtype,int approximation){/*{{{*/
++
++	/*output*/
++	int *doftype = NULL;
++	int  numdofs;
++
++	switch(approximation){
++		case SSAApproximationEnum:  numdofs =2; break;
++		case L1L2ApproximationEnum: numdofs =2; break;
++		case HOApproximationEnum:   numdofs =2; break;
++		case SIAApproximationEnum:  numdofs =2; break;
++		case FSvelocityEnum:
++			 switch(meshtype){
++				 case Mesh3DEnum:         numdofs=3; break;
++				 case Mesh2DverticalEnum: numdofs=2; break;
++				 default: _error_("mesh type not supported yet");
++			}
++			break;
++		case FSpressureEnum: numdofs=1; break;
++		case NoneApproximationEnum:
++			 switch(meshtype){
++				 case Mesh3DEnum:         numdofs=4; break;
++				 case Mesh2DverticalEnum: numdofs=3; break;
++				 default: _error_("mesh type not supported yet");
++			}
++			break;
++		case SSAHOApproximationEnum:
++			numdofs=4;
++			doftype=xNew<int>(numdofs);
++			doftype[0]=SSAApproximationEnum;
++			doftype[1]=SSAApproximationEnum;
++			doftype[2]=HOApproximationEnum;
++			doftype[3]=HOApproximationEnum;
++			break;
++		case HOFSApproximationEnum:
++			numdofs=5;
++			doftype=xNew<int>(numdofs);
++			doftype[0]=HOApproximationEnum;
++			doftype[1]=HOApproximationEnum;
++			doftype[2]=FSvelocityEnum;
++			doftype[3]=FSvelocityEnum;
++			doftype[4]=FSvelocityEnum;
++			break;
++		case SSAFSApproximationEnum:
++			numdofs=5;
++			doftype=xNew<int>(numdofs);
++			doftype[0]=SSAApproximationEnum;
++			doftype[1]=SSAApproximationEnum;
++			doftype[2]=FSvelocityEnum;
++			doftype[3]=FSvelocityEnum;
++			doftype[4]=FSvelocityEnum;
++			break;
++		default:
++			_error_("Approximation " << EnumToStringx(approximation) << " not implemented yet");
++	}
++
++	/*Assign output pointer and return*/
++	*pdoftype = doftype;
++	return numdofs;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file MeshdeformationAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _MeshdeformationAnalysis_
++#define _MeshdeformationAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class MeshdeformationAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file EnthalpyAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _EnthalpyAnalysis_
++#define _EnthalpyAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class EnthalpyAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file FreeSurfaceBaseAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _FreeSurfaceBaseAnalysis_
++#define _FreeSurfaceBaseAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class FreeSurfaceBaseAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file SmoothedSurfaceSlopeXAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _SmoothedSurfaceSlopeXAnalysis_
++#define _SmoothedSurfaceSlopeXAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class SmoothedSurfaceSlopeXAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./HydrologyDCInefficientAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./ThermalAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int ThermalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file SmoothedSurfaceSlopeYAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _SmoothedSurfaceSlopeYAnalysis_
++#define _SmoothedSurfaceSlopeYAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class SmoothedSurfaceSlopeYAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file ExtrudeFromTopAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _ExtrudeFromTopAnalysis_
++#define _ExtrudeFromTopAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class ExtrudeFromTopAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./ExtrudeFromBaseAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int ExtrudeFromBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./MeltingAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int MeltingAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./GiaAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int GiaAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file BalancethicknessSoftAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _BalancethicknessSoftAnalysis_
++#define _BalancethicknessSoftAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class BalancethicknessSoftAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file HydrologyShreveAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _HydrologyShreveAnalysis_
++#define _HydrologyShreveAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class HydrologyShreveAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file BalancethicknessAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _BalancethicknessAnalysis_
++#define _BalancethicknessAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class BalancethicknessAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file HydrologyDCEfficientAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _HydrologyDCEfficientAnalysis_
++#define _HydrologyDCEfficientAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class HydrologyDCEfficientAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file AdjointHorizAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _AdjointHorizAnalysis_
++#define _AdjointHorizAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class AdjointHorizAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file BalancevelocityAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _BalancevelocityAnalysis_
++#define _BalancevelocityAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class BalancevelocityAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./AdjointBalancethicknessAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processor*/
++int AdjointBalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file L2ProjectionBaseAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _L2ProjectionBaseAnalysis_
++#define _L2ProjectionBaseAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class L2ProjectionBaseAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16534)
+@@ -0,0 +1,8 @@
++#ifndef _ENUMTOANALYSIS_
++#define _ENUMTOANALYSIS_
++
++class Analysis;
++
++Analysis* EnumToAnalysis(int analysis_enum);
++
++#endif
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./MasstransportAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int MasstransportAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/analyses.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/analyses.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/analyses.h	(revision 16534)
+@@ -0,0 +1,37 @@
++/*
++ * analyses.h: 
++ */
++
++#ifndef _ANALYSES_H_
++#define _ANALYSES_H_
++
++#include "./Analysis.h"
++
++#include "./AdjointBalancethicknessAnalysis.h"
++#include "./AdjointHorizAnalysis.h"
++#include "./BalancethicknessAnalysis.h"
++#include "./BalancethicknessSoftAnalysis.h"
++#include "./BalancevelocityAnalysis.h"
++#include "./DamageEvolutionAnalysis.h"
++#include "./EnthalpyAnalysis.h"
++#include "./ExtrudeFromBaseAnalysis.h"
++#include "./ExtrudeFromTopAnalysis.h"
++#include "./FreeSurfaceBaseAnalysis.h"
++#include "./FreeSurfaceTopAnalysis.h"
++#include "./GiaAnalysis.h"
++#include "./HydrologyDCEfficientAnalysis.h"
++#include "./HydrologyDCInefficientAnalysis.h"
++#include "./HydrologyShreveAnalysis.h"
++#include "./MasstransportAnalysis.h"
++#include "./MeltingAnalysis.h"
++#include "./MeshdeformationAnalysis.h"
++#include "./SmoothedSurfaceSlopeXAnalysis.h"
++#include "./SmoothedSurfaceSlopeYAnalysis.h"
++#include "./StressbalanceAnalysis.h"
++#include "./StressbalanceSIAAnalysis.h"
++#include "./StressbalanceVerticalAnalysis.h"
++#include "./L2ProjectionBaseAnalysis.h"
++#include "./ThermalAnalysis.h"
++
++#include "EnumToAnalysis.h"
++#endif
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file FreeSurfaceTopAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _FreeSurfaceTopAnalysis_
++#define _FreeSurfaceTopAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class FreeSurfaceTopAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./DamageEvolutionAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int DamageEvolutionAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./EnthalpyAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int EnthalpyAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./MeshdeformationAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int MeshdeformationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	_error_("not implemented");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./FreeSurfaceBaseAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./SmoothedSurfaceSlopeXAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int SmoothedSurfaceSlopeXAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./ExtrudeFromTopAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int ExtrudeFromTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 0)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16534)
+@@ -0,0 +1,10 @@
++#include "./SmoothedSurfaceSlopeYAnalysis.h"
++#include "../toolkits/toolkits.h"
++#include "../classes/classes.h"
++#include "../shared/shared.h"
++#include "../modules/modules.h"
++
++/*Model processing*/
++int SmoothedSurfaceSlopeYAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++	return 1;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 0)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16534)
+@@ -0,0 +1,16 @@
++/*! \file StressbalanceVerticalAnalysis.h 
++ *  \brief: header file for generic external result object
++ */
++
++#ifndef _StressbalanceVerticalAnalysis_
++#define _StressbalanceVerticalAnalysis_
++
++/*Headers*/
++#include "./Analysis.h"
++
++class StressbalanceVerticalAnalysis: public Analysis{
++
++	public:
++		int DofsPerNode(int** doflist,int meshtype,int approximation);
++};
++#endif
+Index: ../trunk-jpl/src/c/shared/Enum/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16533)
++++ ../trunk-jpl/src/c/shared/Enum/Synchronize.sh	(revision 16534)
+@@ -103,6 +103,38 @@
+ }
+ END
+ #}}}
++##Build EnumToAnalysis.cpp {{{
++##Header
++#cat <<END > $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
++#/*
++#* \file EnumToAnalysis.cpp
++#* \brief: output class depending on enum
++#*
++#*   WARNING: DO NOT MODIFY THIS FILE
++#*            this file has been automatically generated by Synchronize.sh
++#*            Please read README for more information
++#*/
++#
++##include "./analyses.h"
++##include "../shared/shared.h"
++#
++#Analysis* EnumToAnalysis(int analysis_enum){
++#
++#	switch(analysis_enum){
++#END
++##core
++#cat temp | grep [a-z]Analysis | \
++#	grep -v DefaultAnalysis | grep -v FlaimAnalysis | grep -v SurfaceSlopeAnalysis | grep -v BedSlopeAnalysis | \
++#	awk '{print "\t\t#ifdef _HAVE_"toupper(substr($1,1,length($1)-12))"_\n\t\t" "case " $1" : return new " substr($1,1,length($1)-4) "();\n\t\t#endif"}' \
++#		>> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
++#
++##Footer
++#cat <<END >> $ISSM_DIR/src/c/analyses/EnumToAnalysis.cpp
++#default : _error_("enum provided not supported ("<<EnumToStringx(analysis_enum)<<")");
++#	}
++#}
++#END
++##}}}
+ #Build EnumDefinitions.py{{{
+ cat <<END > $ISSM_DIR/src/m/enum/EnumDefinitions.py
+ from StringToEnum import StringToEnum
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16533)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 16534)
+@@ -1,160 +0,0 @@
+-/*!\file:  DistributeNumDofs.cpp
+- * \brief: figure out the maximum number of dofs per node.
+- */ 
+-
+-#include "../../shared/shared.h"
+-#include "../../classes/classes.h"
+-
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type){
+-
+-	/*For now, we distribute by analysis_type, later, we will distribute using the analysis_type,
+-	 * but also the node_type: */
+-
+-	int  numdofs = -1;   //default numdofs
+-	int *doftype = NULL;
+-
+-	/*ok, according to analysis type: */
+-	switch(analysis_type){
+-		case StressbalanceAnalysisEnum:
+-			switch(node_type){
+-				case SSAApproximationEnum:
+-					numdofs=2;
+-					break;
+-				case L1L2ApproximationEnum:
+-					numdofs=2;
+-					break;
+-				case HOApproximationEnum:
+-					numdofs=2;
+-					break;
+-				case SIAApproximationEnum:
+-					numdofs=2;
+-					break;
+-				case FSvelocityEnum:
+-					if(mesh_type==Mesh3DEnum){
+-						numdofs=3;
+-					}
+-					else if(mesh_type==Mesh2DverticalEnum){
+-						numdofs=2;
+-					}
+-					else{
+-						_error_("mesh type not supported yet");
+-					}
+-					break;
+-				case FSpressureEnum:
+-					numdofs=1;
+-					break;
+-				case NoneApproximationEnum:
+-					if(mesh_type==Mesh3DEnum){
+-						numdofs=4;
+-					}
+-					else if(mesh_type==Mesh2DverticalEnum){
+-						numdofs=3;
+-					}
+-					else{
+-						_error_("mesh type not supported yet");
+-					}
+-					break;
+-				case SSAHOApproximationEnum:
+-					numdofs=4;
+-					doftype=xNew<int>(numdofs);
+-					doftype[0]=SSAApproximationEnum;
+-					doftype[1]=SSAApproximationEnum;
+-					doftype[2]=HOApproximationEnum;
+-					doftype[3]=HOApproximationEnum;
+-					break;
+-				case HOFSApproximationEnum:
+-					numdofs=5;
+-					doftype=xNew<int>(numdofs);
+-					doftype[0]=HOApproximationEnum;
+-					doftype[1]=HOApproximationEnum;
+-					doftype[2]=FSvelocityEnum;
+-					doftype[3]=FSvelocityEnum;
+-					doftype[4]=FSvelocityEnum;
+-					break;
+-				case SSAFSApproximationEnum:
+-					numdofs=5;
+-					doftype=xNew<int>(numdofs);
+-					doftype[0]=SSAApproximationEnum;
+-					doftype[1]=SSAApproximationEnum;
+-					doftype[2]=FSvelocityEnum;
+-					doftype[3]=FSvelocityEnum;
+-					doftype[4]=FSvelocityEnum;
+-					break;
+-				default:
+-					_error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for StressbalanceHoriz");
+-
+-			}
+-			break;
+-		case StressbalanceVerticalAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case StressbalanceSIAAnalysisEnum:
+-			numdofs=2;
+-			break;
+-		case L2ProjectionBaseAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case L2ProjectionTopAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case ThermalAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case EnthalpyAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case HydrologyDCInefficientAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case HydrologyDCEfficientAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case HydrologyShreveAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case MeltingAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case MasstransportAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case FreeSurfaceTopAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case FreeSurfaceBaseAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case ExtrudeFromBaseAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case ExtrudeFromTopAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case GiaAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case DamageEvolutionAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case BalancethicknessAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case BalancevelocityAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case SmoothedSurfaceSlopeXAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		case SmoothedSurfaceSlopeYAnalysisEnum:
+-			numdofs=1;
+-			break;
+-		default:
+-			_error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");
+-	}
+-
+-	/*Now initialize the index*/
+-	index->Init(numdofs,doftype);
+-
+-	/*Clean up*/
+-	 xDelete<int>(doftype);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16533)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16534)
+@@ -169,7 +169,4 @@
+ void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
+ void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
+ 
+-/*Distribution of dofs: */
+-void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type,int mesh_type);
+-
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16533)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16534)
+@@ -241,7 +241,6 @@
+ 					./toolkits.h\
+ 					./modules/ModelProcessorx/ModelProcessorx.h\
+ 					./modules/ModelProcessorx/ModelProcessorx.cpp\
+-					./modules/ModelProcessorx/DistributeNumDofs.cpp\
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
+ 					./modules/ModelProcessorx/EdgesPartitioning.cpp\
+@@ -337,6 +336,9 @@
+ 					./cores/ad_core.cpp\
+ 					./main/EnvironmentInit.cpp\
+ 					./main/EnvironmentFinalize.cpp\
++					./analyses/EnumToAnalysis.h\
++					./analyses/EnumToAnalysis.cpp\
++					./analyses/Analysis.h\
+ 					./solutionsequences/solutionsequence_linear.cpp\
+ 					./solutionsequences/solutionsequence_nonlinear.cpp\
+ 					./solutionsequences/solutionsequence_newton.cpp\
+@@ -393,6 +395,16 @@
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp \
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp\
+ 								./modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp\
++								./analyses/ExtrudeFromBaseAnalysis.h\
++								./analyses/ExtrudeFromBaseAnalysis.cpp\
++								./analyses/ExtrudeFromTopAnalysis.h\
++								./analyses/ExtrudeFromTopAnalysis.cpp\
++								./analyses/MasstransportAnalysis.h\
++								./analyses/MasstransportAnalysis.cpp\
++								./analyses/FreeSurfaceBaseAnalysis.h\
++								./analyses/FreeSurfaceBaseAnalysis.cpp\
++								./analyses/FreeSurfaceTopAnalysis.h\
++								./analyses/FreeSurfaceTopAnalysis.cpp\
+ 								./cores/masstransport_core.cpp\
+ 								./cores/extrudefrombase_core.cpp\
+ 								./cores/extrudefromtop_core.cpp
+@@ -413,6 +425,12 @@
+ 					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
++						./analyses/ThermalAnalysis.h\
++						./analyses/ThermalAnalysis.cpp\
++						./analyses/EnthalpyAnalysis.h\
++						./analyses/EnthalpyAnalysis.cpp\
++						./analyses/MeltingAnalysis.h\
++						./analyses/MeltingAnalysis.cpp\
+ 					   ./cores/thermal_core.cpp\
+ 					   ./solutionsequences/solutionsequence_thermal_nonlinear.cpp
+ #}}}
+@@ -466,6 +484,10 @@
+ 					  ./cores/adjointstressbalance_core.cpp\
+ 					  ./cores/adjointbalancethickness_core.cpp\
+ 					  ./cores/AdjointCorePointerFromSolutionEnum.cpp\
++					  ./analyses/AdjointBalancethicknessAnalysis.h\
++					  ./analyses/AdjointBalancethicknessAnalysis.cpp\
++					  ./analyses/AdjointHorizAnalysis.h\
++					  ./analyses/AdjointHorizAnalysis.cpp\
+ 					  ./solutionsequences/solutionsequence_adjoint_linear.cpp
+ 
+ #}}}
+@@ -485,6 +507,12 @@
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp\
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp \
+ 							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp \
++							./analyses/HydrologyDCEfficientAnalysis.h\
++							./analyses/HydrologyDCEfficientAnalysis.cpp\
++							./analyses/HydrologyDCInefficientAnalysis.h\
++							./analyses/HydrologyDCInefficientAnalysis.cpp\
++							./analyses/HydrologyShreveAnalysis.h\
++							./analyses/HydrologyShreveAnalysis.cpp\
+ 							./cores/hydrology_core.cpp\
+ 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp
+ #}}}
+@@ -502,6 +530,12 @@
+ 					      ./modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp \
+ 					      ./modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp \
+ 							./modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp \
++							./analyses/StressbalanceAnalysis.h\
++							./analyses/StressbalanceAnalysis.cpp\
++							./analyses/StressbalanceSIAAnalysis.h\
++							./analyses/StressbalanceSIAAnalysis.cpp\
++							./analyses/StressbalanceVerticalAnalysis.h\
++							./analyses/StressbalanceVerticalAnalysis.cpp\
+ 							./cores/stressbalance_core.cpp\
+ 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+ #}}}
+@@ -514,6 +548,16 @@
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp\
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\
+ 						 ./modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp\
++						 ./analyses/BalancevelocityAnalysis.h\
++						 ./analyses/BalancevelocityAnalysis.cpp\
++						 ./analyses/SmoothedSurfaceSlopeXAnalysis.h\
++						 ./analyses/SmoothedSurfaceSlopeXAnalysis.cpp\
++						 ./analyses/SmoothedSurfaceSlopeYAnalysis.h\
++						 ./analyses/SmoothedSurfaceSlopeYAnalysis.cpp\
++						 ./analyses/BalancethicknessAnalysis.h\
++						 ./analyses/BalancethicknessAnalysis.cpp\
++						 ./analyses/BalancethicknessSoftAnalysis.h\
++						 ./analyses/BalancethicknessSoftAnalysis.cpp\
+ 						 ./cores/balancethickness_core.cpp \
+ 						 ./cores/balancevelocity_core.cpp \
+ 						 ./cores/dummy_core.cpp
+@@ -527,6 +571,8 @@
+ 					  ./modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp \
+ 					  ./modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp\
+ 					  ./modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp\
++					  ./analyses/L2ProjectionBaseAnalysis.h\
++					  ./analyses/L2ProjectionBaseAnalysis.cpp\
+ 					  ./cores/surfaceslope_core.cpp\
+ 					  ./cores/bedslope_core.cpp
+ #}}}
+@@ -535,10 +581,14 @@
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
+ 					  ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
++					  ./analyses/MeshdeformationAnalysis.h\
++					  ./analyses/MeshdeformationAnalysis.cpp\
+ 					  ./cores/meshdeformation_core.cpp
+ #}}}
+ #Gia sources  {{{
+ gia_sources =  ./cores/gia_core.cpp\
++					./analyses/GiaAnalysis.h\
++					./analyses/GiaAnalysis.cpp\
+ 					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
+ 					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp \
+ 					./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp\
+@@ -557,12 +607,14 @@
+ #}}}
+ #Damage sources  {{{
+ damage_sources =  ./cores/damage_core.cpp\
+-					./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+-					./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+-					./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
+-					./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
+-					./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
+-					./solutionsequences/solutionsequence_damage_nonlinear.cpp
++						./analyses/DamageEvolutionAnalysis.h\
++						./analyses/DamageEvolutionAnalysis.cpp\
++						./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
++						./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
++						./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
++						./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
++						./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
++						./solutionsequences/solutionsequence_damage_nonlinear.cpp
+ 
+ #}}}
+ #Groundingline sources  {{{
+Index: ../trunk-jpl/src/c/cores/cores.h
+===================================================================
+--- ../trunk-jpl/src/c/cores/cores.h	(revision 16533)
++++ ../trunk-jpl/src/c/cores/cores.h	(revision 16534)
+@@ -2,8 +2,8 @@
+  * cores.h: 
+  */
+ 
+-#ifndef _ANALYSES_H_
+-#define _ANALYSES_H_
++#ifndef _CORES_H_
++#define _CORES_H_
+ 
+ /*forward declarations: */
+ struct OptArgs;
+Index: ../trunk-jpl/src/c/CMakeLists.txt
+===================================================================
+--- ../trunk-jpl/src/c/CMakeLists.txt	(revision 16533)
++++ ../trunk-jpl/src/c/CMakeLists.txt	(revision 16534)
+@@ -166,7 +166,6 @@
+ 					./toolkits/issm/IssmSolver.cpp
+ 					./toolkits/ToolkitOptions.cpp
+ 					./modules/ModelProcessorx/ModelProcessorx.cpp
+-					./modules/ModelProcessorx/DistributeNumDofs.cpp
+ 					./modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp
+ 					./modules/ModelProcessorx/EdgesPartitioning.cpp
+Index: ../trunk-jpl/src/c/classes/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.h	(revision 16533)
++++ ../trunk-jpl/src/c/classes/Node.h	(revision 16534)
+@@ -35,12 +35,12 @@
+ 
+ 		bool         indexingupdate;
+ 		DofIndexing  indexing;
+-		int          analysis_type;
++		int          analysis_enum;
+ 		IssmDouble   coord_system[3][3];
+ 
+ 		/*Node constructors, destructors*/
+ 		Node();
+-		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation_in);
++		Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int approximation_in);
+ 		~Node();
+ 
+ 		/*Object virtual functions definitions:*/
+@@ -58,7 +58,7 @@
+ #ifdef _HAVE_STRESSBALANCE_
+ 		void  GetCoordinateSystem(IssmDouble* coord_system_out);
+ #endif
+-		bool  InAnalysis(int analysis_type);
++		bool  InAnalysis(int analysis_enum);
+ 		int   GetApproximation();
+ 		int   GetNumberOfDofs(int approximation_enum,int setenum);
+ 		int   IsClone();
+Index: ../trunk-jpl/src/c/classes/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Node.cpp	(revision 16533)
++++ ../trunk-jpl/src/c/classes/Node.cpp	(revision 16534)
+@@ -12,6 +12,7 @@
+ #include "./classes.h"
+ #include "shared/shared.h"
+ #include "modules/ModelProcessorx/ModelProcessorx.h"
++#include "../analyses/analyses.h"
+ /*}}}*/
+ 
+ /*Node constructors and destructors:*/
+@@ -20,17 +21,18 @@
+ 	this->approximation=0;
+ }
+ /*}}}*/
+-/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int approximation) {{{*/
+-Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_type,int in_approximation){
++/*FUNCTION Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int approximation) {{{*/
++Node::Node(int node_id,int node_sid,int node_lid,int io_index, IoModel* iomodel,int analysis_enum,int in_approximation){
+ 
+ 	/*Intermediary*/
+ 	int k,l;
++	int *doftypes = NULL;
+ 
+ 	/*id: */
+ 	this->id            = node_id;
+ 	this->sid           = node_sid;
+ 	this->lid           = node_lid;
+-	this->analysis_type = analysis_type;
++	this->analysis_enum = analysis_enum;
+ 
+ 	/*Initialize coord_system: Identity matrix by default*/
+ 	for(k=0;k<3;k++) for(l=0;l<3;l++) this->coord_system[k][l]=0.0;
+@@ -38,16 +40,21 @@
+ 
+ 	/*indexing:*/
+ 	this->indexingupdate = true;
+-	DistributeNumDofs(&this->indexing,analysis_type,in_approximation,iomodel->meshtype); //number of dofs per node
+ 
+-	if(analysis_type==StressbalanceAnalysisEnum)
++	Analysis* analysis = EnumToAnalysis(analysis_enum);
++	int numdofs        = analysis->DofsPerNode(&doftypes,iomodel->meshtype,in_approximation);
++	indexing.Init(numdofs,doftypes);
++	xDelete<int>(doftypes);
++	delete analysis;
++
++	if(analysis_enum==StressbalanceAnalysisEnum)
+ 	 this->approximation=in_approximation;
+ 	else
+ 	 this->approximation=0;
+ 
+ 	/*Stressbalance Horiz*/
+ 	#ifdef _HAVE_STRESSBALANCE_
+-	if(analysis_type==StressbalanceAnalysisEnum){
++	if(analysis_enum==StressbalanceAnalysisEnum){
+ 
+ 		/*Coordinate system provided, convert to coord_system matrix*/
+ 		_assert_(iomodel->Data(StressbalanceReferentialEnum)); 
+@@ -84,14 +91,14 @@
+ 
+ 	/*2d solutions in 3d, we need to constrain all the nodes that are not on base*/
+ 	if(
+-				analysis_type==FreeSurfaceBaseAnalysisEnum || 
+-				analysis_type==MasstransportAnalysisEnum || 
+-				analysis_type==MeltingAnalysisEnum || 
+-				analysis_type==L2ProjectionBaseAnalysisEnum || 
+-				analysis_type==BalancethicknessAnalysisEnum ||
+-				analysis_type==HydrologyDCInefficientAnalysisEnum ||
+-				analysis_type==DamageEvolutionAnalysisEnum || 
+-				analysis_type==HydrologyDCEfficientAnalysisEnum
++				analysis_enum==FreeSurfaceBaseAnalysisEnum || 
++				analysis_enum==MasstransportAnalysisEnum || 
++				analysis_enum==MeltingAnalysisEnum || 
++				analysis_enum==L2ProjectionBaseAnalysisEnum || 
++				analysis_enum==BalancethicknessAnalysisEnum ||
++				analysis_enum==HydrologyDCInefficientAnalysisEnum ||
++				analysis_enum==DamageEvolutionAnalysisEnum || 
++				analysis_enum==HydrologyDCEfficientAnalysisEnum
+ 				){
+ 		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+@@ -102,8 +109,8 @@
+ 		}
+ 	}
+ 	if(
+-				analysis_type==FreeSurfaceTopAnalysisEnum ||
+-				analysis_type==L2ProjectionTopAnalysisEnum
++				analysis_enum==FreeSurfaceTopAnalysisEnum ||
++				analysis_enum==L2ProjectionTopAnalysisEnum
+ 				){
+ 		if(iomodel->meshtype==Mesh3DEnum || iomodel->meshtype==Mesh2DverticalEnum){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+@@ -129,7 +136,7 @@
+ 	_printf_("Node:\n");
+ 	_printf_("   id : " << id << "\n");
+ 	_printf_("   sid: " << sid << "\n");
+-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
++	_printf_("   analysis_enum: " << EnumToStringx(analysis_enum) << "\n");
+ 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
+ 	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.Echo();
+@@ -142,7 +149,7 @@
+ 	_printf_("Node:\n");
+ 	_printf_("   id: " << id << "\n");
+ 	_printf_("   sid: " << sid << "\n");
+-	_printf_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
++	_printf_("   analysis_enum: " << EnumToStringx(analysis_enum) << "\n");
+ 	_printf_("   approximation: " << EnumToStringx(approximation) << "\n");
+ 	_printf_("   indexingupdate: " << indexingupdate << "\n");
+ 	indexing.DeepEcho();
+@@ -366,8 +373,8 @@
+ /*}}}*/
+ #endif
+ /*FUNCTION Node::InAnalysis{{{*/
+-bool Node::InAnalysis(int in_analysis_type){
+-	if (in_analysis_type==this->analysis_type) return true;
++bool Node::InAnalysis(int in_analysis_enum){
++	if (in_analysis_enum==this->analysis_enum) return true;
+ 	else return false;
+ }
+ /*}}}*/
Index: issm/oecreview/Archive/16133-16554/ISSM-16534-16535.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16534-16535.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16534-16535.diff	(revision 16556)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16534)
++++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16535)
+@@ -554,6 +554,7 @@
+ 	IssmDouble Jdet,value;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble slopes[2];
++	Input*     input  = NULL;
+ 	Input*     input2 = NULL;
+ 
+ 	/*Fetch number of nodes and dof for this finite element*/
+@@ -566,15 +567,12 @@
+ 	/*Retrieve all inputs and parameters*/
+ 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+ 	this->parameters->FindParam(&input_enum,InputToL2ProjectEnum);
+-	Input* input = inputs->GetInput(input_enum);
+-	if(!input){
+-		switch(input_enum){
+-			case SurfaceSlopeXEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
+-			case SurfaceSlopeYEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
+-			case BedSlopeXEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
+-			case BedSlopeYEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
+-			default: _error_("input not found in element");
+-		}
++	switch(input_enum){
++		case SurfaceSlopeXEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
++		case SurfaceSlopeYEnum: input2 = inputs->GetInput(SurfaceEnum); _assert_(input2); break;
++		case BedSlopeXEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
++		case BedSlopeYEnum:     input2 = inputs->GetInput(BedEnum);     _assert_(input2); break;
++		default: input = inputs->GetInput(input_enum);
+ 	}
+ 
+ 	/* Start  looping on the number of gaussian points: */
+@@ -586,17 +584,12 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis,gauss);
+ 
+-		if(input){
+-			input->GetInputValue(&value,gauss);
++		if(input2) input2->GetInputDerivativeValue(&slopes[0],&xyz_list[0][0],gauss);
++		switch(input_enum){
++			case SurfaceSlopeXEnum: case BedSlopeXEnum: value = slopes[0]; break;
++			case SurfaceSlopeYEnum: case BedSlopeYEnum: value = slopes[1]; break;
++			default: input->GetInputValue(&value,gauss);
+ 		}
+-		else{
+-			input2->GetInputDerivativeValue(&slopes[0],&xyz_list[0][0],gauss);
+-			switch(input_enum){
+-				case SurfaceSlopeXEnum: case BedSlopeXEnum: value = slopes[0]; break;
+-				case SurfaceSlopeYEnum: case BedSlopeYEnum: value = slopes[1]; break;
+-				default: _error_("case not supported");
+-			}
+-		}
+ 
+ 		for(i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*value*basis[i];
+ 	}
Index: issm/oecreview/Archive/16133-16554/ISSM-16535-16536.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16535-16536.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16535-16536.diff	(revision 16556)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh	(revision 16536)
+@@ -0,0 +1,18 @@
++#!/bin/csh
++./configure \
++	--prefix=$ISSM_DIR \
++	--without-kriging \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
++	--with-petsc-arch=$ISSM_ARCH \
++	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
++	--with-mpi-include="/nasa/mvapich2/1.6.sles11/gcc/include" \
++	--with-mpi-libflags="-L/nasa/mvapich2/1.6.sles11/gcc/lib -lmpich -lopa -lpthread -lrdmacm -libverbs -libumad -ldl -lrt" \
++	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-graphics-lib="/usr/lib64/libX11.so" \
++	--with-cxxoptflags="-g -O2" \
++	--with-vendor="intel-pleiades-gcc"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
+Index: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh	(revision 16536)
+@@ -0,0 +1,17 @@
++#!/bin/csh
++./configure \
++	--prefix=$ISSM_DIR \
++	--without-kriging \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
++	--with-petsc-arch=$ISSM_ARCH \
++	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
++	--with-mpi-include="/nasa/mvapich2/1.4.1/gcc.sles11/include"\
++	--with-mpi-libflags=" -L/nasa/mvapich2/1.4.1/gcc.sles11/lib -lmpichcxx -lmpich -lpthread -lrdmacm -libverbs -libumad -lrt" \
++	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-hypre-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-graphics-lib="/usr/lib64/libX11.so" \
++	--with-cxxoptflags="-g -O2" \
++	--with-vendor="intel-pleiades-gcc"
+
+Property changes on: ../trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+\ No newline at end of property
Index: issm/oecreview/Archive/16133-16554/ISSM-16536-16537.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16536-16537.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16536-16537.diff	(revision 16556)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/c/analyses
+===================================================================
+--- ../trunk-jpl/src/c/analyses	(revision 16536)
++++ ../trunk-jpl/src/c/analyses	(revision 16537)
+
+Property changes on: ../trunk-jpl/src/c/analyses
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.deps
Index: issm/oecreview/Archive/16133-16554/ISSM-16537-16538.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16537-16538.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16537-16538.diff	(revision 16556)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/c/analyses
+===================================================================
+--- ../trunk-jpl/src/c/analyses	(revision 16537)
++++ ../trunk-jpl/src/c/analyses	(revision 16538)
+
+Property changes on: ../trunk-jpl/src/c/analyses
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,2 ##
+ .deps
++.dirstamp
Index: issm/oecreview/Archive/16133-16554/ISSM-16538-16539.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16538-16539.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16538-16539.diff	(revision 16556)
@@ -0,0 +1,7704 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class StressbalanceSIAAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,92 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int HydrologyShreveAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  HydrologyShreveAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void HydrologyShreveAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	Parameters *parameters = NULL;
++	int         hydrology_model;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*retrieve some parameters: */
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want Shreve?*/
++	if(hydrology_model!=HydrologyshreveEnum){
++		*pparameters=parameters;
++		return;
++	}
++
++	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
++	parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
++
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}/*}}}*/
++void HydrologyShreveAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Fetch data needed: */
++	int    hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want Shreve?*/
++	if(hydrology_model!=HydrologyshreveEnum) return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,WatercolumnEnum);
++
++	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
++}/*}}}*/
++void HydrologyShreveAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int  hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want Shreve?*/
++	if(hydrology_model!=HydrologyshreveEnum) return;
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void HydrologyShreveAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*retrieve some parameters: */
++	int          hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	if(hydrology_model!=HydrologyshreveEnum) return;
++
++	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void HydrologyShreveAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	/*No loads*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,21 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int BalancethicknessSoftAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  BalancethicknessSoftAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
++void BalancethicknessSoftAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void BalancethicknessSoftAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void BalancethicknessSoftAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void BalancethicknessSoftAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class StressbalanceAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class HydrologyDCInefficientAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,120 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int BalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  BalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void BalancethicknessAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void BalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	int    stabilization,finiteelement;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
++
++	/*Finite element type*/
++	finiteelement = P1Enum;
++	if(stabilization==3){
++		finiteelement = P1DGEnum;
++	}
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}/*}}}*/
++void BalancethicknessAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	int  stabilization;
++	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
++
++	/*Check in 3d*/
++	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
++
++	/*First fetch data: */
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(stabilization!=3){
++		::CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
++	}
++	else{
++		::CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
++	}
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void BalancethicknessAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int    stabilization;	
++	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*Do not add constraints in DG*/
++	if(stabilization!=3){
++		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum,P1Enum);
++	}
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void BalancethicknessAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	int element;
++	int stabilization;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Loads only in DG*/
++	if (stabilization==3){
++
++		/*Get faces and elements*/
++		CreateFaces(iomodel);
++		iomodel->FetchData(1,ThicknessEnum);
++
++		/*First load data:*/
++		for(int i=0;i<iomodel->numberoffaces;i++){
++
++			/*Get left and right elements*/
++			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
++
++			/*Now, if this element is not in the partition, pass: */
++			if(!iomodel->my_elements[element]) continue;
++
++			/* Add load */
++			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,BalancethicknessAnalysisEnum));
++		}
++
++		/*Free data: */
++		iomodel->DeleteData(1,ThicknessEnum);
++	}
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class ThermalAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,124 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int HydrologyDCEfficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  HydrologyDCEfficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void HydrologyDCEfficientAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	Parameters *parameters = NULL;
++	int         hydrology_model;
++	bool        isefficientlayer;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*retrieve some parameters: */
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want DC?*/
++	if(hydrology_model!=HydrologydcEnum){
++		*pparameters=parameters;
++		return;
++	}
++
++	/*Do we want an efficient layer*/
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	if(!isefficientlayer){
++		*pparameters=parameters;
++		return;
++	}
++
++	/*Nothing for now*/
++
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}/*}}}*/
++void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	bool   isefficientlayer;
++	int    hydrology_model;
++
++	/*Now, do we really want DC?*/
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	/*Do we want an efficient layer*/
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	if(!isefficientlayer) return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,EplHeadEnum);
++}/*}}}*/
++void HydrologyDCEfficientAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Now, do we really want DC?*/
++	int  hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	/*Do we want an efficient layer*/
++	bool isefficientlayer;
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	if(!isefficientlayer) return;
++
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	::CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++}/*}}}*/
++void HydrologyDCEfficientAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*Do we really want DC?*/
++	int  hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	/*Do we want an efficient layer*/
++	bool isefficientlayer;
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	if(!isefficientlayer) return;
++
++	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void HydrologyDCEfficientAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Do we really want DC?*/
++	int  hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	/*Do we want an efficient layer*/
++	bool isefficientlayer;
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	if(!isefficientlayer) return;
++
++	/*Nothing for now*/
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class ExtrudeFromBaseAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,21 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int AdjointHorizAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  AdjointHorizAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
++void AdjointHorizAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void AdjointHorizAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void AdjointHorizAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void AdjointHorizAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void AdjointHorizAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,60 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int BalancevelocityAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  BalancevelocityAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void BalancevelocityAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void BalancevelocityAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
++	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}/*}}}*/
++void BalancevelocityAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Check in 3d*/
++	if(iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
++
++	/*First fetch data: */
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	::CreateNodes(pnodes,iomodel,BalancevelocityAnalysisEnum,P1Enum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++}/*}}}*/
++void BalancevelocityAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*No constraints for now*/
++	//IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void BalancevelocityAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*No loads*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class MeltingAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class GiaAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,50 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void L2ProjectionBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}/*}}}*/
++void L2ProjectionBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	}
++	else if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchData(1,MeshVertexonbedEnum);
++	}
++	::CreateNodes(pnodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void L2ProjectionBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*No constraints*/
++}/*}}}*/
++void L2ProjectionBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*No loads*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,89 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void FreeSurfaceTopAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
++
++	int finiteelement = P1Enum;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}/*}}}*/
++void FreeSurfaceTopAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void FreeSurfaceTopAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void FreeSurfaceTopAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Intermediaries*/
++	int penpair_ids[2];
++	int count=0;
++	int numvertex_pairing;
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonsurface=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonsurface,NULL,NULL,MeshVertexonsurfaceEnum);
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							FreeSurfaceTopAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class AdjointBalancethicknessAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,96 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void StressbalanceVerticalAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	/*No specific parameters*/
++
++}/*}}}*/
++void StressbalanceVerticalAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,VxEnum,0.);
++	iomodel->FetchDataToInput(elements,VyEnum,0.);
++}/*}}}*/
++void StressbalanceVerticalAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
++
++	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++	::CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
++	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
++}/*}}}*/
++void StressbalanceVerticalAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	int count;
++	IssmDouble yts;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&yts,ConstantsYtsEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*return if not 3d mesh*/
++	if(iomodel->meshtype!=Mesh3DEnum) return;
++
++	/*Fetch data: */
++	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
++
++	/*Initialize counter*/
++	count=0;
++
++	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
++	for(int i=0;i<iomodel->numberofvertices;i++){
++
++		/*keep only this partition's nodes:*/
++		if(iomodel->my_vertices[i]){
++
++			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
++				count++;
++			}
++			else if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvzEnum)[i])){
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
++								iomodel->Data(StressbalanceSpcvzEnum)[i]/yts,StressbalanceVerticalAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++				count++;
++
++			}
++		} 
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void StressbalanceVerticalAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*No loads*/
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/Analysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Analysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/Analysis.h	(revision 16539)
+@@ -5,11 +5,23 @@
+ #ifndef _ANALYSIS_H_
+ #define _ANALYSIS_H_
+ 
++class Parameters;
++class IoModel;
++class Elements;
++class Nodes;
++class Constraints;
++class Loads;
++
+ class Analysis{
+ 
+ 	public: 
+ 
+-		virtual         ~Analysis(){};
+-		virtual int DofsPerNode(int** doflist,int meshtype,int approximation)=0;
++		virtual      ~Analysis(){};
++		virtual int  DofsPerNode(int** doflist,int meshtype,int approximation)=0;
++		virtual void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0;
++		virtual void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type)=0;
++		virtual void CreateNodes(Nodes** pnodes,IoModel* iomodel)=0;
++		virtual void CreateConstraints(Constraints** pconstraints,IoModel* iomodel)=0;
++		virtual void CreateLoads(Loads** ploads, IoModel* iomodel)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class MasstransportAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,143 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int StressbalanceSIAAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  StressbalanceSIAAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 2;
+ }/*}}}*/
++void StressbalanceSIAAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	/*No specific parameters*/
++
++}/*}}}*/
++void StressbalanceSIAAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Fetch data needed: */
++	bool   isSIA;
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag SIA on? otherwise, do nothing: */
++	if (!isSIA)return;
++
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++
++	/*Free data: */
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
++}/*}}}*/
++void StressbalanceSIAAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Intermediaries*/
++	bool  isSIA;
++	Node* node = NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if(!isSIA) return;
++
++	/*First create nodes*/
++	Nodes* nodes=*pnodes;
++	int    lid=0;
++	if(!nodes) nodes = new Nodes();
++
++	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++
++			/*Create new node if is in this processor's partition*/
++			node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
++
++			/*Deactivate node if not SIA*/
++			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
++				node->Deactivate();
++			}
++
++			/*Add to Nodes dataset*/
++			nodes->AddObject(node);
++		}
++	}
++
++	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++	/*Assign output pointer: */
++	*pnodes=nodes;
++
++}/*}}}*/
++void StressbalanceSIAAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	int        count;
++	IssmDouble yts;
++	bool       isSIA;
++
++	/*Output*/
++	Constraints* constraints = NULL;
++
++	/*Recover pointer: */
++	constraints=*pconstraints;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&yts,ConstantsYtsEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++
++	/*Now, is the flag isSIA on? otherwise, do nothing: */
++	if (!isSIA) return;
++
++	/*Fetch data: */
++	iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
++
++	/*Initialize conunter*/
++	count=0;
++
++	/*vx and vy are spc'd if we are not on nodeonSIA: */
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		/*keep only this partition's nodes:*/
++		if((iomodel->my_vertices[i])){
++			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
++
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
++				count++;
++
++				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceSIAAnalysisEnum));
++				count++;
++			}
++			else{
++				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvxEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					count++;
++				}
++
++				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(StressbalanceSpcvyEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					count++;
++				}
++			}
++		}
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void StressbalanceSIAAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*No loads*/
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class DamageEvolutionAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16539)
+@@ -5,7 +5,7 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int StressbalanceAnalysis::DofsPerNode(int** pdoftype,int meshtype,int approximation){/*{{{*/
++int  StressbalanceAnalysis::DofsPerNode(int** pdoftype,int meshtype,int approximation){/*{{{*/
+ 
+ 	/*output*/
+ 	int *doftype = NULL;
+@@ -65,3 +65,762 @@
+ 	*pdoftype = doftype;
+ 	return numdofs;
+ }/*}}}*/
++void StressbalanceAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	/*Intermediaries*/
++	int         numoutputs;
++	char**      requestedoutputs = NULL;
++
++	/*Get parameters: */
++	Parameters *parameters=*pparameters;
++
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
++
++	/*Requested outputs*/
++	iomodel->FetchData(&requestedoutputs,&numoutputs,StressbalanceRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new StringArrayParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
++
++	/*Assign output pointer: */
++	*pparameters = parameters;
++}/*}}}*/
++void StressbalanceAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Intermediaries*/
++	int    materials_type,finiteelement;
++	int    approximation;
++	int*   finiteelement_list=NULL;
++	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
++	bool   control_analysis;
++	bool   dakota_analysis;
++
++	/*Fetch constants needed: */
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	iomodel->Constant(&materials_type,MaterialsEnum);
++
++	/*return if no processing required*/
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
++
++	/*Fetch data needed and allocate vectors: */
++	iomodel->FetchData(1,FlowequationElementEquationEnum);
++	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
++
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*Get finite element type*/
++	if(!iscoupling){
++		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
++		else if(isL1L2) finiteelement = P1Enum;
++		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
++		else if(isFS)   iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++		for(int i=0;i<iomodel->numberofelements;i++){
++			finiteelement_list[i]=finiteelement;
++		}
++	}
++	else{
++		if(isFS){
++			for(int i=0;i<iomodel->numberofelements;i++){
++				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
++				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
++					finiteelement_list[i]=MINIcondensedEnum;
++				}
++				else{
++					finiteelement_list[i]=P1Enum;
++				}
++			}
++		}
++		else{
++			finiteelement = P1Enum;
++			for(int i=0;i<iomodel->numberofelements;i++){
++				finiteelement_list[i]=finiteelement;
++			}
++		}
++	}
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
++			counter++;
++		}
++	}
++
++	/*Create inputs: */
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
++	iomodel->FetchDataToInput(elements,FrictionPEnum);
++	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
++	iomodel->FetchDataToInput(elements,VxEnum,0.);
++	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum,0.);
++	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
++	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
++	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
++	iomodel->FetchDataToInput(elements,DamageDEnum);
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
++		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
++		iomodel->FetchDataToInput(elements,VzEnum,0.);
++		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
++	}
++	if(isFS){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++		iomodel->FetchDataToInput(elements,PressureEnum,0.);
++		if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
++	}
++
++#ifdef _HAVE_ANDROID_
++	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
++#endif
++
++	/*Free data: */
++	iomodel->DeleteData(1,FlowequationElementEquationEnum);
++	xDelete<int>(finiteelement_list);
++}/*}}}*/
++void StressbalanceAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	bool isSSA,isL1L2,isHO,isFS,iscoupling;
++	int  finiteelement=-1,approximation=-1;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++
++	/*Now, check that we have non SIA elements */
++	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
++
++	/*Do we have coupling*/
++	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular CreateNodes, else, use P1 elements only*/
++	if(!iscoupling){
++
++		/*Get finite element type*/
++		if(isSSA){
++			approximation=SSAApproximationEnum;
++			iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
++		}
++		else if(isL1L2){
++			approximation = L1L2ApproximationEnum;
++			finiteelement = P1Enum;
++		}
++		else if(isHO){
++			approximation = HOApproximationEnum;
++			iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
++		}
++		else if(isFS){
++			approximation = FSApproximationEnum;
++			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++		}
++		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
++		::CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
++		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++	}
++	else{
++		/*Coupling: we are going to create P1 Elements only*/
++
++		/*Recover nodes*/
++		Nodes* nodes = *pnodes;
++		Node*  node  = NULL;
++		int    lid=0;
++		if(!nodes) nodes = new Nodes();
++
++		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++		if(isFS){
++			/*P1+ velocity*/
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
++					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
++				}
++			}
++			for(int i=0;i<iomodel->numberofelements;i++){
++				if(iomodel->my_elements[i]){
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
++					node->Deactivate();
++					nodes->AddObject(node);
++				}
++			}
++			/*P1 pressure*/
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
++					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
++					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
++						node->Deactivate();
++					}
++					nodes->AddObject(node);
++				}
++			}
++		}
++		else{
++			for(int i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
++				}
++			}
++		}
++		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
++					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
++
++		/*Assign output pointer: */
++		*pnodes=nodes;
++	}
++}/*}}}*/
++void StressbalanceAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	int        i,j;
++	int        count,finiteelement;
++	IssmDouble g;
++	IssmDouble rho_ice;
++	IssmDouble FSreconditioning;
++	bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
++	bool       spcpresent = false;
++	int        Mx,Nx;
++	int        My,Ny;
++	int        Mz,Nz;
++	IssmDouble *spcvx          = NULL;
++	IssmDouble *spcvy          = NULL;
++	IssmDouble *spcvz          = NULL;
++	IssmDouble *nodeonSSA = NULL;
++	IssmDouble *nodeonHO   = NULL;
++	IssmDouble *nodeonFS   = NULL;
++	IssmDouble *nodeonbed      = NULL;
++	IssmDouble *groundedice_ls = NULL;
++	IssmDouble *vertices_type  = NULL;
++	IssmDouble *surface        = NULL;
++	IssmDouble *z              = NULL;
++	IssmDouble *timesx=NULL;
++	IssmDouble *timesy=NULL;
++	IssmDouble *timesz=NULL;
++   IssmDouble* values=NULL;
++
++	/*Output*/
++	Constraints *constraints      = NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&g,ConstantsGEnum);
++	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
++	iomodel->Constant(&FSreconditioning,StressbalanceFSreconditioningEnum);
++	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++
++	/*Recover pointer: */
++	constraints=*pconstraints;
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA && !isHO && !isFS && !isL1L2){
++		*pconstraints=constraints;
++		return;
++	}
++
++	/*Do we have coupling*/
++	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
++	 iscoupling = true;
++	else
++	 iscoupling = false;
++
++	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
++	if(!iscoupling){
++
++		/*Get finite element type*/
++		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
++		else if(isL1L2) finiteelement = P1Enum;
++		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
++		else if(isFS){  iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
++			/*Deduce velocity interpolation from finite element*/
++			switch(finiteelement){
++				case P1P1Enum          : finiteelement = P1Enum;       break;
++				case P1P1GLSEnum       : finiteelement = P1Enum;       break;
++				case MINIcondensedEnum : finiteelement = P1bubbleEnum; break;
++				case MINIEnum          : finiteelement = P1bubbleEnum; break;
++				case TaylorHoodEnum    : finiteelement = P2Enum;       break;
++				default: _error_("finite element "<<finiteelement<<" not supported");
++			}
++		}
++		else{
++			_error_("model not supported yet");
++		}
++
++		if(isFS){
++
++			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
++			if(iomodel->meshtype==Mesh3DEnum){
++				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
++			}
++			else if (iomodel->meshtype==Mesh2DverticalEnum){
++				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvyEnum);
++			}
++			else{
++				_error_("not supported yet");
++			}
++			for(i=0;i<iomodel->numberofvertices;i++){
++				if(iomodel->my_vertices[i]){
++					if(nodeonbed[i]>0. && groundedice_ls[i]>0. && nodeonFS[i]>0.){
++						if(vertices_type[i] == FSApproximationEnum){
++							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
++						}
++						else{
++							_error_("not supported");
++						}
++					}
++				}
++			}
++			if(iomodel->meshtype==Mesh3DEnum){
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
++				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,3);
++				iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++			}
++			else if (iomodel->meshtype==Mesh2DverticalEnum){
++				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
++				iomodel->DeleteData(spcvz,StressbalanceSpcvyEnum);
++			}
++			else{
++				_error_("not supported yet");
++			}
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++			iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
++
++			/*Pressure spc*/
++			count = constraints->Size();
++			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
++			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
++			switch(finiteelement){
++				case P1bubbleEnum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
++								count++;
++							}
++						}
++					}
++					break;
++				case P2Enum:
++					for(i=0;i<iomodel->numberofvertices;i++){
++						if(iomodel->my_vertices[i]){
++							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
++								count++;
++							}
++						}
++					}
++					break;
++				default:
++					_error_("not implemented yet");
++			}
++			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++			iomodel->DeleteData(surface,SurfaceEnum);
++			iomodel->DeleteData(z,MeshZEnum);
++		}
++		else{
++			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
++			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
++		}
++
++		*pconstraints=constraints;
++		return;
++	}
++
++	/*Constraints: fetch data: */
++	iomodel->FetchData(&spcvx,&Mx,&Nx,StressbalanceSpcvxEnum);
++	iomodel->FetchData(&spcvy,&My,&Ny,StressbalanceSpcvyEnum);
++	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
++	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
++	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
++	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
++	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
++
++	/*Initialize counter: */
++	count=0;
++
++	/*figure out times: */
++	timesx=xNew<IssmDouble>(Nx);
++	for(j=0;j<Nx;j++){
++		timesx[j]=spcvx[(Mx-1)*Nx+j];
++	}
++	/*figure out times: */
++	timesy=xNew<IssmDouble>(Ny);
++	for(j=0;j<Ny;j++){
++		timesy[j]=spcvy[(My-1)*Ny+j];
++	}
++	/*figure out times: */
++	timesz=xNew<IssmDouble>(Nz);
++	for(j=0;j<Nz;j++){
++		timesz[j]=spcvz[(Mz-1)*Nz+j];
++	}
++
++	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
++	for(i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++
++			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
++			if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
++				/*If grionSSA, spc HO dofs: 3 & 4*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else _error_("if vertices_type is SSAHO, you shoud have nodeonHO or nodeonSSA");
++			}
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonHO[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvz[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++					}
++					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
++			}
++			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
++			else if (reCast<int,IssmDouble>(vertices_type[i])==SSAFSApproximationEnum){
++				/*If grion,HO spc FS dofs: 3 4 & 5*/
++					if (reCast<int,IssmDouble>(nodeonSSA[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++
++					}
++					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++						count++;
++						if (!xIsNan<IssmDouble>(spcvx[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvy[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++						if (!xIsNan<IssmDouble>(spcvz[i])){
++							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++							count++;
++						}
++					}
++					else _error_("if vertices_type is SSAFS, you shoud have nodeonSSA or nodeonFS");
++			}
++			/*Now add the regular spcs*/
++			else{
++				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
++					count++;
++
++				}
++				else if (Mx==iomodel->numberofvertices+1) {
++					/*figure out times and values: */
++					values=xNew<IssmDouble>(Nx);
++					spcpresent=false;
++					for(j=0;j<Nx;j++){
++						values[j]=spcvx[i*Nx+j];
++						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++					}
++
++					if(spcpresent){
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,Nx,timesx,values,StressbalanceAnalysisEnum));
++						count++;
++					}
++					xDelete<IssmDouble>(values);
++				}
++				else if (vertices_type[i]==SIAApproximationEnum){
++					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,StressbalanceAnalysisEnum));
++					count++;
++				}
++
++				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
++					count++;
++				}
++				else if (My==iomodel->numberofvertices+1){
++					/*figure out times and values: */
++					values=xNew<IssmDouble>(Ny);
++					spcpresent=false;
++					for(j=0;j<Ny;j++){
++						values[j]=spcvy[i*Ny+j];
++						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++					}
++					if(spcpresent){
++						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,Ny,timesy,values,StressbalanceAnalysisEnum));
++						count++;
++					}
++					xDelete<IssmDouble>(values);
++				}
++				else if (vertices_type[i]==SIAApproximationEnum){
++					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,StressbalanceAnalysisEnum));
++					count++;
++				}
++
++				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
++					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++						count++;
++					}
++					else if (Mz==iomodel->numberofvertices+1){
++						/*figure out times and values: */
++						values=xNew<IssmDouble>(Nz);
++						spcpresent=false;
++						for(j=0;j<Nz;j++){
++							values[j]=spcvz[i*Nz+j];
++							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++						}
++						if(spcpresent){
++							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,Nz,timesz,values,StressbalanceAnalysisEnum));
++							count++;
++						}
++						xDelete<IssmDouble>(values);
++					}
++
++				}
++				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
++					count++;
++				}
++			}
++
++			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
++			if (iomodel->meshtype==Mesh3DEnum) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
++				 switch(reCast<int,IssmDouble>(vertices_type[i])){
++					case SSAFSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					case HOFSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					case FSApproximationEnum:
++						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,StressbalanceAnalysisEnum));
++						count++;
++						break;
++					default: _error_("Vertex approximation " << EnumToStringx(reCast<int,IssmDouble>(vertices_type[i])) << " not supported");
++				}
++			}
++		}
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(spcvx,StressbalanceSpcvxEnum);
++	iomodel->DeleteData(spcvy,StressbalanceSpcvyEnum);
++	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
++	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
++	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
++	iomodel->DeleteData(surface,SurfaceEnum);
++	iomodel->DeleteData(z,MeshZEnum);
++
++	/*Free resources:*/
++	xDelete<IssmDouble>(timesx);
++	xDelete<IssmDouble>(timesy);
++	xDelete<IssmDouble>(timesz);
++	xDelete<IssmDouble>(values);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void StressbalanceAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	const int   RIFTINFOSIZE = 12;
++	int         i;
++	int         count;
++	int         penpair_ids[2];
++	bool        isSSA,isL1L2,isHO,isFS;
++	int         numpenalties,numrifts,numriftsegments;
++	IssmDouble *riftinfo       = NULL;
++	IssmDouble *penalties      = NULL;
++	int         assert_int;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
++	iomodel->Constant(&isFS,FlowequationIsFSEnum);
++	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
++	iomodel->Constant(&isHO,FlowequationIsHOEnum);
++	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
++	if(!isSSA && !isHO && !isFS && !isL1L2) return;
++
++	/*Initialize counter: */
++	count=0;
++
++	/*Create Penpair for penalties: */
++	iomodel->FetchData(&penalties,&numpenalties,NULL,StressbalanceVertexPairingEnum);
++
++	for(i=0;i<numpenalties;i++){
++
++		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			assert_int=iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+1]-1)]; _assert_(assert_int);
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],StressbalanceAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(penalties,StressbalanceVertexPairingEnum);
++
++	/*Create Riffront loads for rifts: */
++#ifdef _HAVE_RIFTS_
++	if(numrifts){
++		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
++		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
++		for(i=0;i<numriftsegments;i++){
++			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
++				loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,StressbalanceAnalysisEnum));
++				count++;
++			}
++		}
++		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
++		xDelete<IssmDouble>(riftinfo);
++	}
++#endif
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class MeshdeformationAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class EnthalpyAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class FreeSurfaceBaseAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class SmoothedSurfaceSlopeXAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,149 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void HydrologyDCInefficientAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	Parameters *parameters = NULL;
++	int         hydrology_model;
++	int         sedimentlimit_flag;
++	int         transfer_flag;
++	bool        isefficientlayer;
++	IssmDouble  sedimentlimit;
++	IssmDouble  penalty_factor;
++	IssmDouble  leakagefactor;
++	IssmDouble  rel_tol;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*retrieve some parameters: */
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want DC?*/
++	if(hydrology_model!=HydrologydcEnum){
++		*pparameters=parameters;
++		return;
++	}
++
++	iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++	iomodel->FetchData(&sedimentlimit_flag,HydrologydcSedimentlimitFlagEnum);
++	iomodel->FetchData(&transfer_flag,HydrologydcTransferFlagEnum);
++	iomodel->FetchData(&penalty_factor,HydrologydcPenaltyFactorEnum);
++	iomodel->FetchData(&rel_tol,HydrologydcRelTolEnum);
++
++	if(sedimentlimit_flag==1){
++		iomodel->FetchData(&sedimentlimit,HydrologydcSedimentlimitEnum);
++		parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit));
++	}
++
++	if(transfer_flag==1){
++		iomodel->FetchData(&leakagefactor,HydrologydcLeakageFactorEnum);
++		parameters->AddObject(new DoubleParam(HydrologydcLeakageFactorEnum,leakagefactor));
++	}
++
++	parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor));
++	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
++	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
++	parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag));
++	parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
++	parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol));
++
++	/*Assign output pointer: */
++	*pparameters=parameters;
++}/*}}}*/
++void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	bool   isefficientlayer;
++	int    hydrology_model;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want DC?*/
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
++	if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum);
++}/*}}}*/
++void HydrologyDCInefficientAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int  hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++
++	/*Now, do we really want DC?*/
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void HydrologyDCInefficientAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*retrieve some parameters: */
++	int hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void HydrologyDCInefficientAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Fetch parameters: */
++	int hydrology_model;
++	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
++	if(hydrology_model!=HydrologydcEnum) return;
++
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++
++	//create penalties for nodes: no node can have a temperature over the melting point
++	CreateSingleNodeToElementConnectivity(iomodel);
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		if (iomodel->meshtype==Mesh3DEnum){
++			/*keep only this partition's nodes:*/
++			if(iomodel->my_vertices[i]){
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
++			}
++		}
++		else if(reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
++			if(iomodel->my_vertices[i]){
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
++			}	
++		}
++	}
++	/*Assign output pointer: */
++	*ploads=loads;
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,100 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int ThermalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  ThermalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void ThermalAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void ThermalAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
++	iomodel->FetchDataToInput(elements,FrictionPEnum);
++	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
++	iomodel->FetchDataToInput(elements,TemperatureEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
++	if(dakota_analysis){
++		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
++		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
++	}
++}/*}}}*/
++void ThermalAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void ThermalAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*Only 3d mesh supported*/
++	if(iomodel->meshtype==Mesh3DEnum){
++		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
++	}
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void ThermalAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
++
++	/*create penalties for nodes: no node can have a temperature over the melting point*/
++	iomodel->FetchData(1,ThermalSpctemperatureEnum);
++	CreateSingleNodeToElementConnectivity(iomodel);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++
++		/*keep only this partition's nodes:*/
++		if(iomodel->my_vertices[i]){
++			if (xIsNan<IssmDouble>(iomodel->Data(ThermalSpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
++			}
++		}
++	}
++	iomodel->DeleteData(1,ThermalSpctemperatureEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class SmoothedSurfaceSlopeYAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class ExtrudeFromTopAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,32 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int ExtrudeFromBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  ExtrudeFromBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void ExtrudeFromBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}/*}}}*/
++void ExtrudeFromBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	::CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
++
++}/*}}}*/
++void ExtrudeFromBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void ExtrudeFromBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,72 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int MeltingAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  MeltingAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void MeltingAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void MeltingAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	/*Create inputs: */
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
++	iomodel->FetchDataToInput(elements,FrictionPEnum);
++	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
++}/*}}}*/
++void MeltingAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void MeltingAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	/*No Constraints*/
++}/*}}}*/
++void MeltingAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*if 2d: Error*/
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	//create penalties for nodes: no node can have a temperature over the melting point
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++	CreateSingleNodeToElementConnectivity(iomodel);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++		if(iomodel->my_vertices[i]){
++			if (reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
++			}
++		}
++	}
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,33 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int GiaAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  GiaAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void GiaAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void GiaAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,GiaMantleViscosityEnum);
++	iomodel->FetchDataToInput(elements,GiaLithosphereThicknessEnum);
++}/*}}}*/
++void GiaAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	::CreateNodes(pnodes,iomodel,GiaAnalysisEnum,P1Enum);
++}/*}}}*/
++void GiaAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	/*No constraints*/
++}/*}}}*/
++void GiaAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	/*No loads*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class BalancethicknessSoftAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class HydrologyShreveAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class BalancethicknessAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class HydrologyDCEfficientAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class AdjointHorizAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class BalancevelocityAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,21 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processor*/
+-int AdjointBalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  AdjointBalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void AdjointBalancethicknessAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++	_error_("not implemented yet");
++}/*}}}*/
++void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++	_error_("not implemented yet");
++}/*}}}*/
++void AdjointBalancethicknessAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	_error_("not implemented yet");
++}/*}}}*/
++void AdjointBalancethicknessAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	_error_("not implemented yet");
++}/*}}}*/
++void AdjointBalancethicknessAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	_error_("not implemented yet");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class L2ProjectionBaseAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16539)
+@@ -6,3 +6,9 @@
+ Analysis* EnumToAnalysis(int analysis_enum);
+ 
+ #endif
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,209 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int MasstransportAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  MasstransportAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void MasstransportAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++
++	/*Get parameters: */
++	Parameters *parameters=*pparameters;
++
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
++
++	/*Assign output pointer: */
++	*pparameters = parameters;
++}/*}}}*/
++void MasstransportAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	int    stabilization,finiteelement;
++	bool   dakota_analysis;
++	bool   issmbgradients;
++	bool   ispdd;
++	bool   isdelta18o;
++	bool   isgroundingline;
++
++	/*Fetch data needed: */
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
++	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
++	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
++
++	/*Finite element type*/
++	finiteelement = P1Enum;
++	if(stabilization==3){
++		finiteelement = P1DGEnum;
++	}
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++
++	if(stabilization==3){
++		iomodel->FetchDataToInput(elements,MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
++	}
++
++	if(dakota_analysis){
++		elements->InputDuplicate(BedEnum,QmuBedEnum);
++		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
++		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
++		elements->InputDuplicate(MaskIceLevelsetEnum,QmuMaskIceLevelsetEnum);
++		if(isgroundingline) elements->InputDuplicate(MaskGroundediceLevelsetEnum,QmuMaskGroundediceLevelsetEnum);
++	}
++
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++
++	if(issmbgradients){
++		iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
++		iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
++	}
++	if(ispdd){
++		iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
++		if(isdelta18o){
++			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesLgmEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
++		}
++		else{
++			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
++			iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
++		}
++	}
++	if(~ispdd && ~issmbgradients){
++		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
++	}
++}/*}}}*/
++void MasstransportAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int  stabilization;
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Check in 3d*/
++	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
++
++	/*Create Nodes either DG or CG depending on stabilization*/
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	if(stabilization!=3){
++		::CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
++	}
++	else{
++		::CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
++	}
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void MasstransportAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int stabilization;
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*Do not add constraints in DG, they are weakly imposed*/
++	if(stabilization!=3){
++		IoModelToConstraintsx(constraints,iomodel,MasstransportSpcthicknessEnum,MasstransportAnalysisEnum,P1Enum);
++	}
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void MasstransportAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Intermediaries*/
++	int element;
++	int penpair_ids[2];
++	int count=0;
++	int stabilization;
++	int numvertex_pairing;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Loads only in DG*/
++	if (stabilization==3){
++
++		/*Get faces and elements*/
++		CreateFaces(iomodel);
++		iomodel->FetchData(1,ThicknessEnum);
++
++		/*First load data:*/
++		for(int i=0;i<iomodel->numberoffaces;i++){
++
++			/*Get left and right elements*/
++			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
++
++			/*Now, if this element is not in the partition, pass: */
++			if(!iomodel->my_elements[element]) continue;
++
++			/* Add load */
++			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,MasstransportAnalysisEnum));
++		}
++
++		/*Free data: */
++		iomodel->DeleteData(1,ThicknessEnum);
++	}
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonbed=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							MasstransportAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class FreeSurfaceTopAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,77 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int DamageEvolutionAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  DamageEvolutionAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void DamageEvolutionAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void DamageEvolutionAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	/*What input do I need to run my damage evolution model?*/
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	iomodel->FetchDataToInput(elements,DamageDEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
++
++	bool dakota_analysis;
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++	if(dakota_analysis){
++		elements->InputDuplicate(DamageDEnum, QmuDamageDEnum);
++	}
++}/*}}}*/
++void DamageEvolutionAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++	::CreateNodes(pnodes,iomodel,DamageEvolutionAnalysisEnum,P1Enum);
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++}/*}}}*/
++void DamageEvolutionAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Fetch parameters: */
++	int stabilization;
++	iomodel->Constant(&stabilization,DamageStabilizationEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	IoModelToConstraintsx(constraints,iomodel,DamageSpcdamageEnum,DamageEvolutionAnalysisEnum,P1Enum);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void DamageEvolutionAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*create penalties for nodes: no node can have a damage > 1*/
++	iomodel->FetchData(1,DamageSpcdamageEnum);
++	CreateSingleNodeToElementConnectivity(iomodel);
++
++	for(int i=0;i<iomodel->numberofvertices;i++){
++
++		/*keep only this partition's nodes:*/
++		if(iomodel->my_vertices[i]){
++			if (xIsNan<IssmDouble>(iomodel->Data(DamageSpcdamageEnum)[i])){ //No penalty applied on spc nodes!
++				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,DamageEvolutionAnalysisEnum));
++			}
++		}
++	}
++	iomodel->DeleteData(1,DamageSpcdamageEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,173 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int EnthalpyAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  EnthalpyAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void EnthalpyAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void EnthalpyAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	bool dakota_analysis;
++	bool isenthalpy;
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
++
++	/*Is enthalpy requested?*/
++	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
++	if(!isenthalpy) return;
++
++	/*Fetch data needed: */
++	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
++
++	iomodel->FetchDataToInput(elements,ThicknessEnum);
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
++	iomodel->FetchDataToInput(elements,FrictionPEnum);
++	iomodel->FetchDataToInput(elements,FrictionQEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
++	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
++	iomodel->FetchDataToInput(elements,PressureEnum);
++	iomodel->FetchDataToInput(elements,TemperatureEnum);
++	iomodel->FetchDataToInput(elements,WaterfractionEnum);
++	iomodel->FetchDataToInput(elements,EnthalpyEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
++	iomodel->FetchDataToInput(elements,WatercolumnEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	iomodel->FetchDataToInput(elements,VzEnum);
++	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
++	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
++	if(dakota_analysis){
++		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
++		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
++		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
++	}
++
++	/*Free data: */
++	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
++}/*}}}*/
++void EnthalpyAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void EnthalpyAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++
++	/*Intermediary*/
++	int        count;
++	int        M,N;
++	bool       spcpresent = false;
++	IssmDouble heatcapacity;
++	IssmDouble referencetemperature;
++
++	/*Output*/
++	IssmDouble *spcvector  = NULL;
++	IssmDouble* times=NULL;
++	IssmDouble* values=NULL;
++
++	/*Fetch parameters: */
++	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
++	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
++
++	/*Recover pointer: */
++	Constraints* constraints=*pconstraints;
++
++	/*return if 2d mesh*/
++	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
++
++	/*Fetch data: */
++	iomodel->FetchData(&spcvector,&M,&N,ThermalSpctemperatureEnum);
++
++	//FIX ME: SHOULD USE IOMODELCREATECONSTRAINTS 
++	/*Transient or static?:*/
++	if(M==iomodel->numberofvertices){
++		/*static: just create Constraints objects*/
++		count=0;
++
++		for(int i=0;i<iomodel->numberofvertices;i++){
++			/*keep only this partition's nodes:*/
++			if((iomodel->my_vertices[i])){
++
++				if (!xIsNan<IssmDouble>(spcvector[i])){
++
++					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,heatcapacity*(spcvector[i]-referencetemperature),EnthalpyAnalysisEnum));
++					count++;
++
++				}
++			}
++		}
++	}
++	else if (M==(iomodel->numberofvertices+1)){
++		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
++		 * various times and values to initialize an SpcTransient object: */
++		count=0;
++
++		/*figure out times: */
++		times=xNew<IssmDouble>(N);
++		for(int j=0;j<N;j++){
++			times[j]=spcvector[(M-1)*N+j];
++		}
++
++		/*Create constraints from x,y,z: */
++		for(int i=0;i<iomodel->numberofvertices;i++){
++
++			/*keep only this partition's nodes:*/
++			if((iomodel->my_vertices[i])){
++
++				/*figure out times and values: */
++				values=xNew<IssmDouble>(N);
++				spcpresent=false;
++				for(int j=0;j<N;j++){
++					values[j]=heatcapacity*(spcvector[i*N+j]-referencetemperature);
++					if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
++				}
++
++				if(spcpresent){
++					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,EnthalpyAnalysisEnum));
++					count++;
++				}
++				xDelete<IssmDouble>(values);
++			}
++		}
++	}
++	else{
++		_error_("Size of field " << EnumToStringx(ThermalSpctemperatureEnum) << " not supported");
++	}
++
++	/*Free ressources:*/
++	iomodel->DeleteData(spcvector,ThermalSpctemperatureEnum);
++	xDelete<IssmDouble>(times);
++	xDelete<IssmDouble>(values);
++
++	/*Assign output pointer: */
++	*pconstraints=constraints;
++}/*}}}*/
++void EnthalpyAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*No loads */
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,21 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int MeshdeformationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  MeshdeformationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
++void MeshdeformationAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void MeshdeformationAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void MeshdeformationAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void MeshdeformationAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
++void MeshdeformationAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++	   _error_("not implemented yet");
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,91 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void FreeSurfaceBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Now, is the model 3d? otherwise, do nothing: */
++	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
++
++	/*Finite element type*/
++	int finiteelement = P1Enum;
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
++	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
++	iomodel->FetchDataToInput(elements,VxEnum);
++	iomodel->FetchDataToInput(elements,VyEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,VzEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++}/*}}}*/
++void FreeSurfaceBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++	::CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
++	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
++}/*}}}*/
++void FreeSurfaceBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void FreeSurfaceBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++
++	/*Intermediaries*/
++	int penpair_ids[2];
++	int count=0;
++	int numvertex_pairing;
++
++	/*Recover pointer: */
++	Loads* loads=*ploads;
++
++	/*Create Penpair for vertex_pairing: */
++	IssmDouble *vertex_pairing=NULL;
++	IssmDouble *nodeonbed=NULL;
++	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
++	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
++	for(int i=0;i<numvertex_pairing;i++){
++
++		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
++
++			/*In debugging mode, check that the second node is in the same cpu*/
++			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
++
++			/*Skip if one of the two is not on the bed*/
++			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
++
++			/*Get node ids*/
++			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
++			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
++
++			/*Create Load*/
++			loads->AddObject(new Penpair(
++							iomodel->loadcounter+count+1,
++							&penpair_ids[0],
++							FreeSurfaceBaseAnalysisEnum));
++			count++;
++		}
++	}
++
++	/*free ressources: */
++	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
++	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
++
++	/*Assign output pointer: */
++	*ploads=loads;
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,40 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int SmoothedSurfaceSlopeXAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  SmoothedSurfaceSlopeXAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void SmoothedSurfaceSlopeXAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void SmoothedSurfaceSlopeXAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}/*}}}*/
++void SmoothedSurfaceSlopeXAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++	::CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeXAnalysisEnum,P1Enum);
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++}/*}}}*/
++void SmoothedSurfaceSlopeXAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void SmoothedSurfaceSlopeXAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,32 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int ExtrudeFromTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  ExtrudeFromTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void ExtrudeFromTopAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}/*}}}*/
++void ExtrudeFromTopAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++
++	::CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
++
++}/*}}}*/
++void ExtrudeFromTopAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void ExtrudeFromTopAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16539)
+@@ -5,6 +5,40 @@
+ #include "../modules/modules.h"
+ 
+ /*Model processing*/
+-int SmoothedSurfaceSlopeYAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
++int  SmoothedSurfaceSlopeYAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
++void SmoothedSurfaceSlopeYAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++}/*}}}*/
++void SmoothedSurfaceSlopeYAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
++
++	/*Update elements: */
++	int counter=0;
++	for(int i=0;i<iomodel->numberofelements;i++){
++		if(iomodel->my_elements[i]){
++			Element* element=(Element*)elements->GetObjectByOffset(counter);
++			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
++			counter++;
++		}
++	}
++
++	iomodel->FetchDataToInput(elements,SurfaceEnum);
++	iomodel->FetchDataToInput(elements,BedEnum);
++	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
++	if(iomodel->meshtype==Mesh3DEnum){
++		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
++		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
++	}
++	if(iomodel->meshtype==Mesh2DverticalEnum){
++		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
++	}
++}/*}}}*/
++void SmoothedSurfaceSlopeYAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++	iomodel->FetchData(1,MeshVertexonbedEnum);
++	::CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeYAnalysisEnum,P1Enum);
++	iomodel->DeleteData(1,MeshVertexonbedEnum);
++}/*}}}*/
++void SmoothedSurfaceSlopeYAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++}/*}}}*/
++void SmoothedSurfaceSlopeYAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++}/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16538)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16539)
+@@ -11,6 +11,11 @@
+ class StressbalanceVerticalAnalysis: public Analysis{
+ 
+ 	public:
+-		int DofsPerNode(int** doflist,int meshtype,int approximation);
++		int  DofsPerNode(int** doflist,int meshtype,int approximation);
++		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
++		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
++		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
++		void CreateLoads(Loads** ploads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp	(revision 16539)
+@@ -1,83 +0,0 @@
+-/*! \file CreateLoadsMasstransport.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	int element;
+-	int penpair_ids[2];
+-	int count=0;
+-	int stabilization;
+-	int numvertex_pairing;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Loads only in DG*/
+-	if (stabilization==3){
+-
+-		/*Get faces and elements*/
+-		CreateFaces(iomodel);
+-		iomodel->FetchData(1,ThicknessEnum);
+-
+-		/*First load data:*/
+-		for(int i=0;i<iomodel->numberoffaces;i++){
+-
+-			/*Get left and right elements*/
+-			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
+-
+-			/*Now, if this element is not in the partition, pass: */
+-			if(!iomodel->my_elements[element]) continue;
+-
+-			/* Add load */
+-			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,MasstransportAnalysisEnum));
+-		}
+-
+-		/*Free data: */
+-		iomodel->DeleteData(1,ThicknessEnum);
+-	}
+-
+-	/*Create Penpair for vertex_pairing: */
+-	IssmDouble *vertex_pairing=NULL;
+-	IssmDouble *nodeonbed=NULL;
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
+-	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-
+-	for(int i=0;i<numvertex_pairing;i++){
+-
+-		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
+-
+-			/*Skip if one of the two is not on the bed*/
+-			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(
+-							iomodel->loadcounter+count+1,
+-							&penpair_ids[0],
+-							MasstransportAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+-	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp	(revision 16539)
+@@ -1,23 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsMasstransport(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int stabilization;
+-	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Do not add constraints in DG, they are weakly imposed*/
+-	if(stabilization!=3){
+-		IoModelToConstraintsx(constraints,iomodel,MasstransportSpcthicknessEnum,MasstransportAnalysisEnum,P1Enum);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp	(revision 16539)
+@@ -1,29 +0,0 @@
+-/*
+- * CreateNodesMasstransport.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesMasstransport(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int  stabilization;
+-	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+-
+-	/*Check in 3d*/
+-	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+-
+-	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	if(stabilization!=3){
+-		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+-	}
+-	else{
+-		CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
+-	}
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp	(revision 16539)
+@@ -1,92 +0,0 @@
+-/*
+- * UpdateElementsMasstransport:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsMasstransport(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    stabilization,finiteelement;
+-	bool   dakota_analysis;
+-	bool   issmbgradients;
+-	bool   ispdd;
+-	bool   isdelta18o;
+-	bool   isgroundingline;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	iomodel->Constant(&ispdd,SurfaceforcingsIspddEnum);
+-	iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+-	iomodel->Constant(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+-	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+-
+-	/*Finite element type*/
+-	finiteelement = P1Enum;
+-	if(stabilization==3){
+-		finiteelement = P1DGEnum;
+-	}
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-
+-	if(stabilization==3){
+-		iomodel->FetchDataToInput(elements,MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
+-	}
+-
+-	if(dakota_analysis){
+-		elements->InputDuplicate(BedEnum,QmuBedEnum);
+-		elements->InputDuplicate(ThicknessEnum,QmuThicknessEnum);
+-		elements->InputDuplicate(SurfaceEnum,QmuSurfaceEnum);
+-		elements->InputDuplicate(MaskIceLevelsetEnum,QmuMaskIceLevelsetEnum);
+-		if(isgroundingline) elements->InputDuplicate(MaskGroundediceLevelsetEnum,QmuMaskGroundediceLevelsetEnum);
+-	}
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-
+-	if(issmbgradients){
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsBPosEnum);
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsBNegEnum);
+-	}
+-	if(ispdd){
+-		iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+-		if(isdelta18o){
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesLgmEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
+-		}
+-		else{
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
+-			iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
+-		}
+-	}
+-	if(~ispdd && ~issmbgradients){
+-		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 16539)
+@@ -1,12 +0,0 @@
+-/*! \file CreateLoadsEnthalpy.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads */
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 16539)
+@@ -1,100 +0,0 @@
+-/*
+- * CreateConstraintsEnthalpy.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsEnthalpy(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int        count;
+-	int        M,N;
+-	bool       spcpresent = false;
+-	IssmDouble heatcapacity;
+-	IssmDouble referencetemperature;
+-
+-	/*Output*/
+-	IssmDouble *spcvector  = NULL;
+-	IssmDouble* times=NULL;
+-	IssmDouble* values=NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+-	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*return if 2d mesh*/
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
+-
+-	/*Fetch data: */
+-	iomodel->FetchData(&spcvector,&M,&N,ThermalSpctemperatureEnum);
+-
+-	//FIX ME: SHOULD USE IOMODELCREATECONSTRAINTS 
+-	/*Transient or static?:*/
+-	if(M==iomodel->numberofvertices){
+-		/*static: just create Constraints objects*/
+-		count=0;
+-
+-		for(int i=0;i<iomodel->numberofvertices;i++){
+-			/*keep only this partition's nodes:*/
+-			if((iomodel->my_vertices[i])){
+-
+-				if (!xIsNan<IssmDouble>(spcvector[i])){
+-
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,heatcapacity*(spcvector[i]-referencetemperature),EnthalpyAnalysisEnum));
+-					count++;
+-
+-				}
+-			}
+-		}
+-	}
+-	else if (M==(iomodel->numberofvertices+1)){
+-		/*transient: create transient SpcTransient objects. Same logic, except we need to retrieve 
+-		 * various times and values to initialize an SpcTransient object: */
+-		count=0;
+-
+-		/*figure out times: */
+-		times=xNew<IssmDouble>(N);
+-		for(int j=0;j<N;j++){
+-			times[j]=spcvector[(M-1)*N+j];
+-		}
+-
+-		/*Create constraints from x,y,z: */
+-		for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-			/*keep only this partition's nodes:*/
+-			if((iomodel->my_vertices[i])){
+-
+-				/*figure out times and values: */
+-				values=xNew<IssmDouble>(N);
+-				spcpresent=false;
+-				for(int j=0;j<N;j++){
+-					values[j]=heatcapacity*(spcvector[i*N+j]-referencetemperature);
+-					if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-				}
+-
+-				if(spcpresent){
+-					constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,N,times,values,EnthalpyAnalysisEnum));
+-					count++;
+-				}
+-				xDelete<IssmDouble>(values);
+-			}
+-		}
+-	}
+-	else{
+-		_error_("Size of field " << EnumToStringx(ThermalSpctemperatureEnum) << " not supported");
+-	}
+-
+-	/*Free ressources:*/
+-	iomodel->DeleteData(spcvector,ThermalSpctemperatureEnum);
+-	xDelete<IssmDouble>(times);
+-	xDelete<IssmDouble>(values);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 16539)
+@@ -1,16 +0,0 @@
+-/*
+- * CreateNodesEnthalpy.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesEnthalpy(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 16539)
+@@ -1,75 +0,0 @@
+-/*
+- * UpdateElementsEnthalpy:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	bool dakota_analysis;
+-	bool isenthalpy;
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+-
+-	/*Is enthalpy requested?*/
+-	iomodel->Constant(&isenthalpy,ThermalIsenthalpyEnum);
+-	if(!isenthalpy) return;
+-
+-	/*Fetch data needed: */
+-	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+-	iomodel->FetchDataToInput(elements,FrictionPEnum);
+-	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,PressureEnum);
+-	iomodel->FetchDataToInput(elements,TemperatureEnum);
+-	iomodel->FetchDataToInput(elements,WaterfractionEnum);
+-	iomodel->FetchDataToInput(elements,EnthalpyEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
+-	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,VzEnum);
+-	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
+-	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
+-	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
+-	if(dakota_analysis){
+-		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+-		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp	(revision 16539)
+@@ -1,53 +0,0 @@
+-/*! \file CreateLoadsFreeSurfaceBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	int penpair_ids[2];
+-	int count=0;
+-	int numvertex_pairing;
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Create Penpair for vertex_pairing: */
+-	IssmDouble *vertex_pairing=NULL;
+-	IssmDouble *nodeonbed=NULL;
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
+-	iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	for(int i=0;i<numvertex_pairing;i++){
+-
+-		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
+-
+-			/*Skip if one of the two is not on the bed*/
+-			if(!(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonbed[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(
+-							iomodel->loadcounter+count+1,
+-							&penpair_ids[0],
+-							FreeSurfaceBaseAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+-	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp	(revision 16539)
+@@ -1,10 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsFreeSurfaceBase(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp	(revision 16539)
+@@ -1,17 +0,0 @@
+-/*
+- * CreateNodesFreeSurfaceBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesFreeSurfaceBase(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp	(revision 16539)
+@@ -1,40 +0,0 @@
+-/*
+- * UpdateElementsFreeSurfaceBase:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsFreeSurfaceBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
+-
+-	/*Finite element type*/
+-	int finiteelement = P1Enum;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateCorrectionEnum,0.);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,VzEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp	(revision 16539)
+@@ -1,26 +0,0 @@
+-/*
+- * UpdateElementsExtrudeFromTop:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsExtrudeFromTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsExtrudeFromTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsExtrudeFromTop(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp	(revision 16539)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsExtrudeFromTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsExtrudeFromTop(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*These are automated*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp	(revision 16539)
+@@ -1,15 +0,0 @@
+-/*
+- * CreateNodesExtrudeFromTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesExtrudeFromTop(Nodes** pnodes, IoModel* iomodel){
+-
+-	CreateNodes(pnodes,iomodel,ExtrudeFromTopAnalysisEnum,P1Enum);
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp	(revision 16539)
+@@ -1,42 +0,0 @@
+-/*
+- * UpdateElementsHydrologyShreve:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsHydrologyShreve(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    hydrology_model;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want Shreve?*/
+-	if(hydrology_model!=HydrologyshreveEnum) return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+-
+-	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsHydrologyShreve.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp	(revision 16539)
+@@ -1,32 +0,0 @@
+-/*!\file: CreateParametersHydrologyShreve.cpp
+- * \brief driver for creating parameters dataset, for control analysis.
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	Parameters *parameters = NULL;
+-	int         hydrology_model;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+-	/*retrieve some parameters: */
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want Shreve?*/
+-	if(hydrology_model!=HydrologyshreveEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
+-
+-	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+-	parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp	(revision 16539)
+@@ -1,26 +0,0 @@
+-/*
+- * CreateConstraintsHydrologyShreve.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsHydrologyShreve(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*retrieve some parameters: */
+-	int          hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	if(hydrology_model!=HydrologyshreveEnum) return;
+-
+-	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp	(revision 16539)
+@@ -1,23 +0,0 @@
+-/*
+- * CreateNodesHydrologyShreve.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesHydrologyShreve(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int  hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want Shreve?*/
+-	if(hydrology_model!=HydrologyshreveEnum) return;
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 16539)
+@@ -1,47 +0,0 @@
+-/*! \file CreateLoadsBalancethickness.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int element;
+-	int stabilization;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Loads only in DG*/
+-	if (stabilization==3){
+-
+-		/*Get faces and elements*/
+-		CreateFaces(iomodel);
+-		iomodel->FetchData(1,ThicknessEnum);
+-
+-		/*First load data:*/
+-		for(int i=0;i<iomodel->numberoffaces;i++){
+-
+-			/*Get left and right elements*/
+-			element=iomodel->faces[4*i+2]-1; //faces are [node1 node2 elem1 elem2]
+-
+-			/*Now, if this element is not in the partition, pass: */
+-			if(!iomodel->my_elements[element]) continue;
+-
+-			/* Add load */
+-			loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,i,iomodel,BalancethicknessAnalysisEnum));
+-		}
+-
+-		/*Free data: */
+-		iomodel->DeleteData(1,ThicknessEnum);
+-	}
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 16539)
+@@ -1,23 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int    stabilization;	
+-	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Do not add constraints in DG*/
+-	if(stabilization!=3){
+-		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum,P1Enum);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 16539)
+@@ -1,29 +0,0 @@
+-/*
+- * CreateNodesBalancethickness.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesBalancethickness(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int  stabilization;
+-	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+-
+-	/*Check in 3d*/
+-	if(stabilization==3 && iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+-
+-	/*First fetch data: */
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	if(stabilization!=3){
+-		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+-	}
+-	else{
+-		CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+-	}
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 16539)
+@@ -1,48 +0,0 @@
+-/*
+- * UpdateElementsBalancethickness:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsBalancethickness(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    stabilization,finiteelement;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+-
+-	/*Finite element type*/
+-	finiteelement = P1Enum;
+-	if(stabilization==3){
+-		finiteelement = P1DGEnum;
+-	}
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp	(revision 16539)
+@@ -1,42 +0,0 @@
+-/*
+- * UpdateElementsHydrologyDCEfficient:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsHydrologyDCEfficient(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	bool   isefficientlayer;
+-	int    hydrology_model;
+-
+-	/*Now, do we really want DC?*/
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	/*Do we want an efficient layer*/
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer) return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,EplHeadEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp	(revision 16539)
+@@ -1,28 +0,0 @@
+-/*! \file CreateLoadsHydrologyDCEfficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Do we really want DC?*/
+-	int  hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	/*Do we want an efficient layer*/
+-	bool isefficientlayer;
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer) return;
+-
+-	/*Nothing for now*/
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp	(revision 16539)
+@@ -1,39 +0,0 @@
+-/*!\file: CreateParametersHydrologyDCEfficient.cpp
+- * \brief driver for creating parameters dataset, for control analysis.
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	Parameters *parameters = NULL;
+-	int         hydrology_model;
+-	bool        isefficientlayer;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+-	/*retrieve some parameters: */
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
+-
+-	/*Do we want an efficient layer*/
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer){
+-		*pparameters=parameters;
+-		return;
+-	}
+-
+-	/*Nothing for now*/
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp	(revision 16539)
+@@ -1,30 +0,0 @@
+-/*
+- * CreateConstraintsHydrologyDCEfficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Do we really want DC?*/
+-	int  hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	/*Do we want an efficient layer*/
+-	bool isefficientlayer;
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer) return;
+-
+-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp	(revision 16539)
+@@ -1,26 +0,0 @@
+-/*
+- * CreateNodesHydrologyDCEfficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesHydrologyDCEfficient(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Now, do we really want DC?*/
+-	int  hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	/*Do we want an efficient layer*/
+-	bool isefficientlayer;
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer) return;
+-
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsBalancevelocity.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsBalancevelocity(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp	(revision 16539)
+@@ -1,17 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsBalancevelocity(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*No constraints for now*/
+-	//IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp	(revision 16539)
+@@ -1,20 +0,0 @@
+-/*
+- * CreateNodesBalancevelocity.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesBalancevelocity(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Check in 3d*/
+-	if(iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+-
+-	/*First fetch data: */
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	CreateNodes(pnodes,iomodel,BalancevelocityAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp	(revision 16539)
+@@ -1,37 +0,0 @@
+-/*
+- * UpdateElementsBalancevelocity:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsBalancevelocity(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
+-	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp	(revision 16539)
+@@ -1,33 +0,0 @@
+-/*
+- * UpdateElementsL2ProjectionBase:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsL2ProjectionBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsL2ProjectionBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsL2ProjectionBase(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp	(revision 16539)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsL2ProjectionBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsL2ProjectionBase(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp	(revision 16539)
+@@ -1,21 +0,0 @@
+-/*
+- * CreateNodesL2ProjectionBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesL2ProjectionBase(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	}
+-	else if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchData(1,MeshVertexonbedEnum);
+-	}
+-	CreateNodes(pnodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp	(revision 16539)
+@@ -1,38 +0,0 @@
+-/*
+- * UpdateElementsFreeSurfaceTop:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsFreeSurfaceTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if (iomodel->meshtype==Mesh2DhorizontalEnum)return;
+-
+-	int finiteelement = P1Enum;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,VzEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp	(revision 16539)
+@@ -1,53 +0,0 @@
+-/*! \file CreateLoadsFreeSurfaceTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	int penpair_ids[2];
+-	int count=0;
+-	int numvertex_pairing;
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Create Penpair for vertex_pairing: */
+-	IssmDouble *vertex_pairing=NULL;
+-	IssmDouble *nodeonsurface=NULL;
+-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
+-	iomodel->FetchData(&nodeonsurface,NULL,NULL,MeshVertexonsurfaceEnum);
+-	for(int i=0;i<numvertex_pairing;i++){
+-
+-		if(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+0])-1]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			_assert_(iomodel->my_vertices[reCast<int>(vertex_pairing[2*i+1])-1]);
+-
+-			/*Skip if one of the two is not on the bed*/
+-			if(!(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+0])-1])) || !(reCast<bool>(nodeonsurface[reCast<int>(vertex_pairing[2*i+1])-1]))) continue;
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int>(vertex_pairing[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(
+-							iomodel->loadcounter+count+1,
+-							&penpair_ids[0],
+-							FreeSurfaceTopAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+-	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp	(revision 16539)
+@@ -1,10 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsFreeSurfaceTop(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp	(revision 16539)
+@@ -1,17 +0,0 @@
+-/*
+- * CreateNodesFreeSurfaceTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesFreeSurfaceTop(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Create Nodes either DG or CG depending on stabilization*/
+-	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp	(revision 16539)
+@@ -1,19 +0,0 @@
+-/*
+- * CreateNodesStressbalanceVertical.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesStressbalanceVertical(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*return if not 3d mesh*/
+-	if(iomodel->meshtype!=Mesh3DEnum) return;
+-
+-	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp	(revision 16539)
+@@ -1,35 +0,0 @@
+-/*
+- * UpdateElementsStressbalanceVertical:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsStressbalanceVertical(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*return if not 3d mesh*/
+-	if(iomodel->meshtype!=Mesh3DEnum) return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum,0.);
+-	iomodel->FetchDataToInput(elements,VyEnum,0.);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsStressbalanceVertical.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsStressbalanceVertical(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp	(revision 16539)
+@@ -1,55 +0,0 @@
+-/*
+- * CreateConstraintsStressbalanceHoriz.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsStressbalanceVertical(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int count;
+-	IssmDouble yts;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*return if not 3d mesh*/
+-	if(iomodel->meshtype!=Mesh3DEnum) return;
+-
+-	/*Fetch data: */
+-	iomodel->FetchData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
+-
+-	/*Initialize counter*/
+-	count=0;
+-
+-	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		/*keep only this partition's nodes:*/
+-		if(iomodel->my_vertices[i]){
+-
+-			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
+-				count++;
+-			}
+-			else if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvzEnum)[i])){
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,
+-								iomodel->Data(StressbalanceSpcvzEnum)[i]/yts,StressbalanceVerticalAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-				count++;
+-
+-			}
+-		} 
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp	(revision 16539)
+@@ -1,30 +0,0 @@
+-/*
+- * UpdateElementsMeshDeformation:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsMeshDeformation(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsMeshDeformation.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsMeshDeformation(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*
+- * CreateConstraintsMeshDeformation.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsMeshDeformation(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp	(revision 16539)
+@@ -1,16 +0,0 @@
+-/*
+- * CreateNodesMeshDeformation.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesMeshDeformation(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,MeshdeformationAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp	(revision 16539)
+@@ -1,67 +0,0 @@
+-/*
+- * CreateConstraintsStressbalanceSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsStressbalanceSIA(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int        count;
+-	IssmDouble yts;
+-	bool       isSIA;
+-
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&yts,ConstantsYtsEnum);
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag isSIA on? otherwise, do nothing: */
+-	if (!isSIA) return;
+-
+-	/*Fetch data: */
+-	iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
+-
+-	/*Initialize conunter*/
+-	count=0;
+-
+-	/*vx and vy are spc'd if we are not on nodeonSIA: */
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		/*keep only this partition's nodes:*/
+-		if((iomodel->my_vertices[i])){
+-			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+-
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceSIAAnalysisEnum));
+-				count++;
+-
+-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceSIAAnalysisEnum));
+-				count++;
+-			}
+-			else{
+-				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvxEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-					count++;
+-				}
+-
+-				if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(StressbalanceSpcvyEnum)[i]/yts,StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-					count++;
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp	(revision 16539)
+@@ -1,52 +0,0 @@
+-/*
+- * CreateNodesStressbalanceSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesStressbalanceSIA(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Intermediaries*/
+-	bool  isSIA;
+-	Node* node = NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag isSIA on? otherwise, do nothing: */
+-	if(!isSIA) return;
+-
+-	/*First create nodes*/
+-	Nodes* nodes=*pnodes;
+-	int    lid=0;
+-	if(!nodes) nodes = new Nodes();
+-
+-	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Create new node if is in this processor's partition*/
+-			node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
+-
+-			/*Deactivate node if not SIA*/
+-			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+-				node->Deactivate();
+-			}
+-
+-			/*Add to Nodes dataset*/
+-			nodes->AddObject(node);
+-		}
+-	}
+-
+-	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp	(revision 16539)
+@@ -1,36 +0,0 @@
+-/*
+- * UpdateElementsStressbalanceSIA:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsStressbalanceSIA(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Fetch data needed: */
+-	bool   isSIA;
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-
+-	/*Now, is the flag SIA on? otherwise, do nothing: */
+-	if (!isSIA)return;
+-
+-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp	(revision 16539)
+@@ -1,12 +0,0 @@
+-/*! \file CreateLoadsStressbalanceSIA.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsStressbalanceSIA(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16539)
+@@ -1,128 +0,0 @@
+-/*
+- * UpdateElementsStressbalance:
+- */
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsStressbalance(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	int    materials_type,finiteelement;
+-	int    approximation;
+-	int*   finiteelement_list=NULL;
+-	bool   isSSA,isL1L2,isHO,isFS,iscoupling;
+-	bool   control_analysis;
+-	bool   dakota_analysis;
+-
+-	/*Fetch constants needed: */
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	iomodel->Constant(&materials_type,MaterialsEnum);
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+-
+-	/*Fetch data needed and allocate vectors: */
+-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+-	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
+-
+-	/*Do we have coupling*/
+-	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*Get finite element type*/
+-	if(!iscoupling){
+-		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
+-		else if(isL1L2) finiteelement = P1Enum;
+-		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
+-		else if(isFS)   iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+-		for(int i=0;i<iomodel->numberofelements;i++){
+-			finiteelement_list[i]=finiteelement;
+-		}
+-	}
+-	else{
+-		if(isFS){
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
+-				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
+-					finiteelement_list[i]=MINIcondensedEnum;
+-				}
+-				else{
+-					finiteelement_list[i]=P1Enum;
+-				}
+-			}
+-		}
+-		else{
+-			finiteelement = P1Enum;
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				finiteelement_list[i]=finiteelement;
+-			}
+-		}
+-	}
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
+-			counter++;
+-		}
+-	}
+-
+-	/*Create inputs: */
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+-	iomodel->FetchDataToInput(elements,FrictionPEnum);
+-	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum,0.);
+-	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum,0.);
+-	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+-	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
+-	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+-	iomodel->FetchDataToInput(elements,DamageDEnum);
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
+-		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
+-		iomodel->FetchDataToInput(elements,VzEnum,0.);
+-		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+-	}
+-	if(isFS){
+-		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+-		iomodel->FetchDataToInput(elements,PressureEnum,0.);
+-		if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+-	}
+-
+-	#ifdef _HAVE_ANDROID_
+-	elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
+-	#endif
+-
+-	/*Free data: */
+-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+-	xDelete<int>(finiteelement_list);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp	(revision 16539)
+@@ -1,78 +0,0 @@
+-/*! \file CreateLoadsStressbalance.c:
+- */
+-#include <string.h>
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int         i;
+-	int         count;
+-	int         penpair_ids[2];
+-	bool        isSSA,isL1L2,isHO,isFS;
+-	int         numpenalties,numrifts,numriftsegments;
+-	IssmDouble *riftinfo       = NULL;
+-	IssmDouble *penalties      = NULL;
+-	int         assert_int;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA && !isHO && !isFS && !isL1L2) return;
+-
+-	/*Initialize counter: */
+-	count=0;
+-
+-	/*Create Penpair for penalties: */
+-	iomodel->FetchData(&penalties,&numpenalties,NULL,StressbalanceVertexPairingEnum);
+-
+-	for(i=0;i<numpenalties;i++){
+-
+-		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
+-
+-			/*In debugging mode, check that the second node is in the same cpu*/
+-			assert_int=iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+1]-1)]; _assert_(assert_int);
+-
+-			/*Get node ids*/
+-			penpair_ids[0]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+0]);
+-			penpair_ids[1]=iomodel->nodecounter+reCast<int,IssmDouble>(penalties[2*i+1]);
+-
+-			/*Create Load*/
+-			loads->AddObject(new Penpair(iomodel->loadcounter+count+1,&penpair_ids[0],StressbalanceAnalysisEnum));
+-			count++;
+-		}
+-	}
+-
+-	/*free ressources: */
+-	iomodel->DeleteData(penalties,StressbalanceVertexPairingEnum);
+-
+-	/*Create Riffront loads for rifts: */
+-	#ifdef _HAVE_RIFTS_
+-	if(numrifts){
+-		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
+-		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+-		for(i=0;i<numriftsegments;i++){
+-			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
+-				loads->AddObject(new Riftfront(iomodel->loadcounter+count+1,i,iomodel,StressbalanceAnalysisEnum));
+-				count++;
+-			}
+-		}
+-		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+-		xDelete<IssmDouble>(riftinfo);
+-	}
+-	#endif
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp	(revision 16539)
+@@ -1,44 +0,0 @@
+-/*!\file: CreateParametersStressbalance.cpp
+- * \brief driver for creating parameters dataset, for control analysis.
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersStressbalance(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	/*Intermediaries*/
+-	int         numoutputs;
+-	char**      requestedoutputs = NULL;
+-
+-	/*Get parameters: */
+-	Parameters *parameters=*pparameters;
+-
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
+-
+-	/*Requested outputs*/
+-	iomodel->FetchData(&requestedoutputs,&numoutputs,StressbalanceRequestedOutputsEnum);
+-	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
+-	if(numoutputs)parameters->AddObject(new StringArrayParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
+-	iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
+-
+-	/*Assign output pointer: */
+-	*pparameters = parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp	(revision 16539)
+@@ -1,449 +0,0 @@
+-/*
+- * CreateConstraintsStressbalance.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsStressbalance(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	int        i,j;
+-	int        count,finiteelement;
+-	IssmDouble g;
+-	IssmDouble rho_ice;
+-	IssmDouble FSreconditioning;
+-	bool       isSIA,isSSA,isL1L2,isHO,isFS,iscoupling;
+-	bool       spcpresent = false;
+-	int        Mx,Nx;
+-	int        My,Ny;
+-	int        Mz,Nz;
+-	IssmDouble *spcvx          = NULL;
+-	IssmDouble *spcvy          = NULL;
+-	IssmDouble *spcvz          = NULL;
+-	IssmDouble *nodeonSSA = NULL;
+-	IssmDouble *nodeonHO   = NULL;
+-	IssmDouble *nodeonFS   = NULL;
+-	IssmDouble *nodeonbed      = NULL;
+-	IssmDouble *groundedice_ls = NULL;
+-	IssmDouble *vertices_type  = NULL;
+-	IssmDouble *surface        = NULL;
+-	IssmDouble *z              = NULL;
+-	IssmDouble *timesx=NULL;
+-	IssmDouble *timesy=NULL;
+-	IssmDouble *timesz=NULL;
+-   IssmDouble* values=NULL;
+-
+-	/*Output*/
+-	Constraints *constraints      = NULL;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&g,ConstantsGEnum);
+-	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+-	iomodel->Constant(&FSreconditioning,StressbalanceFSreconditioningEnum);
+-	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+-	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA && !isHO && !isFS && !isL1L2){
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+-	/*Do we have coupling*/
+-	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
+-	if(!iscoupling){
+-
+-		/*Get finite element type*/
+-		if(isSSA)       iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
+-		else if(isL1L2) finiteelement = P1Enum;
+-		else if(isHO)   iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
+-		else if(isFS){  iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+-			/*Deduce velocity interpolation from finite element*/
+-			switch(finiteelement){
+-				case P1P1Enum          : finiteelement = P1Enum;       break;
+-				case P1P1GLSEnum       : finiteelement = P1Enum;       break;
+-				case MINIcondensedEnum : finiteelement = P1bubbleEnum; break;
+-				case MINIEnum          : finiteelement = P1bubbleEnum; break;
+-				case TaylorHoodEnum    : finiteelement = P2Enum;       break;
+-				default: _error_("finite element "<<finiteelement<<" not supported");
+-			}
+-		}
+-		else{
+-			_error_("model not supported yet");
+-		}
+-
+-		if(isFS){
+-
+-			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+-			iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+-			if(iomodel->meshtype==Mesh3DEnum){
+-				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+-			}
+-			else if (iomodel->meshtype==Mesh2DverticalEnum){
+-				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvyEnum);
+-			}
+-			else{
+-				_error_("not supported yet");
+-			}
+-			for(i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					if(nodeonbed[i]>0. && groundedice_ls[i]>0. && nodeonFS[i]>0.){
+-						if(vertices_type[i] == FSApproximationEnum){
+-							for(j=0;j<Nz;j++) spcvz[i*Nz+j] = 0.;
+-						}
+-						else{
+-							_error_("not supported");
+-						}
+-					}
+-				}
+-			}
+-			if(iomodel->meshtype==Mesh3DEnum){
+-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+-				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,3);
+-				iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
+-			}
+-			else if (iomodel->meshtype==Mesh2DverticalEnum){
+-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+-				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
+-				iomodel->DeleteData(spcvz,StressbalanceSpcvyEnum);
+-			}
+-			else{
+-				_error_("not supported yet");
+-			}
+-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+-			iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-			iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+-
+-			/*Pressure spc*/
+-			count = constraints->Size();
+-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+-			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+-			switch(finiteelement){
+-				case P1bubbleEnum:
+-					for(i=0;i<iomodel->numberofvertices;i++){
+-						if(iomodel->my_vertices[i]){
+-							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+-								count++;
+-							}
+-						}
+-					}
+-					break;
+-				case P2Enum:
+-					for(i=0;i<iomodel->numberofvertices;i++){
+-						if(iomodel->my_vertices[i]){
+-							if(reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-								constraints->AddObject(new SpcStatic(count+1,iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum));
+-								count++;
+-							}
+-						}
+-					}
+-					break;
+-				default:
+-					_error_("not implemented yet");
+-			}
+-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-			iomodel->DeleteData(surface,SurfaceEnum);
+-			iomodel->DeleteData(z,MeshZEnum);
+-		}
+-		else{
+-			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,1);
+-			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+-		}
+-
+-		*pconstraints=constraints;
+-		return;
+-	}
+-
+-	/*Constraints: fetch data: */
+-	iomodel->FetchData(&spcvx,&Mx,&Nx,StressbalanceSpcvxEnum);
+-	iomodel->FetchData(&spcvy,&My,&Ny,StressbalanceSpcvyEnum);
+-	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+-	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
+-	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
+-	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+-
+-	/*Initialize counter: */
+-	count=0;
+-
+-	/*figure out times: */
+-	timesx=xNew<IssmDouble>(Nx);
+-	for(j=0;j<Nx;j++){
+-		timesx[j]=spcvx[(Mx-1)*Nx+j];
+-	}
+-	/*figure out times: */
+-	timesy=xNew<IssmDouble>(Ny);
+-	for(j=0;j<Ny;j++){
+-		timesy[j]=spcvy[(My-1)*Ny+j];
+-	}
+-	/*figure out times: */
+-	timesz=xNew<IssmDouble>(Nz);
+-	for(j=0;j<Nz;j++){
+-		timesz[j]=spcvz[(Mz-1)*Nz+j];
+-	}
+-
+-	/*Create spcs from x,y,z, as well as the spc values on those spcs: */
+-	for(i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-
+-			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
+-			if(reCast<int,IssmDouble>(vertices_type[i]==SSAHOApproximationEnum)){
+-				/*If grionSSA, spc HO dofs: 3 & 4*/
+-					if (reCast<int,IssmDouble>(nodeonHO[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else _error_("if vertices_type is SSAHO, you shoud have nodeonHO or nodeonSSA");
+-			}
+-			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
+-				/*If grion,HO spc FS dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonHO[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-					}
+-					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
+-			}
+-			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+-			else if (reCast<int,IssmDouble>(vertices_type[i])==SSAFSApproximationEnum){
+-				/*If grion,HO spc FS dofs: 3 4 & 5*/
+-					if (reCast<int,IssmDouble>(nodeonSSA[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-
+-					}
+-					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-						count++;
+-						if (!xIsNan<IssmDouble>(spcvx[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvy[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-						if (!xIsNan<IssmDouble>(spcvz[i])){
+-							constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-							count++;
+-						}
+-					}
+-					else _error_("if vertices_type is SSAFS, you shoud have nodeonSSA or nodeonFS");
+-			}
+-			/*Now add the regular spcs*/
+-			else{
+-				if (Mx==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvx[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,spcvx[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+-					count++;
+-
+-				}
+-				else if (Mx==iomodel->numberofvertices+1) {
+-					/*figure out times and values: */
+-					values=xNew<IssmDouble>(Nx);
+-					spcpresent=false;
+-					for(j=0;j<Nx;j++){
+-						values[j]=spcvx[i*Nx+j];
+-						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-					}
+-
+-					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,Nx,timesx,values,StressbalanceAnalysisEnum));
+-						count++;
+-					}
+-					xDelete<IssmDouble>(values);
+-				}
+-				else if (vertices_type[i]==SIAApproximationEnum){
+-					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,StressbalanceAnalysisEnum));
+-					count++;
+-				}
+-
+-				if (My==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvy[i])){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,spcvy[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vy.
+-					count++;
+-				}
+-				else if (My==iomodel->numberofvertices+1){
+-					/*figure out times and values: */
+-					values=xNew<IssmDouble>(Ny);
+-					spcpresent=false;
+-					for(j=0;j<Ny;j++){
+-						values[j]=spcvy[i*Ny+j];
+-						if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-					}
+-					if(spcpresent){
+-						constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,Ny,timesy,values,StressbalanceAnalysisEnum));
+-						count++;
+-					}
+-					xDelete<IssmDouble>(values);
+-				}
+-				else if (vertices_type[i]==SIAApproximationEnum){
+-					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,StressbalanceAnalysisEnum));
+-					count++;
+-				}
+-
+-				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+-					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i],StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-						count++;
+-					}
+-					else if (Mz==iomodel->numberofvertices+1){
+-						/*figure out times and values: */
+-						values=xNew<IssmDouble>(Nz);
+-						spcpresent=false;
+-						for(j=0;j<Nz;j++){
+-							values[j]=spcvz[i*Nz+j];
+-							if(!xIsNan<IssmDouble>(values[j]))spcpresent=true; //NaN means no spc by default
+-						}
+-						if(spcpresent){
+-							constraints->AddObject(new SpcTransient(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,Nz,timesz,values,StressbalanceAnalysisEnum));
+-							count++;
+-						}
+-						xDelete<IssmDouble>(values);
+-					}
+-
+-				}
+-				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
+-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,1,g*rho_ice*(surface[i]-z[i])/FSreconditioning,StressbalanceAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+-					count++;
+-				}
+-			}
+-
+-			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
+-			if (iomodel->meshtype==Mesh3DEnum) if(nodeonbed[i]>0. && groundedice_ls[i]>=0. && nodeonFS[i]>0.){
+-				 switch(reCast<int,IssmDouble>(vertices_type[i])){
+-					case SSAFSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
+-						count++;
+-						break;
+-					case HOFSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,StressbalanceAnalysisEnum));
+-						count++;
+-						break;
+-					case FSApproximationEnum:
+-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,StressbalanceAnalysisEnum));
+-						count++;
+-						break;
+-					default: _error_("Vertex approximation " << EnumToStringx(reCast<int,IssmDouble>(vertices_type[i])) << " not supported");
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Free data: */
+-	iomodel->DeleteData(spcvx,StressbalanceSpcvxEnum);
+-	iomodel->DeleteData(spcvy,StressbalanceSpcvyEnum);
+-	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
+-	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-	if(iomodel->meshtype==Mesh3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+-	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
+-	iomodel->DeleteData(surface,SurfaceEnum);
+-	iomodel->DeleteData(z,MeshZEnum);
+-
+-	/*Free resources:*/
+-	xDelete<IssmDouble>(timesx);
+-	xDelete<IssmDouble>(timesy);
+-	xDelete<IssmDouble>(timesz);
+-	xDelete<IssmDouble>(values);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp	(revision 16539)
+@@ -1,110 +0,0 @@
+-/*
+- * CreateNodesStressbalance.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesStressbalance(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Intermediary*/
+-	bool isSSA,isL1L2,isHO,isFS,iscoupling;
+-	int  finiteelement=-1,approximation=-1;
+-
+-	/*Fetch parameters: */
+-	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+-	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+-	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+-	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+-
+-	/*Now, check that we have non SIA elements */
+-	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
+-
+-	/*Do we have coupling*/
+-	if( (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+-	 iscoupling = true;
+-	else
+-	 iscoupling = false;
+-
+-	/*If no coupling, call Regular CreateNodes, else, use P1 elements only*/
+-	if(!iscoupling){
+-
+-		/*Get finite element type*/
+-		if(isSSA){
+-			approximation=SSAApproximationEnum;
+-			iomodel->Constant(&finiteelement,FlowequationFeSSAEnum);
+-		}
+-		else if(isL1L2){
+-			approximation = L1L2ApproximationEnum;
+-			finiteelement = P1Enum;
+-		}
+-		else if(isHO){
+-			approximation = HOApproximationEnum;
+-			iomodel->Constant(&finiteelement,FlowequationFeHOEnum);
+-		}
+-		else if(isFS){
+-			approximation = FSApproximationEnum;
+-			iomodel->Constant(&finiteelement,FlowequationFeFSEnum);
+-		}
+-		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-		if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
+-		CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
+-		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-	}
+-	else{
+-		/*Coupling: we are going to create P1 Elements only*/
+-
+-		/*Recover nodes*/
+-		Nodes* nodes = *pnodes;
+-		Node*  node  = NULL;
+-		int    lid=0;
+-		if(!nodes) nodes = new Nodes();
+-
+-		iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-		if(isFS){
+-			/*P1+ velocity*/
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+-					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
+-				}
+-			}
+-			for(int i=0;i<iomodel->numberofelements;i++){
+-				if(iomodel->my_elements[i]){
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,StressbalanceAnalysisEnum,FSvelocityEnum);
+-					node->Deactivate();
+-					nodes->AddObject(node);
+-				}
+-			}
+-			/*P1 pressure*/
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+-					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
+-					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
+-						node->Deactivate();
+-					}
+-					nodes->AddObject(node);
+-				}
+-			}
+-		}
+-		else{
+-			for(int i=0;i<iomodel->numberofvertices;i++){
+-				if(iomodel->my_vertices[i]){
+-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
+-				}
+-			}
+-		}
+-		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-
+-		/*Assign output pointer: */
+-		*pnodes=nodes;
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp	(revision 16539)
+@@ -1,39 +0,0 @@
+-/*! \file CreateLoadsHydrologyDCInefficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*Fetch parameters: */
+-	int hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	iomodel->FetchData(1,MeshVertexonbedEnum);
+-
+-	//create penalties for nodes: no node can have a temperature over the melting point
+-	CreateSingleNodeToElementConnectivity(iomodel);
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if (iomodel->meshtype==Mesh3DEnum){
+-			/*keep only this partition's nodes:*/
+-			if(iomodel->my_vertices[i]){
+-				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+-			}
+-		}
+-		else if(reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+-			if(iomodel->my_vertices[i]){
+-				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
+-			}	
+-		}
+-	}
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-	iomodel->DeleteData(1,MeshVertexonbedEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp	(revision 16539)
+@@ -1,59 +0,0 @@
+-/*!\file: CreateParametersHydrologyDCInefficient.cpp
+- * \brief driver for creating parameters dataset, for control analysis.
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	Parameters *parameters = NULL;
+-	int         hydrology_model;
+-	int         sedimentlimit_flag;
+-	int         transfer_flag;
+-	bool        isefficientlayer;
+-	IssmDouble  sedimentlimit;
+-	IssmDouble  penalty_factor;
+-	IssmDouble  leakagefactor;
+-	IssmDouble  rel_tol;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+-	/*retrieve some parameters: */
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
+-
+-	iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	iomodel->FetchData(&sedimentlimit_flag,HydrologydcSedimentlimitFlagEnum);
+-	iomodel->FetchData(&transfer_flag,HydrologydcTransferFlagEnum);
+-	iomodel->FetchData(&penalty_factor,HydrologydcPenaltyFactorEnum);
+-	iomodel->FetchData(&rel_tol,HydrologydcRelTolEnum);
+-
+-	if(sedimentlimit_flag==1){
+-		iomodel->FetchData(&sedimentlimit,HydrologydcSedimentlimitEnum);
+-		parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit));
+-	}
+-
+-	if(transfer_flag==1){
+-		iomodel->FetchData(&leakagefactor,HydrologydcLeakageFactorEnum);
+-		parameters->AddObject(new DoubleParam(HydrologydcLeakageFactorEnum,leakagefactor));
+-	}
+-
+-	parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor));
+-	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+-	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
+-	parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag));
+-	parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
+-	parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol));
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp	(revision 16539)
+@@ -1,25 +0,0 @@
+-/*
+- * CreateConstraintsHydrologyDCInefficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*retrieve some parameters: */
+-	int hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp	(revision 16539)
+@@ -1,23 +0,0 @@
+-/*
+- * CreateNodesHydrologyDCInefficient.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesHydrologyDCInefficient(Nodes** pnodes, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int  hydrology_model;
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp	(revision 16539)
+@@ -1,44 +0,0 @@
+-/*
+- * UpdateElementsHydrologyDCInefficient:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsHydrologyDCInefficient(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	bool   isefficientlayer;
+-	int    hydrology_model;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+-
+-	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum) return;
+-
+-	/*Fetch data needed: */
+-	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
+-	if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 16539)
+@@ -1,59 +0,0 @@
+-/*
+- * UpdateElementsThermal:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsThermal(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	bool dakota_analysis;
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+-	iomodel->FetchDataToInput(elements,FrictionPEnum);
+-	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,PressureEnum);
+-	iomodel->FetchDataToInput(elements,TemperatureEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,VzEnum);
+-	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
+-	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
+-	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
+-	if(dakota_analysis){
+-		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+-		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVxMeshEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVyMeshEnum);
+-		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 16539)
+@@ -1,33 +0,0 @@
+-/*! \file CreateLoadsThermal.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsThermal(Loads** ploads, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+-
+-	/*create penalties for nodes: no node can have a temperature over the melting point*/
+-	iomodel->FetchData(1,ThermalSpctemperatureEnum);
+-	CreateSingleNodeToElementConnectivity(iomodel);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		/*keep only this partition's nodes:*/
+-		if(iomodel->my_vertices[i]){
+-			if (xIsNan<IssmDouble>(iomodel->Data(ThermalSpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
+-				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
+-			}
+-		}
+-	}
+-	iomodel->DeleteData(1,ThermalSpctemperatureEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 16539)
+@@ -1,23 +0,0 @@
+-/*
+- * CreateConstraintsThermal.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	/*Only 3d mesh supported*/
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 16539)
+@@ -1,16 +0,0 @@
+-/*
+- * CreateNodesThermal.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*
+- * CreateConstraintsL2ProjectionTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsL2ProjectionTop(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp	(revision 16539)
+@@ -1,21 +0,0 @@
+-/*
+- * CreateNodesL2ProjectionTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesL2ProjectionTop(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	}
+-	else if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchData(1,MeshVertexonbedEnum);
+-	}
+-	CreateNodes(pnodes,iomodel,L2ProjectionTopAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp	(revision 16539)
+@@ -1,30 +0,0 @@
+-/*
+- * UpdateElementsL2ProjectionTop:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsL2ProjectionTop(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	if(iomodel->meshtype==Mesh3DEnum){
+-		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsL2ProjectionTop.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsL2ProjectionTop(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsExtrudeFromBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsExtrudeFromBase(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp	(revision 16539)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsExtrudeFromBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsExtrudeFromBase(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*These are automated*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp	(revision 16539)
+@@ -1,15 +0,0 @@
+-/*
+- * CreateNodesExtrudeFromBase.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesExtrudeFromBase(Nodes** pnodes, IoModel* iomodel){
+-
+-	CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp	(revision 16539)
+@@ -1,26 +0,0 @@
+-/*
+- * UpdateElementsExtrudeFromBase:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsExtrudeFromBase(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	if(iomodel->meshtype==Mesh2DverticalEnum){
+-		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 16539)
+@@ -1,32 +0,0 @@
+-/*! \file CreateLoadsMelting.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
+-
+-	/*if 2d: Error*/
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	//create penalties for nodes: no node can have a temperature over the melting point
+-	iomodel->FetchData(1,MeshVertexonbedEnum);
+-	CreateSingleNodeToElementConnectivity(iomodel);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-		if(iomodel->my_vertices[i]){
+-			if (reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+-				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
+-			}
+-		}
+-	}
+-	iomodel->DeleteData(1,MeshVertexonbedEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 16539)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsMelting.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 16539)
+@@ -1,16 +0,0 @@
+-/*
+- * CreateNodesMelting.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesMelting(Nodes** pnodes, IoModel* iomodel){
+-
+-	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 16539)
+@@ -1,41 +0,0 @@
+-/*
+- * UpdateElementsMelting:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsMelting(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Now, is the model 3d? otherwise, do nothing: */
+-	if(iomodel->meshtype==Mesh2DhorizontalEnum)return;
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	/*Create inputs: */
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,SurfaceEnum);
+-	iomodel->FetchDataToInput(elements,BedEnum);
+-	iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+-	iomodel->FetchDataToInput(elements,FrictionPEnum);
+-	iomodel->FetchDataToInput(elements,FrictionQEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+-	iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+-	iomodel->FetchDataToInput(elements,FlowequationElementEquationEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
+-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+-	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+-	iomodel->FetchDataToInput(elements,PressureEnum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/UpdateElementsGia.cpp	(revision 16539)
+@@ -1,27 +0,0 @@
+-/*
+- * UpdateElementsGia:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsGia(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	iomodel->FetchDataToInput(elements,ThicknessEnum);
+-	iomodel->FetchDataToInput(elements,GiaMantleViscosityEnum);
+-	iomodel->FetchDataToInput(elements,GiaLithosphereThicknessEnum);
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateLoadsGia.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*! \file CreateLoadsGia.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsGia(Loads** ploads, IoModel* iomodel){
+-
+-	/*No loads*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp	(revision 16539)
+@@ -1,14 +0,0 @@
+-/*
+- * CreateConstraintsGia.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateConstraintsGia(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*No constraints*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Gia/CreateNodesGia.cpp	(revision 16539)
+@@ -1,13 +0,0 @@
+-/*
+- * CreateNodesGia.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesGia(Nodes** pnodes, IoModel* iomodel){
+-	CreateNodes(pnodes,iomodel,GiaAnalysisEnum,P1Enum);
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp	(revision 16539)
+@@ -1,32 +0,0 @@
+-/*! \file CreateLoadsDamage.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateLoadsDamage(Loads** ploads, IoModel* iomodel){
+-
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+-	/*create penalties for nodes: no node can have a damage > 1*/
+-	iomodel->FetchData(1,DamageSpcdamageEnum);
+-	CreateSingleNodeToElementConnectivity(iomodel);
+-
+-	for(int i=0;i<iomodel->numberofvertices;i++){
+-
+-		/*keep only this partition's nodes:*/
+-		if(iomodel->my_vertices[i]){
+-			if (xIsNan<IssmDouble>(iomodel->Data(DamageSpcdamageEnum)[i])){ //No penalty applied on spc nodes!
+-				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,DamageEvolutionAnalysisEnum));
+-			}
+-		}
+-	}
+-	iomodel->DeleteData(1,DamageSpcdamageEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+-	
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp	(revision 16539)
+@@ -1,42 +0,0 @@
+-/*!\file: CreateParametersDamage.cpp
+- * \brief driver for creating parameters dataset, for damage evolution analysis.
+- */ 
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-
+-void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-
+-	Parameters *parameters = NULL;
+-	char*       law        = NULL;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+-	/*retrieve some parameters: */
+-	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
+-		
+-	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyFactorEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum));
+-	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
+-
+-	/*Retrieve law dependent parameters: */
+-	iomodel->Constant(&law,DamageLawEnum);
+-	if (strcmp(law,"pralong")==0){
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageC3Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageC4Enum));
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum));
+-	}
+-	
+-	/*Assign output pointer: */
+-	xDelete<char>(law);
+-	*pparameters=parameters;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp	(revision 16539)
+@@ -1,20 +0,0 @@
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../ModelProcessorx.h"
+-#include "../../IoModelToConstraintsx/IoModelToConstraintsx.h"
+-
+-void	CreateConstraintsDamage(Constraints** pconstraints, IoModel* iomodel){
+-
+-	/*Fetch parameters: */
+-	int stabilization;
+-	iomodel->Constant(&stabilization,DamageStabilizationEnum);
+-
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+-	IoModelToConstraintsx(constraints,iomodel,DamageSpcdamageEnum,DamageEvolutionAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp	(revision 16539)
+@@ -1,17 +0,0 @@
+-/*
+- * CreateNodesDamage.c:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	CreateNodesDamage(Nodes** pnodes, IoModel* iomodel){
+-
+-	iomodel->FetchData(1,MeshVertexonbedEnum);
+-	CreateNodes(pnodes,iomodel,DamageEvolutionAnalysisEnum,P1Enum);
+-	iomodel->DeleteData(1,MeshVertexonbedEnum);
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp	(revision 16539)
+@@ -1,36 +0,0 @@
+-/*
+- * UpdateElementsDamage:
+- */
+-
+-#include "../../../toolkits/toolkits.h"
+-#include "../../../classes/classes.h"
+-#include "../../../shared/shared.h"
+-#include "../../MeshPartitionx/MeshPartitionx.h"
+-#include "../ModelProcessorx.h"
+-
+-void	UpdateElementsDamage(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+-
+-	/*Update elements: */
+-	int counter=0;
+-	for(int i=0;i<iomodel->numberofelements;i++){
+-		if(iomodel->my_elements[i]){
+-			Element* element=(Element*)elements->GetObjectByOffset(counter);
+-			element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
+-			counter++;
+-		}
+-	}
+-
+-	/*What input do I need to run my damage evolution model?*/
+-	iomodel->FetchDataToInput(elements,VxEnum);
+-	iomodel->FetchDataToInput(elements,VyEnum);
+-	iomodel->FetchDataToInput(elements,VzEnum);
+-	iomodel->FetchDataToInput(elements,DamageDEnum);
+-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+-	iomodel->FetchDataToInput(elements,PressureEnum);
+-
+-	bool dakota_analysis;
+-	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+-	if(dakota_analysis){
+-		elements->InputDuplicate(DamageDEnum, QmuDamageDEnum);
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16539)
+@@ -24,7 +24,7 @@
+ 	IssmDouble  time;
+ 	bool        ispdd,isdelta18o;
+ 
+-	/*parameters for mass flux: {{{*/
++	/*parameters for mass flux:*/
+ 	int          mass_flux_num_profiles     = 0;
+ 	bool         qmu_mass_flux_present      = false;
+ 	bool         autodiff_mass_flux_present = false;
+@@ -36,7 +36,6 @@
+ 	int          temp_m,temp_n;
+ 	IssmDouble  *matrix                     = NULL;
+ 	int          count;
+-	/*}}}*/
+ 
+ 	if(*pparameters)return; //do not create parameters twice!
+ 
+@@ -93,6 +92,12 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
+ 
+ 	/*For stress balance only*/
++	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
+ 	if(iomodel->meshtype==Mesh3DEnum)
+ 	 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
+ 
+@@ -220,17 +225,6 @@
+ 	/*Output definitions dataset: */
+ 	CreateOutputDefinitions(&parameters,iomodel);
+ 
+-	/*Solution specific parameters*/
+-	#ifdef _HAVE_HYDROLOGY_
+-	CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
+-	CreateParametersHydrologyDCInefficient(&parameters,iomodel,solution_type,analysis_type);
+-	CreateParametersHydrologyDCEfficient(&parameters,iomodel,solution_type,analysis_type);
+-	#endif
+-	
+-	#ifdef _HAVE_DAMAGE_
+-	CreateParametersDamage(&parameters,iomodel,solution_type,analysis_type);
+-	#endif
+-
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+ 	CreateParametersControl(&parameters,iomodel,solution_type,analysis_type);
+@@ -240,11 +234,6 @@
+ 	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
+ 	#endif
+ 
+-	#ifdef _HAVE_STRESSBALANCE_
+-	CreateParametersStressbalance(&parameters,iomodel,solution_type,analysis_type);
+-	#endif
+-
+-
+ 	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 16539)
+@@ -18,8 +18,7 @@
+ 
+ 	int i;
+ 
+-	int my_rank;
+-	int num_procs;
++	const int RIFTINFOSIZE = 12;
+ 	int numberofelements2d;
+ 	int numberofvertices2d;
+ 	int numlayers;
+@@ -40,15 +39,14 @@
+ 	IssmDouble *riftinfo       = NULL;
+ 
+ 	/*Get my_rank:*/
+-	my_rank   = IssmComm::GetRank();
+-	num_procs = IssmComm::GetSize();
++	int my_rank   = IssmComm::GetRank();
++	int num_procs = IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+-
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+ 	/*First, check that partitioning has not yet been carryed out. Just check whether my_elements pointers is not already assigned a value: */
+-	if (*pmy_elements)return;
++	if(*pmy_elements)return;
+ 
+ 	/*Number of vertices per elements, needed to correctly retrieve data: */
+ 	/*Determine parallel partitioning of elements: we use Metis for now. First load the data, then partition*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16539)
+@@ -13,7 +13,7 @@
+ #include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
++void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_enum,const int analysis_enum,const int nummodels,int analysis_counter){
+ 
+ 	Elements   *elements   = NULL;
+ 	Materials  *materials  = NULL;
+@@ -24,9 +24,12 @@
+ 	/*Partition Elements and Nodes*/
+ 	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+ 
+-	/*Create elements, vertices and materials, independent of analysis_type: */
++	/*Create elements, vertices and materials, independent of analysis_enum: */
+ 	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
+ 
++	/*Create Parameters*/
++	CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_enum,analysis_enum,analysis_counter);
++
+ 	/*Recover elements and materials, for future update: */
+ 	elements  = *pelements;
+ 	materials = *pmaterials;
+@@ -37,174 +40,14 @@
+ 	if(!*ploads)       *ploads       = new Loads();
+ 
+ 	/*Now, branch onto analysis dependent model generation: */
+-	switch(analysis_type){
++	Analysis* analysis = EnumToAnalysis(analysis_enum);
++	analysis->UpdateParameters(pparameters,iomodel,solution_enum,analysis_enum);
++	analysis->CreateNodes(pnodes,iomodel);
++	analysis->CreateConstraints(pconstraints,iomodel);
++	analysis->CreateLoads(ploads,iomodel);
++	analysis->UpdateElements(elements,iomodel,analysis_counter,analysis_enum);
++	delete analysis;
+ 
+-		#ifdef _HAVE_STRESSBALANCE_
+-		case StressbalanceAnalysisEnum:
+-			CreateNodesStressbalance(pnodes,iomodel);
+-			CreateConstraintsStressbalance(pconstraints,iomodel);
+-			CreateLoadsStressbalance(ploads,iomodel);
+-			UpdateElementsStressbalance(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-
+-		case StressbalanceVerticalAnalysisEnum:
+-			CreateNodesStressbalanceVertical(pnodes, iomodel);
+-			CreateConstraintsStressbalanceVertical(pconstraints,iomodel);
+-			CreateLoadsStressbalanceVertical(ploads,iomodel);
+-			UpdateElementsStressbalanceVertical(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-
+-		case StressbalanceSIAAnalysisEnum:
+-			CreateNodesStressbalanceSIA(pnodes, iomodel);
+-			CreateConstraintsStressbalanceSIA(pconstraints,iomodel);
+-			CreateLoadsStressbalanceSIA(ploads,iomodel);
+-			UpdateElementsStressbalanceSIA(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_HYDROLOGY_
+-		case HydrologyShreveAnalysisEnum:
+-			CreateNodesHydrologyShreve(pnodes, iomodel);
+-			CreateConstraintsHydrologyShreve(pconstraints,iomodel);
+-			CreateLoadsHydrologyShreve(ploads,iomodel);
+-			UpdateElementsHydrologyShreve(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case HydrologyDCInefficientAnalysisEnum:
+-			CreateNodesHydrologyDCInefficient(pnodes, iomodel);
+-			CreateConstraintsHydrologyDCInefficient(pconstraints,iomodel);
+-			CreateLoadsHydrologyDCInefficient(ploads,iomodel);
+-			UpdateElementsHydrologyDCInefficient(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case HydrologyDCEfficientAnalysisEnum:
+-			CreateNodesHydrologyDCEfficient(pnodes, iomodel);
+-			CreateConstraintsHydrologyDCEfficient(pconstraints,iomodel);
+-			CreateLoadsHydrologyDCEfficient(ploads,iomodel);
+-			UpdateElementsHydrologyDCEfficient(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_THERMAL_
+-		case ThermalAnalysisEnum:
+-			CreateNodesThermal(pnodes, iomodel);
+-			CreateConstraintsThermal(pconstraints,iomodel);
+-			CreateLoadsThermal(ploads,iomodel);
+-			UpdateElementsThermal(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-
+-		case EnthalpyAnalysisEnum:
+-			CreateNodesEnthalpy(pnodes, iomodel);
+-			CreateConstraintsEnthalpy(pconstraints,iomodel);
+-			CreateLoadsEnthalpy(ploads,iomodel);
+-			UpdateElementsEnthalpy(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-
+-		case MeltingAnalysisEnum:
+-			CreateNodesMelting(pnodes, iomodel);
+-			CreateConstraintsMelting(pconstraints,iomodel);
+-			CreateLoadsMelting(ploads,iomodel);
+-			UpdateElementsMelting(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_BALANCED_
+-		case BalancethicknessAnalysisEnum:
+-			CreateNodesBalancethickness(pnodes, iomodel);
+-			CreateConstraintsBalancethickness(pconstraints,iomodel);
+-			CreateLoadsBalancethickness(ploads,iomodel);
+-			UpdateElementsBalancethickness(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case BalancevelocityAnalysisEnum:
+-			CreateNodesBalancevelocity(pnodes, iomodel);
+-			CreateConstraintsBalancevelocity(pconstraints,iomodel);
+-			CreateLoadsBalancevelocity(ploads,iomodel);
+-			UpdateElementsBalancevelocity(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case SmoothedSurfaceSlopeXAnalysisEnum:
+-			iomodel->FetchData(1,MeshVertexonbedEnum);
+-			CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeXAnalysisEnum,P1Enum);
+-			iomodel->DeleteData(1,MeshVertexonbedEnum);
+-			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case SmoothedSurfaceSlopeYAnalysisEnum:
+-			iomodel->FetchData(1,MeshVertexonbedEnum);
+-			CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeYAnalysisEnum,P1Enum);
+-			iomodel->DeleteData(1,MeshVertexonbedEnum);
+-			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_GIA_
+-		case GiaAnalysisEnum:
+-			CreateNodesGia(pnodes, iomodel);
+-			CreateConstraintsGia(pconstraints,iomodel);
+-			CreateLoadsGia(ploads,iomodel);
+-			UpdateElementsGia(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_DAMAGE_
+-		case DamageEvolutionAnalysisEnum:
+-			CreateNodesDamage(pnodes, iomodel);
+-			CreateConstraintsDamage(pconstraints,iomodel);
+-			CreateLoadsDamage(ploads,iomodel);
+-			UpdateElementsDamage(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-
+-		#ifdef _HAVE_SLOPE_
+-		case L2ProjectionBaseAnalysisEnum:
+-			CreateNodesL2ProjectionBase(pnodes, iomodel);
+-			CreateConstraintsL2ProjectionBase(pconstraints,iomodel);
+-			CreateLoadsL2ProjectionBase(ploads,iomodel);
+-			UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-
+-		case L2ProjectionTopAnalysisEnum:
+-			CreateNodesL2ProjectionTop(pnodes, iomodel);
+-			CreateConstraintsL2ProjectionTop(pconstraints,iomodel);
+-			CreateLoadsL2ProjectionTop(ploads,iomodel);
+-			UpdateElementsL2ProjectionTop(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		#ifdef _HAVE_MASSTRANSPORT_
+-		case MasstransportAnalysisEnum:
+-			CreateNodesMasstransport(pnodes, iomodel);
+-			CreateConstraintsMasstransport(pconstraints,iomodel);
+-			CreateLoadsMasstransport(ploads,iomodel);
+-			UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case FreeSurfaceTopAnalysisEnum:
+-			CreateNodesFreeSurfaceTop(pnodes, iomodel);
+-			CreateConstraintsFreeSurfaceTop(pconstraints,iomodel);
+-			CreateLoadsFreeSurfaceTop(ploads,iomodel);
+-			UpdateElementsFreeSurfaceTop(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case FreeSurfaceBaseAnalysisEnum:
+-			CreateNodesFreeSurfaceBase(pnodes, iomodel);
+-			CreateConstraintsFreeSurfaceBase(pconstraints,iomodel);
+-			CreateLoadsFreeSurfaceBase(ploads,iomodel);
+-			UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case ExtrudeFromBaseAnalysisEnum:
+-			CreateNodesExtrudeFromBase(pnodes, iomodel);
+-			CreateConstraintsExtrudeFromBase(pconstraints,iomodel);
+-			CreateLoadsExtrudeFromBase(ploads,iomodel);
+-			UpdateElementsExtrudeFromBase(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		case ExtrudeFromTopAnalysisEnum:
+-			CreateNodesExtrudeFromTop(pnodes, iomodel);
+-			CreateConstraintsExtrudeFromTop(pconstraints,iomodel);
+-			CreateLoadsExtrudeFromTop(ploads,iomodel);
+-			UpdateElementsExtrudeFromTop(elements,iomodel,analysis_counter,analysis_type);
+-			break;
+-		#endif
+-
+-		default:
+-			_error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
+-	}
+-
+ 	/*Update Elements and Materials For Inversions*/
+ 	#ifdef _HAVE_CONTROL_
+ 	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
+@@ -215,14 +58,12 @@
+ 	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
+ 	#endif
+ 
+-	/*Generate objects that are not dependent on any analysis_type: */
+-	CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter);
+ 
+ 	/*Update Elements in case we are running a transient solution: */
+ 	#ifdef _HAVE_TRANSIENT_
+ 	parameters=*pparameters;
+-	if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
+-		UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
++	if(analysis_counter==(nummodels-1)&& solution_enum==TransientSolutionEnum){
++		UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_enum);
+ 	}
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16538)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16539)
+@@ -5,9 +5,8 @@
+ #ifndef _MODEL_PROCESSORX_H_
+ #define _MODEL_PROCESSORX_H_
+ 
+-#define RIFTINFOSIZE 12
+-
+ #include "../../classes/classes.h"
++#include "../../analyses/analyses.h"
+ 
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+@@ -18,139 +17,12 @@
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
+-void CreateParametersStressbalance(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+ void CreateOutputDefinitions(Parameters** pparameters,IoModel* iomodel);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
++void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
+ void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+ 
+-/*Creation of fem datasets: specialised drivers: */
+-
+-/*stressbalance horizontal*/
+-void CreateNodesStressbalance(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsStressbalance(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsStressbalance(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsStressbalance(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*stressbalance vertical*/
+-void CreateNodesStressbalanceVertical(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsStressbalanceVertical(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsStressbalanceVertical(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsStressbalanceVertical(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*stressbalance SIA*/
+-void CreateNodesStressbalanceSIA(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsStressbalanceSIA(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsStressbalanceSIA(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsStressbalanceSIA(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-#ifdef _HAVE_GIA_
+-/*gia*/
+-void CreateNodesGia(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsGia(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-#endif
+-
+-#ifdef _HAVE_DAMAGE_
+-/*damage*/
+-void CreateNodesDamage(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsDamage(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsDamage(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsDamage(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void CreateParametersDamage(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-#endif
+-
+-/*Extrude from base*/
+-void CreateNodesExtrudeFromBase(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsExtrudeFromBase(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsExtrudeFromBase(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsExtrudeFromBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*Extrude from top*/
+-void CreateNodesExtrudeFromTop(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsExtrudeFromTop(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsExtrudeFromTop(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsExtrudeFromTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*L2 projection base*/
+-void CreateNodesL2ProjectionBase(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsL2ProjectionBase(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsL2ProjectionBase(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsL2ProjectionBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*L2 projection top*/
+-void CreateNodesL2ProjectionTop(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsL2ProjectionTop(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsL2ProjectionTop(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsL2ProjectionTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*thermal:*/
+-void CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsThermal(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*enthalpy:*/
+-void CreateNodesEnthalpy(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsEnthalpy(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*hydrology Shreve:*/
+-void CreateNodesHydrologyShreve(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsHydrologyShreve(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsHydrologyShreve(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*hydrology DC:*/
+-void CreateNodesHydrologyDCInefficient(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsHydrologyDCInefficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void CreateNodesHydrologyDCEfficient(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsHydrologyDCEfficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*melting:*/
+-void CreateNodesMelting(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsMelting(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsMelting(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsMelting(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*masstransport:*/
+-void CreateNodesMasstransport(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsMasstransport(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsMasstransport(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsMasstransport(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void CreateNodesFreeSurfaceTop(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsFreeSurfaceTop(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsFreeSurfaceTop(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsFreeSurfaceTop(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void CreateNodesFreeSurfaceBase(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsFreeSurfaceBase(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsFreeSurfaceBase(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsFreeSurfaceBase(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*balancedthickness:*/
+-void CreateNodesBalancethickness(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsBalancethickness(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsBalancethickness(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*balancedvelocity:*/
+-void CreateNodesBalancevelocity(Nodes** pnodes,IoModel* iomodel);
+-void CreateConstraintsBalancevelocity(Constraints** pconstraints,IoModel* iomodel);
+-void CreateLoadsBalancevelocity(Loads** ploads, IoModel* iomodel);
+-void UpdateElementsBalancevelocity(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+-/*transient: */
+-void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
+-
+ /*partitioning: */
+ void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+ void NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices,  IoModel* iomodel, bool continuous);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16538)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16539)
+@@ -375,27 +375,7 @@
+ steadystate_sources = ./cores/steadystate_core.cpp
+ #}}}
+ #Masstransport sources  {{{
+-masstransport_sources = ./modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp\
+-								./modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\
+-								./modules/ModelProcessorx/Masstransport/CreateConstraintsMasstransport.cpp\
+-								./modules/ModelProcessorx/Masstransport/CreateLoadsMasstransport.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceTop/CreateConstraintsFreeSurfaceTop.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceBase/CreateConstraintsFreeSurfaceBase.cpp\
+-								./modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp \
+-								./modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp \
+-								./modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp\
+-								./modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp\
+-								./analyses/ExtrudeFromBaseAnalysis.h\
++masstransport_sources = ./analyses/ExtrudeFromBaseAnalysis.h\
+ 								./analyses/ExtrudeFromBaseAnalysis.cpp\
+ 								./analyses/ExtrudeFromTopAnalysis.h\
+ 								./analyses/ExtrudeFromTopAnalysis.cpp\
+@@ -411,19 +391,7 @@
+ 
+ #}}}
+ #Thermal sources  {{{
+-thermal_sources = ./modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp\
+-					   ./modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\
+-					   ./modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp\
+-					   ./modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp\
+-					   ./modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp\
+-					   ./modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp\
+-					   ./modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp\
+-					   ./modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp\
+-					   ./modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp\
+-					   ./modules/ModelProcessorx/Melting/CreateNodesMelting.cpp\
+-					   ./modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp\
+-					   ./modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp\
+-					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
++thermal_sources = ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.h\
+ 					   ./modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\
+ 						./analyses/ThermalAnalysis.h\
+ 						./analyses/ThermalAnalysis.cpp\
+@@ -492,22 +460,7 @@
+ 
+ #}}}
+ #Hydrology sources  {{{
+-hydrology_sources  = ./modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp\
+-					      ./modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp\
+-					      ./modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp\
+-					      ./modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp \
+-							./modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp \
+-							./modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp \
+-							./modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp \
+-							./modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp\
+-							./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp \
+-							./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp \
+-							./analyses/HydrologyDCEfficientAnalysis.h\
++hydrology_sources  = ./analyses/HydrologyDCEfficientAnalysis.h\
+ 							./analyses/HydrologyDCEfficientAnalysis.cpp\
+ 							./analyses/HydrologyDCInefficientAnalysis.h\
+ 							./analyses/HydrologyDCInefficientAnalysis.cpp\
+@@ -517,20 +470,7 @@
+ 							./solutionsequences/solutionsequence_hydro_nonlinear.cpp
+ #}}}
+ #Stressbalance sources  {{{
+-stressbalance_sources = ./modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp\
+-					      ./modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp \
+-					      ./modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp \
+-					      ./modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp\
+-							./modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp\
+-					      ./modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp\
+-					      ./modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp \
+-					      ./modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp \
+-					      ./modules/ModelProcessorx/StressbalanceVertical/CreateLoadsStressbalanceVertical.cpp\
+-					      ./modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp\
+-					      ./modules/ModelProcessorx/StressbalanceSIA/CreateNodesStressbalanceSIA.cpp \
+-					      ./modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp \
+-							./modules/ModelProcessorx/StressbalanceSIA/CreateLoadsStressbalanceSIA.cpp \
+-							./analyses/StressbalanceAnalysis.h\
++stressbalance_sources = ./analyses/StressbalanceAnalysis.h\
+ 							./analyses/StressbalanceAnalysis.cpp\
+ 							./analyses/StressbalanceSIAAnalysis.h\
+ 							./analyses/StressbalanceSIAAnalysis.cpp\
+@@ -540,15 +480,7 @@
+ 							./solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
+ #}}}
+ #Balanced sources  {{{
+-balanced_sources = ./modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp\
+-					    ./modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp\
+-					    ./modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp\
+-						 ./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp\
+-						 ./modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp\
+-						 ./modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp\
+-						 ./modules/ModelProcessorx/Balancevelocity/CreateConstraintsBalancevelocity.cpp\
+-						 ./modules/ModelProcessorx/Balancevelocity/CreateLoadsBalancevelocity.cpp\
+-						 ./analyses/BalancevelocityAnalysis.h\
++balanced_sources = ./analyses/BalancevelocityAnalysis.h\
+ 						 ./analyses/BalancevelocityAnalysis.cpp\
+ 						 ./analyses/SmoothedSurfaceSlopeXAnalysis.h\
+ 						 ./analyses/SmoothedSurfaceSlopeXAnalysis.cpp\
+@@ -563,25 +495,13 @@
+ 						 ./cores/dummy_core.cpp
+ #}}}
+ #Slope sources  {{{
+-slope_sources =  ./modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp\
+-					  ./modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp \
+-					  ./modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp\
+-					  ./modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp\
+-					  ./modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp\
+-					  ./modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp \
+-					  ./modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp\
+-					  ./modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp\
+-					  ./analyses/L2ProjectionBaseAnalysis.h\
++slope_sources =  ./analyses/L2ProjectionBaseAnalysis.h\
+ 					  ./analyses/L2ProjectionBaseAnalysis.cpp\
+ 					  ./cores/surfaceslope_core.cpp\
+ 					  ./cores/bedslope_core.cpp
+ #}}}
+ #MeshDeformation sources  {{{
+-meshdeformation_sources =  ./modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp\
+-					  ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \
+-					  ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\
+-					  ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\
+-					  ./analyses/MeshdeformationAnalysis.h\
++meshdeformation_sources = ./analyses/MeshdeformationAnalysis.h\
+ 					  ./analyses/MeshdeformationAnalysis.cpp\
+ 					  ./cores/meshdeformation_core.cpp
+ #}}}
+@@ -589,10 +509,6 @@
+ gia_sources =  ./cores/gia_core.cpp\
+ 					./analyses/GiaAnalysis.h\
+ 					./analyses/GiaAnalysis.cpp\
+-					./modules/ModelProcessorx/Gia/UpdateElementsGia.cpp\
+-					./modules/ModelProcessorx/Gia/CreateNodesGia.cpp \
+-					./modules/ModelProcessorx/Gia/CreateConstraintsGia.cpp\
+-					./modules/ModelProcessorx/Gia/CreateLoadsGia.cpp\
+ 					./modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp\
+ 					./modules/GiaDeflectionCorex/GiaDeflectionCorex.h\
+ 					./modules/GiaDeflectionCorex/distme.f\
+@@ -609,11 +525,6 @@
+ damage_sources =  ./cores/damage_core.cpp\
+ 						./analyses/DamageEvolutionAnalysis.h\
+ 						./analyses/DamageEvolutionAnalysis.cpp\
+-						./modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp\
+-						./modules/ModelProcessorx/Damage/CreateNodesDamage.cpp \
+-						./modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp\
+-						./modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\
+-						./modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp\
+ 						./solutionsequences/solutionsequence_damage_nonlinear.cpp
+ 
+ #}}}
+Index: ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16538)
++++ ../trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 16539)
+@@ -35,6 +35,7 @@
+ Riftfront::Riftfront(int riftfront_id,int i, IoModel* iomodel,int riftfront_analysis_type){
+ 
+ 	/*data: */
++	const int RIFTINFOSIZE = 12;
+ 	int    riftfront_node_ids[2];
+ 	int    riftfront_elem_ids[2];
+ 	int    riftfront_matpar_id;
Index: issm/oecreview/Archive/16133-16554/ISSM-16539-16540.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16539-16540.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16539-16540.diff	(revision 16556)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/test/NightlyRun/test332.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test332.m	(revision 16539)
++++ ../trunk-jpl/test/NightlyRun/test332.m	(revision 16540)
+@@ -15,7 +15,6 @@
+ md.hydrology.sediment_transmitivity=3;
+ md.timestepping.time_step=0;
+ md.timestepping.final_time=1.0;
+-%md.verbose=verbose('1111111');
+ md=solve(md,HydrologySolutionEnum());
+ 
+ %Fields and tolerances to track changes
+@@ -24,4 +23,4 @@
+ %analitic=(md.mesh.y.^2-2*md.mesh.y*1.0e6)*(-2.0/(2*md.constants.yts*md.hydrology.sediment_transmitivity))
+ field_names     ={'SedimentWaterHead','SedimentHeadResidual'};
+ field_tolerances={1e-13, 2.5e-10};
+-field_values={md.results.HydrologySolution.SedimentHead,md.results.HydrologySolution.SedimentHeadResidual}
++field_values={md.results.HydrologySolution.SedimentHead,md.results.HydrologySolution.SedimentHeadResidual};
Index: issm/oecreview/Archive/16133-16554/ISSM-16540-16541.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16540-16541.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16540-16541.diff	(revision 16556)
@@ -0,0 +1,41 @@
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16540)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16541)
+@@ -9,6 +9,36 @@
+ 	return 1;
+ }/*}}}*/
+ void DamageEvolutionAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++	Parameters *parameters = NULL;
++	char*       law        = NULL;
++
++	/*Get parameters: */
++	parameters=*pparameters;
++
++	/*retrieve some parameters: */
++	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
++
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyThresholdEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyLockEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamagePenaltyFactorEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum));
++	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
++
++	/*Retrieve law dependent parameters: */
++	iomodel->Constant(&law,DamageLawEnum);
++	if (strcmp(law,"pralong")==0){
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC3Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageC4Enum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum));
++	}
++
++	/*Assign output pointer: */
++	xDelete<char>(law);
++	*pparameters=parameters;
+ }/*}}}*/
+ void DamageEvolutionAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
Index: issm/oecreview/Archive/16133-16554/ISSM-16541-16542.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16541-16542.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16541-16542.diff	(revision 16556)
@@ -0,0 +1,2427 @@
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 16542)
+@@ -8,28 +8,18 @@
+ int  HydrologyShreveAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void HydrologyShreveAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void HydrologyShreveAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+-	Parameters *parameters = NULL;
+-	int         hydrology_model;
+-
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
++	int  hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+ 	/*Now, do we really want Shreve?*/
+-	if(hydrology_model!=HydrologyshreveEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
++	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+ 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
+ 	parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
+ 
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }/*}}}*/
+ void HydrologyShreveAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -62,7 +52,7 @@
+ 
+ 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
+ }/*}}}*/
+-void HydrologyShreveAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void HydrologyShreveAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Fetch parameters: */
+ 	int  hydrology_model;
+@@ -72,14 +62,11 @@
+ 	if(hydrology_model!=HydrologyshreveEnum) return;
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void HydrologyShreveAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void HydrologyShreveAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*retrieve some parameters: */
+ 	int          hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+@@ -88,9 +75,7 @@
+ 
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum,P1Enum);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void HydrologyShreveAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void HydrologyShreveAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	/*No loads*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 16542)
+@@ -8,18 +8,18 @@
+ int  BalancethicknessSoftAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
+-void BalancethicknessSoftAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void BalancethicknessSoftAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+ void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void BalancethicknessSoftAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void BalancethicknessSoftAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void BalancethicknessSoftAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void BalancethicknessSoftAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void BalancethicknessSoftAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void BalancethicknessSoftAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  BalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void BalancethicknessAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void BalancethicknessAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void BalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -48,7 +48,7 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+ }/*}}}*/
+-void BalancethicknessAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void BalancethicknessAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	int  stabilization;
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+@@ -59,31 +59,26 @@
+ 	/*First fetch data: */
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+-		::CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
++		::CreateNodes(nodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+-		::CreateNodes(pnodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
++		::CreateNodes(nodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
+ 	}
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void BalancethicknessAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void BalancethicknessAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Fetch parameters: */
+ 	int    stabilization;	
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*Do not add constraints in DG*/
+ 	if(stabilization!=3){
+ 		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum,P1Enum);
+ 	}
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void BalancethicknessAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void BalancethicknessAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int element;
+@@ -92,9 +87,6 @@
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+@@ -118,7 +110,4 @@
+ 		/*Free data: */
+ 		iomodel->DeleteData(1,ThicknessEnum);
+ 	}
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16542)
+@@ -8,35 +8,22 @@
+ int  HydrologyDCEfficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void HydrologyDCEfficientAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void HydrologyDCEfficientAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+-	Parameters *parameters = NULL;
+ 	int         hydrology_model;
+ 	bool        isefficientlayer;
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+ 	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	/*Do we want an efficient layer*/
+ 	iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+-	if(!isefficientlayer){
+-		*pparameters=parameters;
+-		return;
+-	}
++	if(!isefficientlayer) return;
+ 
+ 	/*Nothing for now*/
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }/*}}}*/
+ void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -70,7 +57,7 @@
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,EplHeadEnum);
+ }/*}}}*/
+-void HydrologyDCEfficientAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void HydrologyDCEfficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Now, do we really want DC?*/
+ 	int  hydrology_model;
+@@ -83,14 +70,11 @@
+ 	if(!isefficientlayer) return;
+ 
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	::CreateNodes(pnodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }/*}}}*/
+-void HydrologyDCEfficientAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void HydrologyDCEfficientAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*Do we really want DC?*/
+ 	int  hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+@@ -103,14 +87,9 @@
+ 
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum,P1Enum);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void HydrologyDCEfficientAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void HydrologyDCEfficientAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Do we really want DC?*/
+ 	int  hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+@@ -122,7 +101,4 @@
+ 	if(!isefficientlayer) return;
+ 
+ 	/*Nothing for now*/
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 16542)
+@@ -8,18 +8,18 @@
+ int  AdjointHorizAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
+-void AdjointHorizAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void AdjointHorizAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+ void AdjointHorizAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void AdjointHorizAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void AdjointHorizAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void AdjointHorizAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void AdjointHorizAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void AdjointHorizAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void AdjointHorizAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  BalancevelocityAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void BalancevelocityAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void BalancevelocityAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void BalancevelocityAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -37,28 +37,22 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+ }/*}}}*/
+-void BalancevelocityAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void BalancevelocityAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Check in 3d*/
+ 	if(iomodel->meshtype==Mesh3DEnum) _error_("DG 3d not implemented yet");
+ 
+ 	/*First fetch data: */
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	::CreateNodes(pnodes,iomodel,BalancevelocityAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,BalancevelocityAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }/*}}}*/
+-void BalancevelocityAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void BalancevelocityAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*No constraints for now*/
+ 	//IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void BalancevelocityAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void BalancevelocityAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*No loads*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void L2ProjectionBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void L2ProjectionBaseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -33,7 +33,7 @@
+ 		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 	}
+ }/*}}}*/
+-void L2ProjectionBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void L2ProjectionBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum){
+ 		iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+@@ -41,14 +41,14 @@
+ 	else if(iomodel->meshtype==Mesh2DverticalEnum){
+ 		iomodel->FetchData(1,MeshVertexonbedEnum);
+ 	}
+-	::CreateNodes(pnodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void L2ProjectionBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void L2ProjectionBaseAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*No constraints*/
+ }/*}}}*/
+-void L2ProjectionBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void L2ProjectionBaseAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*No loads*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void FreeSurfaceTopAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void FreeSurfaceTopAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -38,24 +38,21 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+ }/*}}}*/
+-void FreeSurfaceTopAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void FreeSurfaceTopAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void FreeSurfaceTopAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void FreeSurfaceTopAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void FreeSurfaceTopAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void FreeSurfaceTopAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int penpair_ids[2];
+ 	int count=0;
+ 	int numvertex_pairing;
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Create Penpair for vertex_pairing: */
+ 	IssmDouble *vertex_pairing=NULL;
+ 	IssmDouble *nodeonsurface=NULL;
+@@ -87,7 +84,4 @@
+ 	/*free ressources: */
+ 	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+ 	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void StressbalanceVerticalAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void StressbalanceVerticalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+ 	/*No specific parameters*/
+ 
+@@ -38,16 +38,16 @@
+ 	iomodel->FetchDataToInput(elements,VxEnum,0.);
+ 	iomodel->FetchDataToInput(elements,VyEnum,0.);
+ }/*}}}*/
+-void StressbalanceVerticalAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void StressbalanceVerticalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*return if not 3d mesh*/
+ 	if(iomodel->meshtype!=Mesh3DEnum) return;
+ 
+ 	iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+-	::CreateNodes(pnodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+ }/*}}}*/
+-void StressbalanceVerticalAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void StressbalanceVerticalAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int count;
+@@ -56,9 +56,6 @@
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*return if not 3d mesh*/
+ 	if(iomodel->meshtype!=Mesh3DEnum) return;
+ 
+@@ -90,10 +87,8 @@
+ 	/*Free data: */
+ 	iomodel->DeleteData(2,StressbalanceSpcvzEnum,FlowequationBorderFSEnum);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void StressbalanceVerticalAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void StressbalanceVerticalAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*No loads*/
+ 
+Index: ../trunk-jpl/src/c/analyses/Analysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/Analysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/Analysis.h	(revision 16542)
+@@ -18,10 +18,10 @@
+ 
+ 		virtual      ~Analysis(){};
+ 		virtual int  DofsPerNode(int** doflist,int meshtype,int approximation)=0;
+-		virtual void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0;
++		virtual void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0;
+ 		virtual void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type)=0;
+-		virtual void CreateNodes(Nodes** pnodes,IoModel* iomodel)=0;
+-		virtual void CreateConstraints(Constraints** pconstraints,IoModel* iomodel)=0;
+-		virtual void CreateLoads(Loads** ploads, IoModel* iomodel)=0;
++		virtual void CreateNodes(Nodes* nodes,IoModel* iomodel)=0;
++		virtual void CreateConstraints(Constraints* constraints,IoModel* iomodel)=0;
++		virtual void CreateLoads(Loads* loads, IoModel* iomodel)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  StressbalanceSIAAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 2;
+ }/*}}}*/
+-void StressbalanceSIAAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void StressbalanceSIAAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+ 	/*No specific parameters*/
+ 
+@@ -39,7 +39,7 @@
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+ }/*}}}*/
+-void StressbalanceSIAAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void StressbalanceSIAAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	bool  isSIA;
+@@ -52,10 +52,7 @@
+ 	if(!isSIA) return;
+ 
+ 	/*First create nodes*/
+-	Nodes* nodes=*pnodes;
+ 	int    lid=0;
+-	if(!nodes) nodes = new Nodes();
+-
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 
+@@ -78,23 +75,14 @@
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+-
+ }/*}}}*/
+-void StressbalanceSIAAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void StressbalanceSIAAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int        count;
+ 	IssmDouble yts;
+ 	bool       isSIA;
+ 
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
+@@ -137,10 +125,8 @@
+ 	/*Free data: */
+ 	iomodel->DeleteData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void StressbalanceSIAAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void StressbalanceSIAAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*No loads*/
+ 
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 16542)
+@@ -65,15 +65,12 @@
+ 	*pdoftype = doftype;
+ 	return numdofs;
+ }/*}}}*/
+-void StressbalanceAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void StressbalanceAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int         numoutputs;
+ 	char**      requestedoutputs = NULL;
+ 
+-	/*Get parameters: */
+-	Parameters *parameters=*pparameters;
+-
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
+@@ -97,8 +94,6 @@
+ 	if(numoutputs)parameters->AddObject(new StringArrayParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
+ 
+-	/*Assign output pointer: */
+-	*pparameters = parameters;
+ }/*}}}*/
+ void StressbalanceAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -214,7 +209,7 @@
+ 	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+ 	xDelete<int>(finiteelement_list);
+ }/*}}}*/
+-void StressbalanceAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void StressbalanceAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	bool isSSA,isL1L2,isHO,isFS,iscoupling;
+@@ -257,15 +252,13 @@
+ 		}
+ 		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 		if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(3,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
+-		::CreateNodes(pnodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
++		::CreateNodes(nodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
+ 		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+ 	}
+ 	else{
+ 		/*Coupling: we are going to create P1 Elements only*/
+ 
+-		/*Recover nodes*/
+-		Nodes* nodes = *pnodes;
+ 		Node*  node  = NULL;
+ 		int    lid=0;
+ 		if(!nodes) nodes = new Nodes();
+@@ -309,12 +302,9 @@
+ 		}
+ 		iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
+ 					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+-
+-		/*Assign output pointer: */
+-		*pnodes=nodes;
+ 	}
+ }/*}}}*/
+-void StressbalanceAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void StressbalanceAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int        i,j;
+@@ -343,9 +333,6 @@
+ 	IssmDouble *timesz=NULL;
+    IssmDouble* values=NULL;
+ 
+-	/*Output*/
+-	Constraints *constraints      = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&g,ConstantsGEnum);
+ 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
+@@ -356,14 +343,8 @@
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+ 
+-	/*Recover pointer: */
+-	constraints=*pconstraints;
+-
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+-	if(!isSSA && !isHO && !isFS && !isL1L2){
+-		*pconstraints=constraints;
+-		return;
+-	}
++	if(!isSSA && !isHO && !isFS && !isL1L2) return;
+ 
+ 	/*Do we have coupling*/
+ 	if((isSIA?1.:0.) + (isSSA?1.:0.) + (isL1L2?1.:0.) + (isHO?1.:0.) + (isFS?1.:0.) >1.)
+@@ -478,7 +459,6 @@
+ 			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,2);
+ 		}
+ 
+-		*pconstraints=constraints;
+ 		return;
+ 	}
+ 
+@@ -750,10 +730,8 @@
+ 	xDelete<IssmDouble>(timesz);
+ 	xDelete<IssmDouble>(values);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void StressbalanceAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void StressbalanceAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	const int   RIFTINFOSIZE = 12;
+@@ -773,9 +751,6 @@
+ 	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+ 	if(!isSSA && !isHO && !isFS && !isL1L2) return;
+ 
+@@ -820,7 +795,4 @@
+ 		xDelete<IssmDouble>(riftinfo);
+ 	}
+ #endif
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 16542)
+@@ -8,9 +8,8 @@
+ int  HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void HydrologyDCInefficientAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void HydrologyDCInefficientAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+-	Parameters *parameters = NULL;
+ 	int         hydrology_model;
+ 	int         sedimentlimit_flag;
+ 	int         transfer_flag;
+@@ -20,17 +19,11 @@
+ 	IssmDouble  leakagefactor;
+ 	IssmDouble  rel_tol;
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 
+ 	/*Now, do we really want DC?*/
+-	if(hydrology_model!=HydrologydcEnum){
+-		*pparameters=parameters;
+-		return;
+-	}
++	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+ 	iomodel->FetchData(&sedimentlimit_flag,HydrologydcSedimentlimitFlagEnum);
+@@ -55,8 +48,6 @@
+ 	parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
+ 	parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol));
+ 
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }/*}}}*/
+ void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -92,7 +83,7 @@
+ 	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
+ 	if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum);
+ }/*}}}*/
+-void HydrologyDCInefficientAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void HydrologyDCInefficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Fetch parameters: */
+ 	int  hydrology_model;
+@@ -102,29 +93,20 @@
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void HydrologyDCInefficientAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void HydrologyDCInefficientAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*retrieve some parameters: */
+ 	int hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+ 	if(hydrology_model!=HydrologydcEnum) return;
+ 
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void HydrologyDCInefficientAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void HydrologyDCInefficientAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Fetch parameters: */
+ 	int hydrology_model;
+ 	iomodel->Constant(&hydrology_model,HydrologyModelEnum);
+@@ -147,7 +129,5 @@
+ 			}	
+ 		}
+ 	}
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ 	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  ThermalAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void ThermalAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void ThermalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void ThermalAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -58,30 +58,22 @@
+ 		elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum);
+ 	}
+ }/*}}}*/
+-void ThermalAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void ThermalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,ThermalAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void ThermalAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void ThermalAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*Only 3d mesh supported*/
+ 	if(iomodel->meshtype==Mesh3DEnum){
+ 		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,P1Enum);
+ 	}
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void ThermalAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void ThermalAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+ 
+ 	/*create penalties for nodes: no node can have a temperature over the melting point*/
+@@ -99,6 +91,4 @@
+ 	}
+ 	iomodel->DeleteData(1,ThermalSpctemperatureEnum);
+ 
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  ExtrudeFromBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void ExtrudeFromBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void ExtrudeFromBaseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -25,12 +25,12 @@
+ 		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 	}
+ }/*}}}*/
+-void ExtrudeFromBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void ExtrudeFromBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+-	::CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
+ 
+ }/*}}}*/
+-void ExtrudeFromBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void ExtrudeFromBaseAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void ExtrudeFromBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void ExtrudeFromBaseAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  MeltingAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void MeltingAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void MeltingAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void MeltingAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -41,23 +41,20 @@
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,PressureEnum);
+ }/*}}}*/
+-void MeltingAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void MeltingAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,MeltingAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,MeltingAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void MeltingAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void MeltingAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	/*No Constraints*/
+ }/*}}}*/
+-void MeltingAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void MeltingAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*if 2d: Error*/
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum) _error_("2d meshes not supported yet");
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	//create penalties for nodes: no node can have a temperature over the melting point
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+@@ -71,6 +68,4 @@
+ 	}
+ 	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ 
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  GiaAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void GiaAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void GiaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void GiaAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -26,12 +26,12 @@
+ 	iomodel->FetchDataToInput(elements,GiaMantleViscosityEnum);
+ 	iomodel->FetchDataToInput(elements,GiaLithosphereThicknessEnum);
+ }/*}}}*/
+-void GiaAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
+-	::CreateNodes(pnodes,iomodel,GiaAnalysisEnum,P1Enum);
++void GiaAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
++	::CreateNodes(nodes,iomodel,GiaAnalysisEnum,P1Enum);
+ }/*}}}*/
+-void GiaAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void GiaAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	/*No constraints*/
+ }/*}}}*/
+-void GiaAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void GiaAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	/*No loads*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 16542)
+@@ -8,18 +8,18 @@
+ int  AdjointBalancethicknessAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void AdjointBalancethicknessAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void AdjointBalancethicknessAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+ void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+-void AdjointBalancethicknessAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void AdjointBalancethicknessAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+-void AdjointBalancethicknessAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void AdjointBalancethicknessAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+-void AdjointBalancethicknessAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void AdjointBalancethicknessAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	_error_("not implemented yet");
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/EnumToAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 16542)
+@@ -7,8 +7,8 @@
+ 
+ #endif
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+Index: ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 16542)
+@@ -8,15 +8,10 @@
+ int  MasstransportAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void MasstransportAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void MasstransportAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+-	/*Get parameters: */
+-	Parameters *parameters=*pparameters;
+-
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
+ 
+-	/*Assign output pointer: */
+-	*pparameters = parameters;
+ }/*}}}*/
+ void MasstransportAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -100,7 +95,7 @@
+ 		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum,0.);
+ 	}
+ }/*}}}*/
+-void MasstransportAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void MasstransportAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Fetch parameters: */
+ 	int  stabilization;
+@@ -112,31 +107,25 @@
+ 	/*Create Nodes either DG or CG depending on stabilization*/
+ 	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ 	if(stabilization!=3){
+-		::CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1Enum);
++		::CreateNodes(nodes,iomodel,MasstransportAnalysisEnum,P1Enum);
+ 	}
+ 	else{
+-		::CreateNodes(pnodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
++		::CreateNodes(nodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
+ 	}
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void MasstransportAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void MasstransportAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Fetch parameters: */
+ 	int stabilization;
+ 	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*Do not add constraints in DG, they are weakly imposed*/
+ 	if(stabilization!=3){
+ 		IoModelToConstraintsx(constraints,iomodel,MasstransportSpcthicknessEnum,MasstransportAnalysisEnum,P1Enum);
+ 	}
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void MasstransportAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void MasstransportAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int element;
+@@ -148,9 +137,6 @@
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,MasstransportStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+@@ -208,6 +194,4 @@
+ 	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+ 	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+ 
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 16542)
+@@ -8,13 +8,8 @@
+ int  DamageEvolutionAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void DamageEvolutionAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+-	Parameters *parameters = NULL;
+-	char*       law        = NULL;
++void DamageEvolutionAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
+@@ -26,6 +21,7 @@
+ 	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
+ 
+ 	/*Retrieve law dependent parameters: */
++	char* law  = NULL;
+ 	iomodel->Constant(&law,DamageLawEnum);
+ 	if (strcmp(law,"pralong")==0){
+ 		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
+@@ -35,10 +31,8 @@
+ 		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
+ 		parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum));
+ 	}
++	xDelete<char>(law);
+ 
+-	/*Assign output pointer: */
+-	xDelete<char>(law);
+-	*pparameters=parameters;
+ }/*}}}*/
+ void DamageEvolutionAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -66,31 +60,22 @@
+ 		elements->InputDuplicate(DamageDEnum, QmuDamageDEnum);
+ 	}
+ }/*}}}*/
+-void DamageEvolutionAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void DamageEvolutionAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+-	::CreateNodes(pnodes,iomodel,DamageEvolutionAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,DamageEvolutionAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ }/*}}}*/
+-void DamageEvolutionAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void DamageEvolutionAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+-	/*Fetch parameters: */
+ 	int stabilization;
+ 	iomodel->Constant(&stabilization,DamageStabilizationEnum);
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	IoModelToConstraintsx(constraints,iomodel,DamageSpcdamageEnum,DamageEvolutionAnalysisEnum,P1Enum);
+ 
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void DamageEvolutionAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void DamageEvolutionAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*create penalties for nodes: no node can have a damage > 1*/
+ 	iomodel->FetchData(1,DamageSpcdamageEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+@@ -106,6 +91,4 @@
+ 	}
+ 	iomodel->DeleteData(1,DamageSpcdamageEnum);
+ 
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  EnthalpyAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void EnthalpyAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void EnthalpyAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void EnthalpyAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -74,13 +74,13 @@
+ 	/*Free data: */
+ 	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+ }/*}}}*/
+-void EnthalpyAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void EnthalpyAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void EnthalpyAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void EnthalpyAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediary*/
+ 	int        count;
+@@ -98,9 +98,6 @@
+ 	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
+ 	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+ 
+-	/*Recover pointer: */
+-	Constraints* constraints=*pconstraints;
+-
+ 	/*return if 2d mesh*/
+ 	if(iomodel->meshtype==Mesh2DhorizontalEnum) return;
+ 
+@@ -167,11 +164,8 @@
+ 	iomodel->DeleteData(spcvector,ThermalSpctemperatureEnum);
+ 	xDelete<IssmDouble>(times);
+ 	xDelete<IssmDouble>(values);
+-
+-	/*Assign output pointer: */
+-	*pconstraints=constraints;
+ }/*}}}*/
+-void EnthalpyAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void EnthalpyAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*No loads */
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp	(revision 16542)
+@@ -8,18 +8,18 @@
+ int  MeshdeformationAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	_error_("not implemented");
+ }/*}}}*/
+-void MeshdeformationAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void MeshdeformationAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+ void MeshdeformationAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void MeshdeformationAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void MeshdeformationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void MeshdeformationAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void MeshdeformationAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+-void MeshdeformationAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void MeshdeformationAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 	   _error_("not implemented yet");
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void FreeSurfaceBaseAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void FreeSurfaceBaseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -40,24 +40,21 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+ }/*}}}*/
+-void FreeSurfaceBaseAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void FreeSurfaceBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+ 	if(iomodel->meshtype!=Mesh2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+-	::CreateNodes(pnodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum);
+ }/*}}}*/
+-void FreeSurfaceBaseAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void FreeSurfaceBaseAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void FreeSurfaceBaseAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void FreeSurfaceBaseAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ 
+ 	/*Intermediaries*/
+ 	int penpair_ids[2];
+ 	int count=0;
+ 	int numvertex_pairing;
+ 
+-	/*Recover pointer: */
+-	Loads* loads=*ploads;
+-
+ 	/*Create Penpair for vertex_pairing: */
+ 	IssmDouble *vertex_pairing=NULL;
+ 	IssmDouble *nodeonbed=NULL;
+@@ -89,7 +86,4 @@
+ 	/*free ressources: */
+ 	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
+ 	iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
+-
+-	/*Assign output pointer: */
+-	*ploads=loads;
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  SmoothedSurfaceSlopeXAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void SmoothedSurfaceSlopeXAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void SmoothedSurfaceSlopeXAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void SmoothedSurfaceSlopeXAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -33,12 +33,12 @@
+ 		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 	}
+ }/*}}}*/
+-void SmoothedSurfaceSlopeXAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeXAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+-	::CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeXAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,SmoothedSurfaceSlopeXAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ }/*}}}*/
+-void SmoothedSurfaceSlopeXAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeXAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void SmoothedSurfaceSlopeXAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeXAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  ExtrudeFromTopAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void ExtrudeFromTopAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void ExtrudeFromTopAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -25,12 +25,12 @@
+ 		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 	}
+ }/*}}}*/
+-void ExtrudeFromTopAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void ExtrudeFromTopAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 
+-	::CreateNodes(pnodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,ExtrudeFromBaseAnalysisEnum,P1Enum);
+ 
+ }/*}}}*/
+-void ExtrudeFromTopAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void ExtrudeFromTopAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void ExtrudeFromTopAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void ExtrudeFromTopAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ int  SmoothedSurfaceSlopeYAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
+ 	return 1;
+ }/*}}}*/
+-void SmoothedSurfaceSlopeYAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
++void SmoothedSurfaceSlopeYAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
+ }/*}}}*/
+ void SmoothedSurfaceSlopeYAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+ 
+@@ -33,12 +33,12 @@
+ 		iomodel->FetchDataToInput(elements,MeshVertexonbedEnum);
+ 	}
+ }/*}}}*/
+-void SmoothedSurfaceSlopeYAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeYAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
+ 	iomodel->FetchData(1,MeshVertexonbedEnum);
+-	::CreateNodes(pnodes,iomodel,SmoothedSurfaceSlopeYAnalysisEnum,P1Enum);
++	::CreateNodes(nodes,iomodel,SmoothedSurfaceSlopeYAnalysisEnum,P1Enum);
+ 	iomodel->DeleteData(1,MeshVertexonbedEnum);
+ }/*}}}*/
+-void SmoothedSurfaceSlopeYAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeYAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+-void SmoothedSurfaceSlopeYAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/
++void SmoothedSurfaceSlopeYAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
+===================================================================
+--- ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16541)
++++ ../trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 16542)
+@@ -12,10 +12,10 @@
+ 
+ 	public:
+ 		int  DofsPerNode(int** doflist,int meshtype,int approximation);
+-		void UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum);
++		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
+ 		void UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+-		void CreateNodes(Nodes** pnodes,IoModel* iomodel);
+-		void CreateConstraints(Constraints** pconstraints,IoModel* iomodel);
+-		void CreateLoads(Loads** ploads, IoModel* iomodel);
++		void CreateNodes(Nodes* nodes,IoModel* iomodel);
++		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
++		void CreateLoads(Loads* loads, IoModel* iomodel);
+ };
+ #endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 16542)
+@@ -7,9 +7,8 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
++void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type){
+ 
+-	Parameters *parameters       = NULL;
+ 	bool        control_analysis,tao_analysis;
+ 	int         nsteps;
+ 	int         num_control_type;
+@@ -20,9 +19,6 @@
+ 	IssmDouble *optscal          = NULL;
+ 	IssmDouble *maxiter          = NULL;
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&tao_analysis,InversionTaoEnum);
+@@ -39,7 +35,7 @@
+ 		}
+ 
+ 		/*What solution type?*/
+-		if (solution_type==SteadystateSolutionEnum){
++		if(solution_type==SteadystateSolutionEnum){
+ 			parameters->AddObject(new BoolParam(ControlSteadyEnum,true));
+ 		}
+ 		else{
+@@ -73,7 +69,4 @@
+ 		iomodel->DeleteData(optscal,InversionGradientScalingEnum);
+ 		iomodel->DeleteData(maxiter,InversionMaxiterPerStepEnum);
+ 	}
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16542)
+@@ -12,24 +12,10 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void    UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints){
++void    UpdateCounters(IoModel* iomodel,Nodes* nodes,Loads* loads, Constraints* constraints){
+ 
+-	Nodes* nodes=NULL;
+-	Loads* loads=NULL;
+-	Constraints* constraints=NULL;
++	iomodel->nodecounter       = nodes->MaximumId();
++	iomodel->loadcounter       = loads->NumberOfLoads();
++	iomodel->constraintcounter = constraints->NumberOfConstraints();
+ 
+-	/*recover pointers: */
+-	nodes=*pnodes;
+-	loads=*ploads;
+-	constraints=*pconstraints;
+-
+-	if(nodes) iomodel->nodecounter=nodes->MaximumId();
+-	else iomodel->nodecounter=0;
+-
+-	if(loads)iomodel->loadcounter=loads->NumberOfLoads();
+-	else iomodel->loadcounter=0;
+-
+-	if(constraints)iomodel->constraintcounter=constraints->NumberOfConstraints();
+-	else iomodel->constraintcounter=0;
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 16542)
+@@ -12,34 +12,16 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters){
++void SortDataSets(Elements*elements,Nodes*nodes,Vertices*vertices, Loads*loads, Materials*materials, Constraints*constraints, Parameters*parameters){
+ 
+-	Elements    *elements    = NULL;
+-	Nodes       *nodes       = NULL;
+-	Vertices    *vertices    = NULL;
+-	Loads       *loads       = NULL;
+-	Materials   *materials   = NULL;
+-	Constraints *constraints = NULL;
+-	Parameters  *parameters  = NULL;
+-
+-	/*Recover pointers: */
+-	elements    = *pelements;
+-	nodes       = *pnodes;
+-	vertices    = *pvertices;
+-	loads       = *ploads;
+-	materials   = *pmaterials;
+-	constraints = *pconstraints;
+-	parameters  = *pparameters;
+-
+ 	/*All our datasets are already ordered by ids. Set presort flag so that
+ 	 * later on, when sorting is requested on these datasets, it will not be
+ 	 * redone: */
+-	if(elements)    elements->Presort();
+-	if(nodes)       nodes->Presort();
+-	if(vertices)    vertices->Presort();
+-	if(loads)       loads->Presort();
+-	if(materials)   materials->Presort();
+-	if(constraints) constraints->Presort();
+-	if(parameters)  parameters->Presort();
+-
++	elements->Presort();
++	nodes->Presort();
++	vertices->Presort();
++	loads->Presort();
++	materials->Presort();
++	constraints->Presort();
++	parameters->Presort();
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16542)
+@@ -7,7 +7,7 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
++void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel){
+ 
+ 	int         i;
+ 	Parameters *parameters       = NULL;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16542)
+@@ -7,11 +7,10 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateOutputDefinitions(Parameters** pparameters,IoModel* iomodel){
++void CreateOutputDefinitions(Parameters* parameters,IoModel* iomodel){
+ 
+ 	int i,j;
+ 	
+-	Parameters  *parameters              = NULL;
+ 	DataSet     *output_definitions      = NULL;
+ 	int         *output_definition_enums = NULL;
+ 	int          num_output_definitions;
+@@ -20,9 +19,6 @@
+ 	IssmDouble **gatesegments            = NULL;
+ 	int         *gatesegments_M          = NULL;
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*Create output_definitions dataset: */
+ 	output_definitions=new DataSet();
+ 	
+@@ -58,7 +54,4 @@
+ 	/*Free ressources:*/
+ 	delete output_definitions;
+ 	xDelete<int>(output_definition_enums);
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type){
++void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath){
+ 
+ 	/*variable declarations*/
+ 	int          i;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 16542)
+@@ -15,11 +15,10 @@
+ #include "../ParseToolkitsOptionsx/ParseToolkitsOptionsx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type,int analysis_type,int analysis_counter){
++void CreateParameters(Parameters* parameters,IoModel* iomodel,char* rootpath,FILE* toolkitsoptionsfid,const int solution_type){
+ 
+ 	int         i,j,m,k;
+ 	int         numoutputs,meshtype;
+-	Parameters *parameters       = NULL;
+ 	char**      requestedoutputs = NULL;
+ 	IssmDouble  time;
+ 	bool        ispdd,isdelta18o;
+@@ -37,11 +36,9 @@
+ 	IssmDouble  *matrix                     = NULL;
+ 	int          count;
+ 
+-	if(*pparameters)return; //do not create parameters twice!
++	/*Make sure current dataset is empty*/
++	_assert_(parameters->Size()==0); 
+ 
+-	/*Initialize dataset: */
+-	parameters = new Parameters();
+-
+ 	/*Copy some constants from iomodel */
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshTypeEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
+@@ -129,8 +126,6 @@
+ 
+ 	/*some parameters that did not come with the iomodel: */
+ 	parameters->AddObject(new IntParam(SolutionTypeEnum,solution_type));
+-	parameters->AddObject(new IntParam(AnalysisTypeEnum,analysis_type));
+-	parameters->AddObject(new IntParam(AnalysisCounterEnum,analysis_counter));
+ 
+ 	iomodel->Constant(&time,TimesteppingStartTimeEnum);
+ 	parameters->AddObject(new DoubleParam(TimeEnum,time));  //start at time 0 by default for all solutions FIXME: to be deleted
+@@ -223,24 +218,21 @@
+ 	/*}}}*/
+ 
+ 	/*Output definitions dataset: */
+-	CreateOutputDefinitions(&parameters,iomodel);
++	CreateOutputDefinitions(parameters,iomodel);
+ 
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+-	CreateParametersControl(&parameters,iomodel,solution_type,analysis_type);
++	CreateParametersControl(parameters,iomodel,solution_type);
+ 	#endif
+ 
+ 	#ifdef _HAVE_DAKOTA_
+-	CreateParametersDakota(&parameters,iomodel,rootpath,solution_type,analysis_type);
++	CreateParametersDakota(parameters,iomodel,rootpath);
+ 	#endif
+ 
+ 	/*Now, deal with toolkits options, which need to be put into the parameters dataset: */
+ 	ParseToolkitsOptionsx(parameters,toolkitsoptionsfid);
+ 
+  	#ifdef _HAVE_ADOLC_
+-	CreateParametersAutodiff(&parameters,iomodel,solution_type,analysis_type);
++	CreateParametersAutodiff(parameters,iomodel);
+ 	#endif
+-
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16542)
+@@ -12,19 +12,19 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
++void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_type_list){
+ 
+ 	int   i,analysis_type,verbose;
+ 	bool  isthermal,ismasstransport,isstressbalance,isgroundingline,isenthalpy;
+ 
+-	/*output: */
+-	Elements    *elements    = NULL;
+-	Nodes       *nodes       = NULL;
+-	Vertices    *vertices    = NULL;
+-	Materials   *materials   = NULL;
+-	Constraints *constraints = NULL;
+-	Loads       *loads       = NULL;
+-	Parameters  *parameters  = NULL;
++	/*Initialize datasets*/
++	Elements    *elements    = new Elements();
++	Nodes       *nodes       = new Nodes();
++	Vertices    *vertices    = new Vertices();
++	Materials   *materials   = new Materials();
++	Constraints *constraints = new Constraints();
++	Loads       *loads       = new Loads();
++	Parameters  *parameters  = new Parameters();
+ 
+ 	/*Initialize IoModel from input file*/
+ 	IoModel* iomodel = new IoModel(IOMODEL);
+@@ -41,30 +41,40 @@
+ 
+ 	if(VerboseMProcessor()) _printf0_("   starting model processor \n");
+ 
++	/*Partition Elements and Nodes*/
++	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
++
++	/*Create elements, vertices and materials, independent of analysis_enum: */
++	CreateElementsVerticesAndMaterials(elements,vertices,materials,iomodel,nummodels);
++
++	/*Create Parameters*/
++	CreateParameters(parameters,iomodel,rootpath,toolkitfile,solution_enum);
++
+ 	for(i=0;i<nummodels;i++){
+ 
+ 		analysis_type=analysis_type_list[i];
++		parameters->AddObject(new IntParam(AnalysisCounterEnum,i));
+ 
+ 		/*Hack for trasient runs (FIXME: to be improved)*/
+-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isthermal==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceVerticalAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_type==TransientSolutionEnum && analysis_type==StressbalanceSIAAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_type==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_type==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceVerticalAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceSIAAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+ 
+ 		if(VerboseMProcessor()) _printf0_("   creating datasets for analysis " << EnumToStringx(analysis_type) << "\n");
+-		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,toolkitfile,rootpath,solution_type,analysis_type,nummodels,i);
++		CreateDataSets(elements,nodes,vertices,materials,constraints,loads,parameters,iomodel,toolkitfile,rootpath,solution_enum,analysis_type,nummodels,i);
+ 	}
+ 	if(VerboseMProcessor()) _printf0_("   done with model processor \n");
+ 
+@@ -72,12 +82,11 @@
+ 	delete iomodel;
+ 
+ 	/*Assign output pointers:*/
+-	*pelements=elements;
+-	*pnodes=nodes;
+-	*pvertices=vertices;
+-	*pmaterials=materials;
+-	*pconstraints=constraints;
+-	*ploads=loads;
+-	*pparameters=parameters;
+-
++	*pelements    = elements;
++	*pnodes       = nodes;
++	*pvertices    = vertices;
++	*pmaterials   = materials;
++	*pconstraints = constraints;
++	*ploads       = loads;
++	*pparameters  = parameters;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16542)
+@@ -7,7 +7,7 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels){
++void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials,IoModel* iomodel,const int nummodels){
+ 
+ 	/*Intermediary*/
+ 	int i;
+@@ -15,24 +15,14 @@
+ 	bool control_analysis;
+ 	bool dakota_analysis;
+ 
+-	/*DataSets: */
+-	Elements  *elements  = NULL;
+-	Vertices  *vertices  = NULL;
+-	Materials *materials = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 	iomodel->Constant(&materials_type,MaterialsEnum);
+ 
+ 	/*Did we already create the elements? : */
+-	if(*pelements)return;
++	_assert_(elements->Size()==0);
+ 
+-	/*First create the elements, vertices, nodes and material properties, if they don't already exist */
+-	elements  = new Elements();
+-	vertices  = new Vertices();
+-	materials = new Materials();
+-
+ 	/*Create elements*/
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+ 	switch(iomodel->meshtype){
+@@ -103,9 +93,4 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum,MaskIceLevelsetEnum);
+-
+-	/*Assign output pointer: */
+-	*pelements=elements;
+-	*pvertices=vertices;
+-	*pmaterials=materials;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 16542)
+@@ -8,7 +8,7 @@
+ #include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation){
++void CreateNodes(Nodes* nodes, IoModel* iomodel,int analysis,int finite_element,int approximation){
+ 
+ 	/*Intermediaries*/
+ 	int   i,j,counter,lid=0;
+@@ -16,12 +16,6 @@
+ 	bool *my_nodes = NULL;
+ 	Node *node     = NULL;
+ 
+-	/*Recover pointer: */
+-	Nodes* nodes=*pnodes;
+-
+-	/*First create nodes*/
+-	if(!nodes) nodes = new Nodes();
+-
+ 	switch(finite_element){
+ 		case P1Enum:
+ 			for(i=0;i<iomodel->numberofvertices;i++){
+@@ -227,7 +221,4 @@
+ 	/*Clean up*/
+ 	xDelete<bool>(my_edges);
+ 	xDelete<bool>(my_nodes);
+-
+-	/*Assign output pointer: */
+-	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16542)
+@@ -13,38 +13,16 @@
+ #include "../MeshPartitionx/MeshPartitionx.h"
+ #include "./ModelProcessorx.h"
+ 
+-void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_enum,const int analysis_enum,const int nummodels,int analysis_counter){
++void CreateDataSets(Elements* elements,Nodes* nodes, Vertices* vertices, Materials* materials,Constraints* constraints, Loads* loads,Parameters* parameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_enum,const int analysis_enum,const int nummodels,int analysis_counter){
+ 
+-	Elements   *elements   = NULL;
+-	Materials  *materials  = NULL;
+-	Parameters *parameters = NULL;
+-
+-	/*Process Finite Element Mesh*/
+-
+-	/*Partition Elements and Nodes*/
+-	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+-
+-	/*Create elements, vertices and materials, independent of analysis_enum: */
+-	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
+-
+-	/*Create Parameters*/
+-	CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_enum,analysis_enum,analysis_counter);
+-
+-	/*Recover elements and materials, for future update: */
+-	elements  = *pelements;
+-	materials = *pmaterials;
+-
+ 	/*Creates Nodes and constraints datasets if empty*/
+-	if(!*pnodes)       *pnodes       = new Nodes();
+-	if(!*pconstraints) *pconstraints = new Constraints();
+-	if(!*ploads)       *ploads       = new Loads();
+ 
+ 	/*Now, branch onto analysis dependent model generation: */
+ 	Analysis* analysis = EnumToAnalysis(analysis_enum);
+-	analysis->UpdateParameters(pparameters,iomodel,solution_enum,analysis_enum);
+-	analysis->CreateNodes(pnodes,iomodel);
+-	analysis->CreateConstraints(pconstraints,iomodel);
+-	analysis->CreateLoads(ploads,iomodel);
++	analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum);
++	analysis->CreateNodes(nodes,iomodel);
++	analysis->CreateConstraints(constraints,iomodel);
++	analysis->CreateLoads(loads,iomodel);
+ 	analysis->UpdateElements(elements,iomodel,analysis_counter,analysis_enum);
+ 	delete analysis;
+ 
+@@ -58,20 +36,18 @@
+ 	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
+ 	#endif
+ 
+-
+ 	/*Update Elements in case we are running a transient solution: */
+ 	#ifdef _HAVE_TRANSIENT_
+-	parameters=*pparameters;
+ 	if(analysis_counter==(nummodels-1)&& solution_enum==TransientSolutionEnum){
+ 		UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_enum);
+ 	}
+ 	#endif
+ 
+ 	/*Sort datasets: */
+-	SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
++	SortDataSets(elements,nodes,vertices,loads,materials,constraints,parameters);
+ 
+ 	/* Update counters, because we have created more nodes, loads and
+ 	 * constraints, and ids for objects created in next call to CreateDataSets
+ 	 * will need to start at the end of the updated counters: */
+-	UpdateCounters(iomodel,pnodes,ploads,pconstraints);
++	UpdateCounters(iomodel,nodes,loads,constraints);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16542)
+@@ -11,17 +11,17 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+ /*Creation of fem datasets: general drivers*/
+-void CreateDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+-void CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels);
+-void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type,int analysis_type,int analysis_counter);
+-void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
+-void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
+-void CreateOutputDefinitions(Parameters** pparameters,IoModel* iomodel);
++void CreateDataSets(Elements* elements,Nodes* nodes,Vertices* vertices, Materials* materials, Constraints* constraints, Loads* loads,Parameters* parameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
++void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials, IoModel* iomodel,const int nummodels);
++void CreateParameters(Parameters*parameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type);
++void CreateParametersAutodiff(Parameters* parameters,IoModel* iomodel);
++void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type);
++void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath);
++void CreateOutputDefinitions(Parameters* parameters,IoModel* iomodel);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
+-void CreateNodes(Nodes** pnodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
++void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+ 
+ /*partitioning: */
+ void ElementsAndVerticesPartitioning(bool** pmy_elements, int** pmy_vertices, IoModel* iomodel);
+@@ -38,7 +38,7 @@
+ void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+ 
+ /*Diverse: */
+-void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
+-void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
++void SortDataSets(Elements*elements,Nodes*nodes,Vertices*vertices, Loads*loads, Materials*materials, Constraints*constraints, Parameters*parameters);
++void UpdateCounters(IoModel* iomodel,Nodes*nodes,Loads*loads, Constraints*constraints);
+ 
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16542-16543.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16542-16543.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16542-16543.diff	(revision 16556)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16542)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16543)
+@@ -7,10 +7,9 @@
+ #include "../../../shared/shared.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel){
++void CreateParametersAutodiff(Parameters* parameters,IoModel* iomodel){
+ 
+ 	int         i;
+-	Parameters *parameters       = NULL;
+ 	bool        autodiff_analysis;
+ 	int         num_dependent_objects;
+ 	int         num_dep=0;
+@@ -27,9 +26,6 @@
+ 	int         num_ind,local_num_ind;
+ 	DataSet*    dependent_objects=NULL;
+ 
+-	/*Get parameters: */
+-	parameters=*pparameters;
+-
+ 	/*retrieve some parameters: */
+ 	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
+ 
+@@ -163,7 +159,4 @@
+ 		/*}}}*/
+ 	#endif
+ 
+-	/*Assign output pointer: */
+-	*pparameters=parameters;
+-
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16542)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 16543)
+@@ -8,11 +8,10 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath){
++void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath){
+ 
+ 	/*variable declarations*/
+ 	int          i;
+-	Parameters  *parameters             = NULL;
+ 	int         *part                   = NULL;
+ 	double      *dpart                  = NULL;
+ 	char       **responsedescriptors    = NULL;
+@@ -35,9 +34,6 @@
+ 	int   numberofresponses;
+ 	int   nrows,ncols;
+ 
+-	/*recover parameters : */
+-	parameters = *pparameters;
+-
+ 	/*recover parameters: */
+ 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
+ 
+@@ -123,7 +119,4 @@
+ 
+ 	/*Free data*/
+ 	xDelete<char>(name);
+-
+-	/*Assign output pointer: */
+-	*pparameters = parameters;
+ }
Index: issm/oecreview/Archive/16133-16554/ISSM-16543-16544.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16543-16544.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16543-16544.diff	(revision 16556)
@@ -0,0 +1,128 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16543)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 16544)
+@@ -1,21 +0,0 @@
+-/*!\file: UpdateCounters.cpp
+- * \brief update counters after adding objects to a dataset.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "./ModelProcessorx.h"
+-
+-void    UpdateCounters(IoModel* iomodel,Nodes* nodes,Loads* loads, Constraints* constraints){
+-
+-	iomodel->nodecounter       = nodes->MaximumId();
+-	iomodel->loadcounter       = loads->NumberOfLoads();
+-	iomodel->constraintcounter = constraints->NumberOfConstraints();
+-
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 16543)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 16544)
+@@ -1,27 +0,0 @@
+-/*!\file: SortDataSets.cpp
+- * \brief sort datasets created in CreateDataSets
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "./ModelProcessorx.h"
+-
+-void SortDataSets(Elements*elements,Nodes*nodes,Vertices*vertices, Loads*loads, Materials*materials, Constraints*constraints, Parameters*parameters){
+-
+-	/*All our datasets are already ordered by ids. Set presort flag so that
+-	 * later on, when sorting is requested on these datasets, it will not be
+-	 * redone: */
+-	elements->Presort();
+-	nodes->Presort();
+-	vertices->Presort();
+-	loads->Presort();
+-	materials->Presort();
+-	constraints->Presort();
+-	parameters->Presort();
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16543)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16544)
+@@ -76,6 +76,19 @@
+ 		if(VerboseMProcessor()) _printf0_("   creating datasets for analysis " << EnumToStringx(analysis_type) << "\n");
+ 		CreateDataSets(elements,nodes,vertices,materials,constraints,loads,parameters,iomodel,toolkitfile,rootpath,solution_enum,analysis_type,nummodels,i);
+ 	}
++
++	/* Sort datasets:
++	 * All our datasets are already ordered by ids. Set presort flag so that
++	 * later on, when sorting is requested on these datasets, it will not be
++	 * redone: */
++	elements->Presort();
++	nodes->Presort();
++	vertices->Presort();
++	loads->Presort();
++	materials->Presort();
++
++	constraints->Presort();
++	parameters->Presort();
+ 	if(VerboseMProcessor()) _printf0_("   done with model processor \n");
+ 
+ 	/*Free resources:*/
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16543)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16544)
+@@ -43,11 +43,10 @@
+ 	}
+ 	#endif
+ 
+-	/*Sort datasets: */
+-	SortDataSets(elements,nodes,vertices,loads,materials,constraints,parameters);
+-
+ 	/* Update counters, because we have created more nodes, loads and
+ 	 * constraints, and ids for objects created in next call to CreateDataSets
+ 	 * will need to start at the end of the updated counters: */
+-	UpdateCounters(iomodel,nodes,loads,constraints);
++	iomodel->nodecounter       = nodes->MaximumId();
++	iomodel->loadcounter       = loads->NumberOfLoads();
++	iomodel->constraintcounter = constraints->NumberOfConstraints();
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16543)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16544)
+@@ -36,9 +36,4 @@
+ /*Connectivity*/
+ void CreateSingleNodeToElementConnectivity(IoModel* iomodel);
+ void CreateNumberNodeToElementConnectivity(IoModel* iomodel);
+-
+-/*Diverse: */
+-void SortDataSets(Elements*elements,Nodes*nodes,Vertices*vertices, Loads*loads, Materials*materials, Constraints*constraints, Parameters*parameters);
+-void UpdateCounters(IoModel* iomodel,Nodes*nodes,Loads*loads, Constraints*constraints);
+-
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16543)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16544)
+@@ -245,8 +245,6 @@
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
+ 					./modules/ModelProcessorx/EdgesPartitioning.cpp\
+ 					./modules/ModelProcessorx/FacesPartitioning.cpp\
+-					./modules/ModelProcessorx/SortDataSets.cpp\
+-					./modules/ModelProcessorx/UpdateCounters.cpp\
+ 					./modules/ModelProcessorx/CreateDataSets.cpp\
+ 					./modules/ModelProcessorx/CreateParameters.cpp\
+ 					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
Index: issm/oecreview/Archive/16133-16554/ISSM-16544-16545.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16544-16545.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16544-16545.diff	(revision 16556)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/test/Archives/Archive327.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive120.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive432.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive325.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive121.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive122.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive431.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/c/classes/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16544)
++++ ../trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16545)
+@@ -376,12 +376,17 @@
+ /*}}}*/
+ /*FUNCTION Matpar::GetEnthalpyDiffusionParameter{{{*/
+ IssmDouble Matpar::GetEnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){
+-	if(enthalpy<PureIceEnthalpy(pressure)){
++	/*if (enthalpy<=PureIceEnthalpy(pressure))
+ 		return thermalconductivity/heatcapacity;
+-	}
+-	else{
+-		return 1.045*1.e-4; // K0=1.045*1e-4 from Aschwanden 2012. TODO: fetch K0 from model
+-	}
++	else
++		return thermalconductivity/heatcapacity*pow(10.,-5);
++	*/
++
++	IssmDouble eps=0.05*heatcapacity;
++	IssmDouble hpmp=PureIceEnthalpy(pressure);
++	IssmDouble kappa_c=thermalconductivity/heatcapacity;
++	IssmDouble kappa_t=thermalconductivity/heatcapacity*pow(10.,-1);
++	return 1./(1.+exp(-(enthalpy-(hpmp))/eps))*(kappa_t-kappa_c) + kappa_c;
+ }
+ /*}}}*/
+ /*FUNCTION Matpar::GetEnthalpyDiffusionParameterVolume{{{*/
+Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16544)
++++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16545)
+@@ -3823,7 +3823,6 @@
+ 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+ 
+ 		/*Conduction: */  
+-		/*Need to change that depending on enthalpy value -> cold or temperate ice: */  
+ 		GetBConduct(&B_conduct[0][0],&xyz_list[0][0],gauss); 
+ 
+ 		enthalpy_input->GetInputValue(&enthalpy, gauss);
+@@ -3872,15 +3871,17 @@
+ 						&Ke->values[0],1);
+ 		}
+ 
+-		/*Artifficial diffusivity*/
++		/*Artificial diffusivity*/
+ 		if(stabilization==1){
+ 			/*Build K: */
+ 			GetElementSizes(&hx,&hy,&hz);
+ 			vel=sqrt(vx*vx + vy*vy + vz*vz)+1.e-14;
+ 			h=sqrt( pow(hx*vx/vel,2) + pow(hy*vy/vel,2) + pow(hz*vz/vel,2));
++
+ 			K[0][0]=h/(2*vel)*vx*vx;  K[0][1]=h/(2*vel)*vx*vy; K[0][2]=h/(2*vel)*vx*vz;
+ 			K[1][0]=h/(2*vel)*vy*vx;  K[1][1]=h/(2*vel)*vy*vy; K[1][2]=h/(2*vel)*vy*vz;
+ 			K[2][0]=h/(2*vel)*vz*vx;  K[2][1]=h/(2*vel)*vz*vy; K[2][2]=h/(2*vel)*vz*vz;
++
+ 			D_scalar_stab=gauss->weight*Jdet;
+ 			if(reCast<bool,IssmDouble>(dt)) D_scalar_stab=D_scalar_stab*dt;
+ 			for(i=0;i<3;i++) for(j=0;j<3;j++) K[i][j] = D_scalar_stab*K[i][j];
+@@ -4069,7 +4070,6 @@
+ 					&Ke->values[0],1);
+ 
+ 		/*Advection: */
+-
+ 		GetBAdvec(&B_advec[0][0],&xyz_list[0][0],gauss); 
+ 		GetBprimeAdvec(&Bprime_advec[0][0],&xyz_list[0][0],gauss); 
+ 
+@@ -4959,8 +4959,9 @@
+ 	IssmDouble  basalfriction, alpha2;
+ 	IssmDouble  vx[NUMVERTICES],vy[NUMVERTICES],vz[NUMVERTICES];
+ 	IssmDouble  geothermalflux[NUMVERTICES];
+-	IssmDouble  dt;
+-	IssmDouble  meltingrate_enthalpy;
++	IssmDouble  dt, yts;
++	IssmDouble  melting_overshoot,meltingrate_enthalpy;
++	IssmDouble  lambda,heating;
+ 	Friction   *friction  = NULL;
+ 
+ 	/* Only compute melt rates at the base of grounded ice*/
+@@ -4997,8 +4998,11 @@
+ 		gauss->GaussVertex(iv);
+ 		checkpositivethickness=true;
+ 
++		_assert_(watercolumn[iv]>=0.);
++
+ 		/*Calculate basal meltingrate after Fig.5 of A.Aschwanden 2012*/
+ 		meltingrate_enthalpy=0.;
++		heating=0.;
+ 		if((watercolumn[iv]>0.) && (enthalpy[iv]<matpar->PureIceEnthalpy(pressure[iv]))){
+ 			/*ensure that no ice is at T<Tm(p), if water layer present*/
+ 			enthalpy[iv]=matpar->PureIceEnthalpy(pressure[iv]); 
+@@ -5031,16 +5035,30 @@
+ 
+ 			matpar->EnthalpyToThermal(&temperature, &waterfraction, enthalpy[iv],pressure[iv]);
+ 			// -Mb= Fb-(q-q_geo)/((1-w)*L), cf Aschwanden 2012, eq.66
+-			meltingrate_enthalpy=(heatflux+basalfriction+geothermalflux[iv])/((1-waterfraction)*latentheat*rho_ice); // m/s water equivalent 
++			heating=(heatflux+basalfriction+geothermalflux[iv]);
++			meltingrate_enthalpy=heating/((1-waterfraction)*latentheat*rho_ice); // m/s water equivalent 
+ 		}
++
+ 		/*Update water column, basal meltingrate*/
+-		//basalmeltingrate[iv]+=meltingrate_enthalpy;
+-		basalmeltingrate[iv]=meltingrate_enthalpy;
+ 		this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-		if(reCast<bool,IssmDouble>(dt))
+-			watercolumn[iv]+=dt*meltingrate_enthalpy; 
+-		else
++		if(reCast<bool,IssmDouble>(dt)){
++			if(watercolumn[iv]+meltingrate_enthalpy*dt<0.){				
++				melting_overshoot=watercolumn[iv]+meltingrate_enthalpy*dt;
++				lambda=melting_overshoot/(meltingrate_enthalpy*dt); _assert_(lambda>0); _assert_(lambda<1);
++				basalmeltingrate[iv]=(1.-lambda)*meltingrate_enthalpy;
++				watercolumn[iv]=0.;
++				yts=365*24*60*60;
++				enthalpy[iv]+=dt/yts*lambda*heating;
++			}
++			else{
++				basalmeltingrate[iv]=meltingrate_enthalpy;
++				watercolumn[iv]+=dt*meltingrate_enthalpy; 
++			}
++		}
++		else{
++			basalmeltingrate[iv]=meltingrate_enthalpy;
+ 			watercolumn[iv]+=meltingrate_enthalpy;
++		}	  
+ 	}  
+ 	/*feed updated variables back into model*/
+ 	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+@@ -5071,8 +5089,8 @@
+ 	/*get basal element, needed for basal watercolumn*/
+ 	pentabase=this->GetBasalElement();
+ 	
+-	GetInputListOnVertices(&enthalpy[0],EnthalpyEnum);
+-	GetInputListOnVertices(&pressure[0],PressureEnum);
++	this->GetInputListOnVertices(&enthalpy[0],EnthalpyEnum);
++	this->GetInputListOnVertices(&pressure[0],PressureEnum);
+ 	pentabase->GetInputListOnVertices(&watercolumnbase[0], WatercolumnEnum);
+ 
+ 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+@@ -5088,12 +5106,12 @@
+ 		dwc=dw*this->IceVolume();
+ 		watercolumnbase[iv%NUMVERTICES2D]+=dwc;
+ 	}
++
+ 	/*feed updated results back into model*/
+ 	this->inputs->AddInput(new PentaInput(EnthalpyEnum,enthalpy,P1Enum));
+ 	this->inputs->AddInput(new PentaInput(WaterfractionEnum,waterfraction,P1Enum));
+ 	pentabase->inputs->AddInput(new PentaInput(WatercolumnEnum, watercolumnbase,P1Enum));
+ 
+-	delete pentabase;
+ }
+ /*}}}*/
+ #endif
Index: issm/oecreview/Archive/16133-16554/ISSM-16545-16546.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16545-16546.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16545-16546.diff	(revision 16556)
@@ -0,0 +1,486 @@
+Index: ../trunk-jpl/src/c/kml/KML_Placemark.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Placemark.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Placemark.cpp	(revision 16546)
+@@ -134,8 +134,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Placemark",11)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -183,7 +182,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_Unknown.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Unknown.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Unknown.cpp	(revision 16546)
+@@ -42,10 +42,12 @@
+ 	if(flag) _printf0_("KML_Unknown " << name << ":\n");
+ 	KML_Object::Echo();
+ 
+-	if (value     )
++	if(value){
+ 		if(flag) _printf0_("         value: \"" << value << "\"\n");
+-    else
+-        if(flag) _printf0_("         value: [none]\n");
++	}
++	else{
++		if(flag) _printf0_("         value: [none]\n");
++	}
+ 
+ 	return;
+ }
+@@ -78,7 +80,7 @@
+ 		vtoken=strtok(valuei,nl);
+ 		if(flag) _printf0_(indent << "         value: \"" << vtoken);
+ 
+-		while (vtoken=strtok(NULL,nl))
++		while((vtoken=strtok(NULL,nl)))
+ 			if(flag) _printf0_("\n" << indent << "                 " << vtoken);
+ 		if(flag) _printf0_("\"\n");
+ 
+@@ -109,7 +111,7 @@
+ 		vtoken=strtok(valuei,nl);
+ 		fprintf(filout,"%s  %s\n",indent,vtoken);
+ 
+-		while (vtoken=strtok(NULL,nl))
++		while((vtoken=strtok(NULL,nl)))
+ 			fprintf(filout,"%s  %s\n",indent,vtoken);
+ 
+ 		xDelete<char>(valuei);
+@@ -145,8 +147,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ //		_printf0_("KML_Unknown::Read -- kstri=" << kstri << ".\n");
+ 		if      (!strncmp(&kstri[0],"</", 2) &&
+ 				 !strncmp(&kstri[2],name,strlen(name))) {
+@@ -182,7 +183,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_GroundOverlay.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_GroundOverlay.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_GroundOverlay.cpp	(revision 16546)
+@@ -121,8 +121,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</GroundOverlay",15)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -153,7 +152,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_Style.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Style.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Style.cpp	(revision 16546)
+@@ -179,8 +179,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Style", 7)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -228,7 +227,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_MultiGeometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_MultiGeometry.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_MultiGeometry.cpp	(revision 16546)
+@@ -133,8 +133,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</MultiGeometry",15)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -182,7 +181,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_LineStyle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LineStyle.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_LineStyle.cpp	(revision 16546)
+@@ -100,8 +100,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</LineStyle",11)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -124,7 +123,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_Folder.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Folder.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Folder.cpp	(revision 16546)
+@@ -94,8 +94,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Folder", 8)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -113,8 +112,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
+-		xDelete<char>(pcom[ncom-1]);
++	for (ncom=ncom; ncom>0; ncom--) xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+ 	return;
+Index: ../trunk-jpl/src/c/kml/KML_Document.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Document.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Document.cpp	(revision 16546)
+@@ -94,8 +94,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))) {
+ 		if      (!strncmp(kstri,"</Document",10)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -113,7 +112,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for (ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_File.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_File.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_File.cpp	(revision 16546)
+@@ -95,8 +95,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</kml", 5)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -114,8 +113,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
+-		xDelete<char>(pcom[ncom-1]);
++	for(; ncom>0; ncom--) xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+ 	return;
+Index: ../trunk-jpl/src/c/kml/KML_Icon.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Icon.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Icon.cpp	(revision 16546)
+@@ -133,8 +133,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Icon", 6)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -169,7 +168,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_Point.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Point.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Point.cpp	(revision 16546)
+@@ -113,8 +113,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Point", 7)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -139,7 +138,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_LinearRing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 16546)
+@@ -126,7 +126,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,&ncom,&pcom)){
++	while((kstri=KMLFileToken(fid,&ncom,&pcom))){
+ 		if (!strncmp(kstri,"</LinearRing",12)){
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -152,7 +152,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for(ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_LatLonBox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LatLonBox.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_LatLonBox.cpp	(revision 16546)
+@@ -108,8 +108,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</LatLonBox",11)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -148,7 +147,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for (ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_PolyStyle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_PolyStyle.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_PolyStyle.cpp	(revision 16546)
+@@ -106,8 +106,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</PolyStyle",11)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -134,7 +133,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_LineString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 16546)
+@@ -128,8 +128,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</LineString",12)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -164,7 +163,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for (ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/kml/KML_Polygon.cpp
+===================================================================
+--- ../trunk-jpl/src/c/kml/KML_Polygon.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/kml/KML_Polygon.cpp	(revision 16546)
+@@ -168,8 +168,7 @@
+ 
+ /*  loop over and process fields within opening and closing tags  */
+ 
+-	while (kstri=KMLFileToken(fid,
+-							  &ncom,&pcom)) {
++	while((kstri=KMLFileToken(fid, &ncom,&pcom))){
+ 		if      (!strncmp(kstri,"</Polygon", 9)) {
+ 			xDelete<char>(kstri);
+ 			break;
+@@ -196,8 +195,7 @@
+ 
+ /*  loop over and process fields within outer boundary  */
+ 
+-			while (kstrj=KMLFileToken(fid,
+-									  &ncom,&pcom)) {
++			while((kstrj=KMLFileToken(fid, &ncom,&pcom))){
+ 				if      (!strncmp(kstrj,"</outerBoundaryIs",17)) {
+ 					xDelete<char>(kstrj);
+ 					break;
+@@ -223,8 +221,7 @@
+ 
+ /*  loop over and process fields within inner boundaries  */
+ 
+-			while (kstrj=KMLFileToken(fid,
+-									  &ncom,&pcom)) {
++			while((kstrj=KMLFileToken(fid, &ncom,&pcom))){
+ 				if      (!strncmp(kstrj,"</innerBoundaryIs",17)) {
+ 					xDelete<char>(kstrj);
+ 					break;
+@@ -254,7 +251,7 @@
+ 
+ 	this->AddCommnt(ncom,pcom);
+ 
+-	for (ncom; ncom>0; ncom--)
++	for(ncom=ncom; ncom>0; ncom--)
+ 		xDelete<char>(pcom[ncom-1]);
+ 	xDelete<char*>(pcom);
+ 
+Index: ../trunk-jpl/src/c/bamg/SubDomain.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/SubDomain.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/bamg/SubDomain.cpp	(revision 16546)
+@@ -14,11 +14,11 @@
+ 	/*FUNCTION SubDomain::Set {{{*/
+ 	void SubDomain::Set(const Mesh & Th ,long i,Mesh & ThNew){
+ 		*this = Th.subdomains[i];
+-		if ( head-Th.triangles<0 || head-Th.triangles>=Th.nbt){
++		if( head-Th.triangles<0 || head-Th.triangles>=Th.nbt){
+ 			_error_("head-Th.triangles<0 || head-Th.triangles>=Th.nbt");
+ 		}
+ 		head = ThNew.triangles + Th.GetId(head) ; 
+-		if (edge-Th.edges<0 || edge-Th.edges>=Th.nbe);{
++		if(edge-Th.edges<0 || edge-Th.edges>=Th.nbe){
+ 			_error_("edge-Th.edges<0 || edge-Th.edges>=Th.nbe");
+ 		}
+ 		edge = ThNew.edges+ Th.GetId(edge);
+Index: ../trunk-jpl/src/c/bamg/VertexOnGeom.cpp
+===================================================================
+--- ../trunk-jpl/src/c/bamg/VertexOnGeom.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/bamg/VertexOnGeom.cpp	(revision 16546)
+@@ -37,11 +37,12 @@
+ 	void VertexOnGeom::Set(const VertexOnGeom & rec,const Mesh & Th ,Mesh & ThNew){
+ 		*this = rec;  
+ 		meshvertex = ThNew.vertices + Th.GetId(meshvertex);
+-		if (gv)
++		if(gv){
+ 		 if (curvilincoord < 0 )
+ 		  gv = ThNew.Gh.vertices + Th.Gh.GetId(gv);
+ 		 else
+ 		  ge = ThNew.Gh.edges + Th.Gh.GetId(ge);
++		}
+ 
+ 	}
+ 	/*}}}*/
+Index: ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 16546)
+@@ -21,8 +21,7 @@
+ 
+ /*  read kml file  */
+ 
+-	while (kstr=KMLFileToken(fid,
+-							 NULL,NULL)) {
++	while((kstr=KMLFileToken(fid, NULL,NULL))){
+ 		if      (!strncmp(kstr,"<?xml"    ,5)) {
+ 			kxml=new KML_File();
+ 			KMLFileTagAttrib(kxml,
+Index: ../trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 16545)
++++ ../trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 16546)
+@@ -55,7 +55,7 @@
+ 	klsty=new KML_LineStyle();
+ 	sprintf(klsty->color     ,"ff000000");
+ 	sprintf(klsty->colormode ,"normal");
+-	klsty->width     ,lwidth;
++	klsty->width     =lwidth;
+ 	kpsty=new KML_PolyStyle();
+ 	sprintf(kpsty->color     ,"00ffffff");
+ 	sprintf(kpsty->colormode ,"random");
Index: issm/oecreview/Archive/16133-16554/ISSM-16546-16547.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16546-16547.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16546-16547.diff	(revision 16556)
@@ -0,0 +1,156 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh	(revision 16547)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh	(revision 16547)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh	(revision 16547)
+@@ -2,16 +2,16 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh	(revision 16547)
+@@ -1,16 +1,16 @@
+ #!/bin/bash
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh	(revision 16547)
+@@ -1,16 +1,16 @@
+ #!/bin/bash
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
+Index: ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh	(revision 16546)
++++ ../trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh	(revision 16547)
+@@ -1,16 +1,16 @@
+ #!/bin/bash
+ 
+ #Some cleanup
+-rm -rf install petsc-3.4.2 src
++rm -rf install petsc-3.4.3 src
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.2.tar.gz' 'petsc-3.4.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.4.3.tar.gz' 'petsc-3.4.3.tar.gz'
+ 
+ #Untar and move petsc to install directory
+-tar -zxvf  petsc-3.4.2.tar.gz
+-mv petsc-3.4.2/* src/
+-rm -rf petsc-3.4.2
++tar -zxvf  petsc-3.4.3.tar.gz
++mv petsc-3.4.3/* src/
++rm -rf petsc-3.4.3
+ 
+ #configure
+ cd src
Index: issm/oecreview/Archive/16133-16554/ISSM-16547-16548.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16547-16548.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16547-16548.diff	(revision 16556)
@@ -0,0 +1,275 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh	(revision 16547)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh	(revision 16548)
+@@ -14,6 +14,7 @@
+ cat c.vim | sed "/ISSM's objects begin/,/vim: ts=8/d" > temp
+ echo "\"ISSM's objects begin" >> temp
+ find ../../../../../src/c/classes -name "*.cpp" -o -name "*.h" | sed -e "s/\// /g" -e "s/\.cpp//" -e "s/\.h//" | awk '{print  $(NF)}' | sort | uniq | awk '{ printf "syn keyword cType " $1 "\n"}'>> temp
++find ../../../../../src/c/analyses -name "*Analysis.h" | sed -e "s/\// /g" -e "s/\.cpp//" -e "s/\.h//" | awk '{print  $(NF)}' | sort | uniq | awk '{ printf "syn keyword cType " $1 "\n"}'>> temp
+ echo "\"ISSM's objects end" >> temp
+ cat c.vim | sed "1,/ISSM's objects end/d" >> temp
+ 
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16547)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 16548)
+@@ -409,20 +409,18 @@
+ syn keyword	cType		IssmDouble IssmPDouble
+ 
+ "ISSM's objects begin
+-syn keyword cType BoolElementResult
+ syn keyword cType BoolInput
+ syn keyword cType BoolParam
+-syn keyword cType classes
+ syn keyword cType Constraint
+ syn keyword cType Constraints
+ syn keyword cType Contour
+ syn keyword cType Contours
+ syn keyword cType ControlInput
++syn keyword cType DataSetParam
+ syn keyword cType DatasetInput
+-syn keyword cType DataSetParam
++syn keyword cType Definition
+ syn keyword cType DependentObject
+ syn keyword cType DofIndexing
+-syn keyword cType DoubleElementResult
+ syn keyword cType DoubleInput
+ syn keyword cType DoubleMatArrayParam
+ syn keyword cType DoubleMatParam
+@@ -432,19 +430,17 @@
+ syn keyword cType Element
+ syn keyword cType ElementHook
+ syn keyword cType ElementMatrix
+-syn keyword cType ElementResult
++syn keyword cType ElementVector
+ syn keyword cType Elements
+-syn keyword cType ElementVector
+ syn keyword cType ExponentialVariogram
+ syn keyword cType ExternalResult
+ syn keyword cType FemModel
+ syn keyword cType FileParam
+ syn keyword cType Friction
+-syn keyword cType GaussianVariogram
+-syn keyword cType gaussobjects
+ syn keyword cType GaussPenta
+ syn keyword cType GaussSeg
+ syn keyword cType GaussTria
++syn keyword cType GaussianVariogram
+ syn keyword cType GenericExternalResult
+ syn keyword cType GenericOption
+ syn keyword cType GenericParam
+@@ -458,14 +454,13 @@
+ syn keyword cType IntParam
+ syn keyword cType IntVecParam
+ syn keyword cType IoModel
+-syn keyword cType krigingobjects
+ syn keyword cType Load
+ syn keyword cType Loads
++syn keyword cType Massfluxatgate
+ syn keyword cType Material
+ syn keyword cType Materials
+ syn keyword cType Matice
+ syn keyword cType Matpar
+-syn keyword cType matrixobjects
+ syn keyword cType MatrixParam
+ syn keyword cType Node
+ syn keyword cType Nodes
+@@ -473,26 +468,25 @@
+ syn keyword cType Observation
+ syn keyword cType Observations
+ syn keyword cType Option
++syn keyword cType OptionUtilities
+ syn keyword cType Options
+-syn keyword cType OptionUtilities
+ syn keyword cType Param
+ syn keyword cType Parameters
+-syn keyword cType Patch
+ syn keyword cType Pengrid
+ syn keyword cType Penpair
+ syn keyword cType Penta
+ syn keyword cType PentaInput
+-syn keyword cType PentaP1ElementResult
+ syn keyword cType PentaRef
+ syn keyword cType PowerVariogram
+ syn keyword cType Profiler
+ syn keyword cType Quadtree
+ syn keyword cType Results
++syn keyword cType RiftStruct
+ syn keyword cType Riftfront
+-syn keyword cType RiftStruct
+ syn keyword cType Seg
++syn keyword cType SegInput
++syn keyword cType SegRef
+ syn keyword cType Segment
+-syn keyword cType SegRef
+ syn keyword cType SpcDynamic
+ syn keyword cType SpcStatic
+ syn keyword cType SpcTransient
+@@ -503,13 +497,43 @@
+ syn keyword cType TransientParam
+ syn keyword cType Tria
+ syn keyword cType TriaInput
+-syn keyword cType TriaP1ElementResult
+ syn keyword cType TriaRef
+ syn keyword cType Update
+ syn keyword cType Variogram
+ syn keyword cType VectorParam
+ syn keyword cType Vertex
+ syn keyword cType Vertices
++syn keyword cType classes
++syn keyword cType gaussobjects
++syn keyword cType krigingobjects
++syn keyword cType matrixobjects
++syn keyword cType AdjointBalancethicknessAnalysis
++syn keyword cType AdjointHorizAnalysis
++syn keyword cType Analysis
++syn keyword cType BalancethicknessAnalysis
++syn keyword cType BalancethicknessSoftAnalysis
++syn keyword cType BalancevelocityAnalysis
++syn keyword cType DamageEvolutionAnalysis
++syn keyword cType EnthalpyAnalysis
++syn keyword cType EnumToAnalysis
++syn keyword cType ExtrudeFromBaseAnalysis
++syn keyword cType ExtrudeFromTopAnalysis
++syn keyword cType FreeSurfaceBaseAnalysis
++syn keyword cType FreeSurfaceTopAnalysis
++syn keyword cType GiaAnalysis
++syn keyword cType HydrologyDCEfficientAnalysis
++syn keyword cType HydrologyDCInefficientAnalysis
++syn keyword cType HydrologyShreveAnalysis
++syn keyword cType L2ProjectionBaseAnalysis
++syn keyword cType MasstransportAnalysis
++syn keyword cType MeltingAnalysis
++syn keyword cType MeshdeformationAnalysis
++syn keyword cType SmoothedSurfaceSlopeXAnalysis
++syn keyword cType SmoothedSurfaceSlopeYAnalysis
++syn keyword cType StressbalanceAnalysis
++syn keyword cType StressbalanceSIAAnalysis
++syn keyword cType StressbalanceVerticalAnalysis
++syn keyword cType ThermalAnalysis
+ "ISSM's objects end
+ "ISSM's Enums begin
+ syn keyword cConstant AutodiffIsautodiffEnum
+@@ -553,10 +577,10 @@
+ syn keyword cConstant StressbalanceAbstolEnum
+ syn keyword cConstant StressbalanceIsnewtonEnum
+ syn keyword cConstant StressbalanceMaxiterEnum
+-syn keyword cConstant StressbalanceNumRequestedOutputsEnum
+ syn keyword cConstant StressbalancePenaltyFactorEnum
+ syn keyword cConstant StressbalanceReferentialEnum
+ syn keyword cConstant StressbalanceReltolEnum
++syn keyword cConstant StressbalanceNumRequestedOutputsEnum
+ syn keyword cConstant StressbalanceRequestedOutputsEnum
+ syn keyword cConstant StressbalanceRestolEnum
+ syn keyword cConstant StressbalanceRiftPenaltyLockEnum
+@@ -731,7 +755,6 @@
+ syn keyword cConstant SettingsIoGatherEnum
+ syn keyword cConstant SettingsLowmemEnum
+ syn keyword cConstant SettingsOutputFrequencyEnum
+-syn keyword cConstant SettingsResultsAsPatchesEnum
+ syn keyword cConstant SettingsWaitonlockEnum
+ syn keyword cConstant SurfaceforcingsDelta18oEnum
+ syn keyword cConstant SurfaceforcingsDelta18oSurfaceEnum
+@@ -768,6 +791,8 @@
+ syn keyword cConstant ThermalPenaltyThresholdEnum
+ syn keyword cConstant ThermalSpctemperatureEnum
+ syn keyword cConstant ThermalStabilizationEnum
++syn keyword cConstant ThermalNumRequestedOutputsEnum
++syn keyword cConstant ThermalRequestedOutputsEnum
+ syn keyword cConstant GiaMantleViscosityEnum
+ syn keyword cConstant GiaLithosphereThicknessEnum
+ syn keyword cConstant ThicknessEnum
+@@ -790,7 +815,6 @@
+ syn keyword cConstant AdjointBalancethicknessAnalysisEnum
+ syn keyword cConstant AdjointHorizAnalysisEnum
+ syn keyword cConstant AnalysisCounterEnum
+-syn keyword cConstant NoneAnalysisEnum
+ syn keyword cConstant DefaultAnalysisEnum
+ syn keyword cConstant BalancethicknessAnalysisEnum
+ syn keyword cConstant BalancethicknessSolutionEnum
+@@ -798,10 +822,8 @@
+ syn keyword cConstant BalancethicknessSoftSolutionEnum
+ syn keyword cConstant BalancevelocityAnalysisEnum
+ syn keyword cConstant BalancevelocitySolutionEnum
+-syn keyword cConstant BedSlopeAnalysisEnum
++syn keyword cConstant L2ProjectionBaseAnalysisEnum
+ syn keyword cConstant BedSlopeSolutionEnum
+-syn keyword cConstant BedSlopeXAnalysisEnum
+-syn keyword cConstant BedSlopeYAnalysisEnum
+ syn keyword cConstant DamageEvolutionSolutionEnum
+ syn keyword cConstant DamageEvolutionAnalysisEnum
+ syn keyword cConstant StressbalanceAnalysisEnum
+@@ -809,7 +831,6 @@
+ syn keyword cConstant StressbalanceSolutionEnum
+ syn keyword cConstant StressbalanceVerticalAnalysisEnum
+ syn keyword cConstant EnthalpyAnalysisEnum
+-syn keyword cConstant EnthalpySolutionEnum
+ syn keyword cConstant FlaimAnalysisEnum
+ syn keyword cConstant FlaimSolutionEnum
+ syn keyword cConstant HydrologyShreveAnalysisEnum
+@@ -821,11 +842,11 @@
+ syn keyword cConstant MasstransportSolutionEnum
+ syn keyword cConstant FreeSurfaceBaseAnalysisEnum
+ syn keyword cConstant FreeSurfaceTopAnalysisEnum
++syn keyword cConstant ExtrudeFromBaseAnalysisEnum
++syn keyword cConstant ExtrudeFromTopAnalysisEnum
+ syn keyword cConstant SteadystateSolutionEnum
+-syn keyword cConstant SurfaceSlopeAnalysisEnum
++syn keyword cConstant L2ProjectionTopAnalysisEnum
+ syn keyword cConstant SurfaceSlopeSolutionEnum
+-syn keyword cConstant SurfaceSlopeXAnalysisEnum
+-syn keyword cConstant SurfaceSlopeYAnalysisEnum
+ syn keyword cConstant SmoothedSurfaceSlopeXAnalysisEnum
+ syn keyword cConstant SmoothedSurfaceSlopeYAnalysisEnum
+ syn keyword cConstant ThermalAnalysisEnum
+@@ -869,11 +890,12 @@
+ syn keyword cConstant DoubleParamEnum
+ syn keyword cConstant DoubleVecParamEnum
+ syn keyword cConstant ElementEnum
+-syn keyword cConstant ElementResultEnum
+ syn keyword cConstant ExternalResultEnum
+ syn keyword cConstant FileParamEnum
+ syn keyword cConstant InputEnum
+ syn keyword cConstant IntInputEnum
++syn keyword cConstant InputToExtrudeEnum
++syn keyword cConstant InputToL2ProjectEnum
+ syn keyword cConstant IntParamEnum
+ syn keyword cConstant IntVecParamEnum
+ syn keyword cConstant TransientParamEnum
+@@ -1014,22 +1036,20 @@
+ syn keyword cConstant MINIcondensedEnum
+ syn keyword cConstant TaylorHoodEnum
+ syn keyword cConstant SaveResultsEnum
+-syn keyword cConstant BoolElementResultEnum
+ syn keyword cConstant BoolExternalResultEnum
+-syn keyword cConstant DoubleElementResultEnum
+ syn keyword cConstant DoubleExternalResultEnum
+ syn keyword cConstant DoubleMatExternalResultEnum
+ syn keyword cConstant IntExternalResultEnum
+ syn keyword cConstant JEnum
+-syn keyword cConstant PatchEnum
+-syn keyword cConstant PatchNodesEnum
+-syn keyword cConstant PatchVerticesEnum
+-syn keyword cConstant PentaP1ElementResultEnum
+ syn keyword cConstant StringExternalResultEnum
+ syn keyword cConstant StepEnum
+ syn keyword cConstant TimeEnum
+-syn keyword cConstant TriaP1ElementResultEnum
+ syn keyword cConstant WaterColumnOldEnum
++syn keyword cConstant OutputdefinitionEnum
++syn keyword cConstant OutputdefinitionListEnum
++syn keyword cConstant MassfluxatgateEnum
++syn keyword cConstant MassfluxatgateNameEnum
++syn keyword cConstant MassfluxatgateSegmentsEnum
+ syn keyword cConstant MinVelEnum
+ syn keyword cConstant MaxVelEnum
+ syn keyword cConstant MinVxEnum
+@@ -1089,6 +1109,7 @@
+ syn keyword cConstant XYZEnum
+ syn keyword cConstant DenseEnum
+ syn keyword cConstant MpiDenseEnum
++syn keyword cConstant MpiSparseEnum
+ syn keyword cConstant SeqEnum
+ syn keyword cConstant MpiEnum
+ syn keyword cConstant MumpsEnum
Index: issm/oecreview/Archive/16133-16554/ISSM-16548-16549.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16548-16549.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16548-16549.diff	(revision 16556)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vimrc
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 16548)
++++ ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 16549)
+@@ -154,8 +154,8 @@
+ set cindent
+ " and here some nice options for cindenting
+ set cinoptions={.5s,+.5s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 
+-" pound sign identation
+-inoremap # X<c-h>#
++" hash sign identation
++set cinkeys-=0#
+ " ----------------------------------------------------------------------}}}
+ " TEX special{{{
+ " ----------------------------------------------------------------------
Index: issm/oecreview/Archive/16133-16554/ISSM-16549-16550.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16549-16550.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16549-16550.diff	(revision 16556)
@@ -0,0 +1,197 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16549)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 16550)
+@@ -1,52 +0,0 @@
+-/*!\file: CreateDataSets
+- * \brief general driver for creating all datasets that make a finite element iomodel
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "../MeshPartitionx/MeshPartitionx.h"
+-#include "./ModelProcessorx.h"
+-
+-void CreateDataSets(Elements* elements,Nodes* nodes, Vertices* vertices, Materials* materials,Constraints* constraints, Loads* loads,Parameters* parameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_enum,const int analysis_enum,const int nummodels,int analysis_counter){
+-
+-	/*Creates Nodes and constraints datasets if empty*/
+-
+-	/*Now, branch onto analysis dependent model generation: */
+-	Analysis* analysis = EnumToAnalysis(analysis_enum);
+-	analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum);
+-	analysis->CreateNodes(nodes,iomodel);
+-	analysis->CreateConstraints(constraints,iomodel);
+-	analysis->CreateLoads(loads,iomodel);
+-	analysis->UpdateElements(elements,iomodel,analysis_counter,analysis_enum);
+-	delete analysis;
+-
+-	/*Update Elements and Materials For Inversions*/
+-	#ifdef _HAVE_CONTROL_
+-	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
+-	#endif
+-
+-	/*Update Elements and Materials For Dakota*/
+-	#ifdef _HAVE_DAKOTA_
+-	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
+-	#endif
+-
+-	/*Update Elements in case we are running a transient solution: */
+-	#ifdef _HAVE_TRANSIENT_
+-	if(analysis_counter==(nummodels-1)&& solution_enum==TransientSolutionEnum){
+-		UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_enum);
+-	}
+-	#endif
+-
+-	/* Update counters, because we have created more nodes, loads and
+-	 * constraints, and ids for objects created in next call to CreateDataSets
+-	 * will need to start at the end of the updated counters: */
+-	iomodel->nodecounter       = nodes->MaximumId();
+-	iomodel->loadcounter       = loads->NumberOfLoads();
+-	iomodel->constraintcounter = constraints->NumberOfConstraints();
+-}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 16549)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 16550)
+@@ -8,7 +8,7 @@
+ #include "../../MeshPartitionx/MeshPartitionx.h"
+ #include "../ModelProcessorx.h"
+ 
+-void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type){
++void	UpdateElementsTransient(Elements* elements, Parameters* parameters,IoModel* iomodel,int analysis_type){
+ 
+ 	bool isgroundingline;
+ 	parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16549)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 16550)
+@@ -12,9 +12,9 @@
+ #include "../../shared/shared.h"
+ #include "./ModelProcessorx.h"
+ 
+-void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_type_list){
++void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_enum_list){
+ 
+-	int   i,analysis_type,verbose;
++	int   i,analysis_enum,verbose;
+ 	bool  isthermal,ismasstransport,isstressbalance,isgroundingline,isenthalpy;
+ 
+ 	/*Initialize datasets*/
+@@ -52,31 +52,58 @@
+ 
+ 	for(i=0;i<nummodels;i++){
+ 
+-		analysis_type=analysis_type_list[i];
++		analysis_enum=analysis_enum_list[i];
+ 		parameters->AddObject(new IntParam(AnalysisCounterEnum,i));
+ 
+ 		/*Hack for trasient runs (FIXME: to be improved)*/
+-		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isthermal==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isthermal==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isthermal==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceVerticalAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_enum==TransientSolutionEnum && analysis_type==StressbalanceSIAAnalysisEnum && isstressbalance==false) continue;
+-		if(solution_enum==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_enum==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+-		if(solution_enum==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==ThermalAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==MeltingAnalysisEnum  && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==EnthalpyAnalysisEnum && iomodel->meshtype==Mesh2DhorizontalEnum) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==ThermalAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==MeltingAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==EnthalpyAnalysisEnum && isthermal==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==ThermalAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==MeltingAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==EnthalpyAnalysisEnum && isenthalpy==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==MasstransportAnalysisEnum && ismasstransport==false && isgroundingline==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==StressbalanceAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==StressbalanceVerticalAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==TransientSolutionEnum && analysis_enum==StressbalanceSIAAnalysisEnum && isstressbalance==false) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_enum==ThermalAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_enum==MeltingAnalysisEnum && isenthalpy==true) continue;
++		if(solution_enum==SteadystateSolutionEnum && analysis_enum==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+ 
+-		if(VerboseMProcessor()) _printf0_("   creating datasets for analysis " << EnumToStringx(analysis_type) << "\n");
+-		CreateDataSets(elements,nodes,vertices,materials,constraints,loads,parameters,iomodel,toolkitfile,rootpath,solution_enum,analysis_type,nummodels,i);
++		if(VerboseMProcessor()) _printf0_("   creating datasets for analysis " << EnumToStringx(analysis_enum) << "\n");
++		Analysis* analysis = EnumToAnalysis(analysis_enum);
++		analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum);
++		analysis->CreateNodes(nodes,iomodel);
++		analysis->CreateConstraints(constraints,iomodel);
++		analysis->CreateLoads(loads,iomodel);
++		analysis->UpdateElements(elements,iomodel,i,analysis_enum);
++		delete analysis;
++
++
++		/* Update counters, because we have created more nodes, loads and
++		 * constraints, and ids for objects created in next call to CreateDataSets
++		 * will need to start at the end of the updated counters: */
++		iomodel->nodecounter       = nodes->MaximumId();
++		iomodel->loadcounter       = loads->NumberOfLoads();
++		iomodel->constraintcounter = constraints->NumberOfConstraints();
+ 	}
+ 
++	/*Solution specific updates*/
++	#ifdef _HAVE_CONTROL_
++	UpdateElementsAndMaterialsControl(elements,materials,iomodel);
++	#endif
++	#ifdef _HAVE_DAKOTA_
++	UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
++	#endif
++	#ifdef _HAVE_TRANSIENT_
++	if(solution_enum==TransientSolutionEnum){
++		UpdateElementsTransient(elements,parameters,iomodel,analysis_enum);
++	}
++	#endif
++
+ 	/* Sort datasets:
+ 	 * All our datasets are already ordered by ids. Set presort flag so that
+ 	 * later on, when sorting is requested on these datasets, it will not be
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16549)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 16550)
+@@ -11,7 +11,6 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* iomodel_handle,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+ 
+ /*Creation of fem datasets: general drivers*/
+-void CreateDataSets(Elements* elements,Nodes* nodes,Vertices* vertices, Materials* materials, Constraints* constraints, Loads* loads,Parameters* parameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,int analysis_type,const int nummodels,int analysis_counter);
+ void CreateElementsVerticesAndMaterials(Elements* elements,Vertices* vertices,Materials* materials, IoModel* iomodel,const int nummodels);
+ void CreateParameters(Parameters*parameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type);
+ void CreateParametersAutodiff(Parameters* parameters,IoModel* iomodel);
+@@ -20,7 +19,7 @@
+ void CreateOutputDefinitions(Parameters* parameters,IoModel* iomodel);
+ void UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
+ void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
+-void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_counter,int analysis_type);
++void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_type);
+ void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,int approximation=NoneApproximationEnum);
+ 
+ /*partitioning: */
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 16549)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 16550)
+@@ -245,7 +245,6 @@
+ 					./modules/ModelProcessorx/NodesPartitioning.cpp\
+ 					./modules/ModelProcessorx/EdgesPartitioning.cpp\
+ 					./modules/ModelProcessorx/FacesPartitioning.cpp\
+-					./modules/ModelProcessorx/CreateDataSets.cpp\
+ 					./modules/ModelProcessorx/CreateParameters.cpp\
+ 					./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
+ 					./modules/ModelProcessorx/CreateFaces.cpp\
Index: issm/oecreview/Archive/16133-16554/ISSM-16550-16551.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16550-16551.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16550-16551.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 16550)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 16551)
+@@ -14,7 +14,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+-field_tolerances={1e-13,1.45e-10,1e-13};
++field_tolerances={1e-13,2e-10,1e-13};
+ field_values={...
+ 	(md.results.ThermalSolution.Enthalpy),...
+ 	(md.results.ThermalSolution.Waterfraction),...
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 16550)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 16551)
+@@ -30,7 +30,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Thickness','Bed','Surface','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-08,1e-08,1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-07,1e-07};
++field_tolerances={1e-08,1e-08,1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-07,2e-07};
+ field_values={...
+ 	(md.results.TransientSolution(end).Vx),...
+ 	(md.results.TransientSolution(end).Vy),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16551-16552.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16551-16552.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16551-16552.diff	(revision 16556)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/IdToName.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16551)
++++ ../trunk-jpl/test/NightlyRun/IdToName.m	(revision 16552)
+@@ -170,6 +170,7 @@
+ 	case 612, name='79NorthCMBalThic2dDG';
+ 	case 613, name='79NorthCMBalThicVxVy';
+ 	case 701, name='FlowbandFSshelf';
++	case 702, name='FlowbandFSsheetshelf';
+ 	case 1101, name='ISMIPAHO';
+ 	case 1102, name='ISMIPAFS';
+ 	case 1103, name='ISMIPBHO';
Index: issm/oecreview/Archive/16133-16554/ISSM-16552-16553.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16552-16553.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16552-16553.diff	(revision 16556)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test702.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test702.m	(revision 16552)
++++ ../trunk-jpl/test/NightlyRun/test702.m	(revision 16553)
+@@ -45,7 +45,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.StressbalanceSolution.Vx),...
+ 	(md.results.StressbalanceSolution.Vy),...
Index: issm/oecreview/Archive/16133-16554/ISSM-16553-16554.diff
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-16553-16554.diff	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-16553-16554.diff	(revision 16556)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 16553)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 16554)
+@@ -24,7 +24,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+-field_tolerances=[1e-13,1.45e-10,1e-13]
++field_tolerances=[1e-13,2e-10,1e-13]
+ field_values=[\
+ 	md.results.ThermalSolution.Enthalpy,\
+ 	md.results.ThermalSolution.Waterfraction,\
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 16553)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 16554)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-07,1e-07,2e-05,1e-07,2e-07]
++field_tolerances=[2e-07,1e-07,2e-05,1e-07,2e-07]
+ field_values=[\
+ 	md.results.StressbalanceSolution.Vx,\
+ 	md.results.StressbalanceSolution.Vy,\
Index: issm/oecreview/Archive/16133-16554/ISSM-DocReview-16133-16554.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/ISSM-DocReview-16133-16554.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/ISSM-DocReview-16133-16554.tex	(revision 16556)
@@ -0,0 +1,67 @@
+\documentclass[]{report}   % list options between brackets
+\usepackage{graphicx}              % list packages between braces
+
+% type user-defined commands here
+
+\begin{document}
+
+\title{JPL EXPORT ADMINISTRATION \\ DOCUMENT REVIEW RECORD}   % type title between braces
+\author{Tom Scavo}         % type author(s) between braces
+\date{October 27, 1995}    % type date between braces
+%\maketitle
+
+
+\begin{center}
+\begin{tabular}{ |c|c| }
+\hline
+JPL EXPORT ADMINISTRATION \\
+\textit{ DOCUMENT REVIEW RECORD} \\
+\hline
+\end{tabular}
+\end{center}
+
+\hfill Log \#: \underline{\input{LogNumber}}
+
+\vspace{1cm}
+\noindent (Note: This form and process do not replace the procedures described in JPL Policy relating to review and approval of proposals and contractual 
+documents. This process is intended to document the review and coordination of requests to ascertain the export control ramifications relating to specific 
+documents. Export Administration signature does not convey authority to export or release the "Exporter of Record" from any export laws or regulations.)\\
+
+\noindent \textbf{Program:} \underline{ISSM: Ice Sheet System Model} \\ \\
+\noindent \textbf{Person Requesting or Initiating Export}: \underline{Dr. Eric Larour}\\ \\
+\noindent \textbf{Date Received}: \underline{\input{Date}}\\ \\
+\noindent \textbf{Document Title/Description}: ISSM changes from revision \input{r1} to revision \input{r2} \\ \\
+\noindent \textbf{Release to:} \underline{http://issm.ess.uci.edu/svn/issm/issm/trunk on ISSM svn repository}\\ \\
+\noindent \textbf{JPL Intranet:} \underline{murdo.jpl.nasa.gov/proj/ice/larour/issm-uci/trunk-jpl}\\ \\
+
+\noindent \textbf{Disposition: 6 } 
+Does not contain export-controlled information. May be released/disclosed as requested subject to 
+Company guidelines on protection of proprietary information (if applicable). \\
+
+\noindent \textbf{Comments:}  see table of changes below. \\ \\
+\noindent \textbf{Reviewed by ISSM Export Transfer Liaison:} Dr. Eric Larour \hfill \textbf{Date:} \input{Date} \\ 
+\includegraphics[scale=1]{signature}
+
+\noindent JPL Export Administration Form TBS – June 29, 2011
+
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+\noindent \textbf{Disposition:} \\
+1:	  Public Domain Information (Ref ITAR Section 120.11) \\
+2:	  Qualifies for ITAR Exemption				 \\
+3:	  Covered by Department of State License/Agreement Number					  \\
+4:	  Covered by Department of Commerce validated license or exception				 \\
+5:	  New License Required \\
+6:	  Does not contain export-controlled information.  May be released/disclosed as requested subject
+   to Company guidelines on protection of proprietary information (if applicable). \\
+7:	 Other (specify)   
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+
+\input{log}
+
+\end{document}
Index: issm/oecreview/Archive/16133-16554/LogNumber.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/LogNumber.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/LogNumber.tex	(revision 16556)
@@ -0,0 +1,1 @@
+16133-16554
Index: issm/oecreview/Archive/16133-16554/Makefile
===================================================================
--- issm/oecreview/Archive/16133-16554/Makefile	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/Makefile	(revision 16556)
@@ -0,0 +1,8 @@
+TARGET=ISSM-DocReview-16133-16554
+
+all: 
+	pdflatex -interaction=errorstopmode -file-line-error -halt-on-error $(TARGET).tex
+	rm -rf *.log *.aux 
+
+clean:
+	rm -rf *.log *.aux
Index: issm/oecreview/Archive/16133-16554/log.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/log.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/log.tex	(revision 16556)
@@ -0,0 +1,2919 @@
+\noindent \textbf{Change \#1} with diff file ISSM-16133-16134.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: updating version number before sync\\
+\vspace{3em}
+
+\noindent \textbf{Change \#2} with diff file ISSM-16136-16137.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/externalpackages/scipy/install-macosx-lion.sh M /issm/trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh M /issm/trunk-jpl/externalpackages/scipy/install-macosx-snowleopard.sh\\
+Export determination: 6. \\
+Rationale: merged trunk and trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#3} with diff file ISSM-16138-16139.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/src M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: Block revision 16137 from being merged into trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#4} with diff file ISSM-16139-16140.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/dox/issm.dox\\
+Export determination: 6. \\
+Rationale: CHG: updating number of lines of code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#5} with diff file ISSM-16140-16141.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h\\
+Export determination: 6. \\
+Rationale: BUG: fixed inconsistent header file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#6} with diff file ISSM-16141-16142.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx M /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/SystemMatricesx M /issm/trunk-jpl/src/c/shared/MemOps A /issm/trunk-jpl/test/NightlyRun/testad.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing memory leaks when running gsl adjoint solutions. Getting also svn to ignore some files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#7} with diff file ISSM-16142-16143.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.h M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/GslEnum.m A /issm/trunk-jpl/src/m/enum/MumpsEnum.m M /issm/trunk-jpl/src/m/solvers/issmsolver.m M /issm/trunk-jpl/src/m/solvers/issmsolver.py M /issm/trunk-jpl/test/NightlyRun/testad.m\\
+Export determination: 6. \\
+Rationale: CHG: added new type of matrix solver type, which allows us to make run time decisions on the type of package we use to solve our matrix systems.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#8} with diff file ISSM-16143-16144.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#9} with diff file ISSM-16144-16145.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IndependentObject.cpp M /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp M /issm/trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp M /issm/trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp M /issm/trunk-jpl/src/c/shared/MemOps/MemOps.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/issmmpi.h M /issm/trunk-jpl/src/m/classes/snowpack.m M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/src/m/exp/Shp2Exp.m M /issm/trunk-jpl/src/wrappers/python/include/wrapper\_macros.h\\
+Export determination: 6. \\
+Rationale: CHG: removed double blank lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#10} with diff file ISSM-16145-16146.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with normal orientation initialization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#11} with diff file ISSM-16146-16147.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py M /issm/trunk-jpl/src/m/classes/matdamageice.m M /issm/trunk-jpl/src/m/classes/matdamageice.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m A /issm/trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m M /issm/trunk-jpl/test/Archives/Archive272.nc M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py\\
+Export determination: 6. \\
+Rationale: CHG: switched damage representation from Z to D=(1-Z). Z is now 1/(1-D) instead of the original (1-D). which was incorrectly (on purpose) named.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#12} with diff file ISSM-16147-16148.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: refixed problem with normal =\_orientation initialization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#13} with diff file ISSM-16148-16149.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py M /issm/trunk-jpl/src/m/classes/matdamageice.m M /issm/trunk-jpl/src/m/classes/matdamageice.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MaterialsDamageDEnum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test274.m\\
+Export determination: 6. \\
+Rationale: CHG: changed field rheology\_D to damage\_D.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#14} with diff file ISSM-16149-16150.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp M /issm/trunk-jpl/src/c/classes/Params/IntMatParam.cpp M /issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp M /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#15} with diff file ISSM-16150-16151.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/cppcheck.sh\\
+Export determination: 6. \\
+Rationale: CHG: improving cppcheck script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#16} with diff file ISSM-16151-16152.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#17} with diff file ISSM-16152-16153.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/shared/Bamg/HeapSort.h M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h M /issm/trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp M /issm/trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp M /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#18} with diff file ISSM-16153-16154.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: added break statements after each case\\
+\vspace{3em}
+
+\noindent \textbf{Change \#19} with diff file ISSM-16154-16155.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.py\\
+Export determination: 6. \\
+Rationale: BUG: missed a couple changes to python tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#20} with diff file ISSM-16155-16156.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h\\
+Export determination: 6. \\
+Rationale: NEW: use char* instead of string in ErrorException\\
+\vspace{3em}
+
+\noindent \textbf{Change \#21} with diff file ISSM-16156-16157.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: NEW: fixed cppcheck crash\\
+\vspace{3em}
+
+\noindent \textbf{Change \#22} with diff file ISSM-16157-16158.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/matdamageice.m M /issm/trunk-jpl/src/m/classes/matdamageice.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m A /issm/trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed wrong enums MaterialsDamagec...Enum.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#23} with diff file ISSM-16158-16159.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp M /issm/trunk-jpl/src/c/analyses/dakota\_core.cpp M /issm/trunk-jpl/src/c/analyses/gia\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp M /issm/trunk-jpl/src/c/bamg/Direction.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/toolkits/issm/Bucket.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h\\
+Export determination: 6. \\
+Rationale: CHG: cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#24} with diff file ISSM-16159-16160.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: missing int i\\
+\vspace{3em}
+
+\noindent \textbf{Change \#25} with diff file ISSM-16160-16161.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/matdamageice.m M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: NEW: starting to implement a damage class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#26} with diff file ISSM-16161-16162.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test274.m\\
+Export determination: 6. \\
+Rationale: BUG: forgot to set flag for damage\\
+\vspace{3em}
+
+\noindent \textbf{Change \#27} with diff file ISSM-16162-16163.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/damage.m A /issm/trunk-jpl/src/m/classes/damage.py M /issm/trunk-jpl/src/m/classes/matdamageice.m M /issm/trunk-jpl/src/m/classes/matdamageice.py M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/dev/devpath.py A /issm/trunk-jpl/src/m/enum/DamageC1Enum.m A /issm/trunk-jpl/src/m/enum/DamageC2Enum.m A /issm/trunk-jpl/src/m/enum/DamageC3Enum.m A /issm/trunk-jpl/src/m/enum/DamageC4Enum.m A /issm/trunk-jpl/src/m/enum/DamageDEnum.m A /issm/trunk-jpl/src/m/enum/DamageDbarEnum.m A /issm/trunk-jpl/src/m/enum/DamageIsdamageEnum.m A /issm/trunk-jpl/src/m/enum/DamageLawEnum.m A /issm/trunk-jpl/src/m/enum/DamageStressThresholdEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/MaterialsDamageC1Enum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageC2Enum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageC3Enum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageC4Enum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageDEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageDbarEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageLawEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsDamageStressThresholdEnum.m M /issm/trunk-jpl/src/m/exp/expwrite.m M /issm/trunk-jpl/src/m/plot/applyoptions.py\\
+Export determination: 6. \\
+Rationale: CHG: working toward damage class implementation. As long as md.damage.isdamage flag is set to zero, all NR should ignore damage and run okay\\
+\vspace{3em}
+
+\noindent \textbf{Change \#28} with diff file ISSM-16163-16164.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.py\\
+Export determination: 6. \\
+Rationale: BUG: only marshall and checkconsistency for damage fields if isdamage=1\\
+\vspace{3em}
+
+\noindent \textbf{Change \#29} with diff file ISSM-16164-16165.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp M /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp M /issm/trunk-jpl/src/c/main/kriging.cpp M /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp M /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp M /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp M /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp M /issm/trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp M /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp M /issm/trunk-jpl/src/c/modules/GiaDeflectionCorex/GiaDeflectionCorex.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp M /issm/trunk-jpl/src/c/shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#30} with diff file ISSM-16165-16166.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: always define NUMTHREADS\_VALUE even if threading is disabled (default value is 1 anyway)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#31} with diff file ISSM-16166-16167.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cppcheck errors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#32} with diff file ISSM-16167-16168.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp D /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp D /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py D /issm/trunk-jpl/src/m/classes/matdamageice.m D /issm/trunk-jpl/src/m/classes/matdamageice.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/MatdamageiceEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsRheologyZEnum.m D /issm/trunk-jpl/src/m/enum/MaterialsRheologyZbarEnum.m M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/Par/79North.par M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/GiaBenchmarksAB.par M /issm/trunk-jpl/test/Par/GiaBenchmarksCD.par M /issm/trunk-jpl/test/Par/ISMIPA.par M /issm/trunk-jpl/test/Par/ISMIPA.py M /issm/trunk-jpl/test/Par/ISMIPB.par M /issm/trunk-jpl/test/Par/ISMIPB.py M /issm/trunk-jpl/test/Par/ISMIPC.par M /issm/trunk-jpl/test/Par/ISMIPC.py M /issm/trunk-jpl/test/Par/ISMIPD.par M /issm/trunk-jpl/test/Par/ISMIPD.py M /issm/trunk-jpl/test/Par/ISMIPE.par M /issm/trunk-jpl/test/Par/ISMIPE.py M /issm/trunk-jpl/test/Par/ISMIPF.par M /issm/trunk-jpl/test/Par/ISMIPF.py M /issm/trunk-jpl/test/Par/Pig.par M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.par M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.py M /issm/trunk-jpl/test/Par/SquareEISMINT.par M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.par M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: CHG: switched off Matdamageice. Damange D and rheology B are now equally treated in the material Matice. Adjusted all control methods and parameter files accordingly.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#33} with diff file ISSM-16168-16169.diff: \\
+Function name: \\
+M /issm/trunk-jpl/examples/Jakobshavn/Jks.par M /issm/trunk-jpl/examples/SquareIceShelf/Square.par\\
+Export determination: 6. \\
+Rationale: CHG: fixed tutorials\\
+\vspace{3em}
+
+\noindent \textbf{Change \#34} with diff file ISSM-16169-16170.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed I am here\\
+\vspace{3em}
+
+\noindent \textbf{Change \#35} with diff file ISSM-16170-16171.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/ISMIPA.py M /issm/trunk-jpl/test/Par/ISMIPB.py M /issm/trunk-jpl/test/Par/ISMIPC.py M /issm/trunk-jpl/test/Par/ISMIPD.py M /issm/trunk-jpl/test/Par/ISMIPE.py M /issm/trunk-jpl/test/Par/ISMIPF.py M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/RoundSheetEISMINT.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.py M /issm/trunk-jpl/test/Par/RoundSheetStaticEISMINT.py M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: BUG: numpy handle needed to call zeros function. Also cleaned up the import Archive Forms oecreview.sh TEMP Template commands since we're almost always only importing a single function within a module of the same name.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#36} with diff file ISSM-16171-16172.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.py\\
+Export determination: 6. \\
+Rationale: BUG: missed some numpy handles for function calls\\
+\vspace{3em}
+
+\noindent \textbf{Change \#37} with diff file ISSM-16172-16173.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/EnvironmentInit.cpp A /issm/trunk-jpl/src/m/dev/issmversion.m M /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added issmversion to display current version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#38} with diff file ISSM-16173-16174.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: NEW: added issmversion to display current version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#39} with diff file ISSM-16174-16175.diff: \\
+Function name: \\
+D /issm/trunk-jpl/config.sub\\
+Export determination: 6. \\
+Rationale: DEL: not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#40} with diff file ISSM-16175-16176.diff: \\
+Function name: \\
+D /issm/trunk-jpl/config.guess\\
+Export determination: 6. \\
+Rationale: DEL: not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#41} with diff file ISSM-16176-16177.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/dev/issmversion.py\\
+Export determination: 6. \\
+Rationale: NEW: added issmversion.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#42} with diff file ISSM-16177-16178.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: safer to convert string to char*\\
+\vspace{3em}
+
+\noindent \textbf{Change \#43} with diff file ISSM-16178-16179.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.py\\
+Export determination: 6. \\
+Rationale: CHG: marshall D in damage class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#44} with diff file ISSM-16179-16180.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/damage.py\\
+Export determination: 6. \\
+Rationale: CHG: class does not need to be passed to WriteData unless the class name is different\\
+\vspace{3em}
+
+\noindent \textbf{Change \#45} with diff file ISSM-16180-16181.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: BUG: wrong function name in verbose import\\
+\vspace{3em}
+
+\noindent \textbf{Change \#46} with diff file ISSM-16181-16182.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h A /issm/trunk-jpl/src/c/analyses/damage\_core.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/.dirstamp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsDamage.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateConstraintsMasstransport.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsDamage.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateLoadsMasstransport.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesDamage.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateNodesMasstransport.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/CreateParametersDamage.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsDamage.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/UpdateElementsMasstransport.Plo A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateConstraintsDamage.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateConstraintsMasstransport.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateLoadsDamage.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateLoadsMasstransport.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateNodesDamage.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateNodesMasstransport.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-CreateParametersDamage.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-UpdateElementsDamage.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMCore\_a-UpdateElementsMasstransport.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateConstraintsDamage.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateConstraintsMasstransport.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateLoadsDamage.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateLoadsMasstransport.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateNodesDamage.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateNodesMasstransport.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-CreateParametersDamage.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-UpdateElementsDamage.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps/libISSMRose\_a-UpdateElementsMasstransport.r2cpp.Po A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.dirstamp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateConstraintsDamage.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateNodesDamage.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m A /issm/trunk-jpl/src/m/enum/DamageEvolutionAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/DamageEvolutionSolutionEnum.m A /issm/trunk-jpl/src/m/enum/DamageHealingEnum.m D /issm/trunk-jpl/src/m/enum/DamageIsdamageEnum.m A /issm/trunk-jpl/src/m/enum/DamageSpcdamageEnum.m A /issm/trunk-jpl/src/m/enum/DamageStabilizationEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/QmuDamageDEnum.m A /issm/trunk-jpl/src/m/enum/TransientIsdamageEnum.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.m M /issm/trunk-jpl/test/NightlyRun/IdToName.m A /issm/trunk-jpl/test/NightlyRun/test271.m\\
+Export determination: 6. \\
+Rationale: NEW: hooked up damage core into ISSM, created 271 solution to start running it. More remains to be done inside the damage\_core to hook up to the Element Tria CreateKMatrix and CreatePVector.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#47} with diff file ISSM-16182-16183.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp D /issm/trunk-jpl/src/wrappers/ContourToMesh/.deps D /issm/trunk-jpl/src/wrappers/ContourToMesh/.dirstamp D /issm/trunk-jpl/src/wrappers/ContourToNodes/.dirstamp\\
+Export determination: 6. \\
+Rationale: CHG: removing some autotools files that should not be under svn\\
+\vspace{3em}
+
+\noindent \textbf{Change \#48} with diff file ISSM-16183-16184.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.deps D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/.dirstamp\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore .deps and .dirstamp files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#49} with diff file ISSM-16184-16185.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: InputCreate should not cast DoubleInput to int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#50} with diff file ISSM-16185-16186.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmstssh.m M /issm/trunk-jpl/src/m/os/starcluster.m\\
+Export determination: 6. \\
+Rationale: BUG: fix location of CloudComputing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#51} with diff file ISSM-16186-16187.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed InputCreate which was doing the same thing as InputUpdateFromConstant\\
+\vspace{3em}
+
+\noindent \textbf{Change \#52} with diff file ISSM-16187-16188.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: forgot to set damage spcs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#53} with diff file ISSM-16188-16189.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/damage\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h A /issm/trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp A /issm/trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp D /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/UpdateElementsDamage.cpp A /issm/trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp A /issm/trunk-jpl/src/c/solutionsequences/solutionsequence\_damage\_nonlinear.cpp M /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/thermal.m A /issm/trunk-jpl/src/m/enum/DamageMaxDamageEnum.m A /issm/trunk-jpl/src/m/enum/DamageMaxiterEnum.m A /issm/trunk-jpl/src/m/enum/DamagePenaltyFactorEnum.m A /issm/trunk-jpl/src/m/enum/DamagePenaltyLockEnum.m A /issm/trunk-jpl/src/m/enum/DamagePenaltyThresholdEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/test/NightlyRun/test271.m\\
+Export determination: 6. \\
+Rationale: CHG: finished putting together damage evolution framework. Need validation, verification.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#54} with diff file ISSM-16189-16190.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive271.nc M /issm/trunk-jpl/test/NightlyRun/test271.m\\
+Export determination: 6. \\
+Rationale: CHG: activating test 271\\
+\vspace{3em}
+
+\noindent \textbf{Change \#55} with diff file ISSM-16190-16191.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: BUG: forgot to include spcdamage in extrude function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#56} with diff file ISSM-16191-16192.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/solvers/issmgslsolver.m A /issm/trunk-jpl/src/m/solvers/issmgslsolver.py A /issm/trunk-jpl/src/m/solvers/issmmumpssolver.m (from /issm/trunk-jpl/src/m/solvers/issmsolver.m:16190) A /issm/trunk-jpl/src/m/solvers/issmmumpssolver.py (from /issm/trunk-jpl/src/m/solvers/issmsolver.py:16190) D /issm/trunk-jpl/src/m/solvers/issmsolver.m D /issm/trunk-jpl/src/m/solvers/issmsolver.py\\
+Export determination: 6. \\
+Rationale: CHG: adding gsl and mumps issm solvers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#57} with diff file ISSM-16192-16193.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/m/classes/toolkits.m M /issm/trunk-jpl/src/m/classes/toolkits.py M /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test3019.py\\
+Export determination: 6. \\
+Rationale: CHG: adjusted adolc tests to work only with gsl. Also added \_HAVE\_GSL\_ as config flag detectable by IssmConfig wrapper. Finally, created some new src/m/solvers to setup issm mumps and gsl solvers.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#58} with diff file ISSM-16193-16194.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test3020.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed issue with solver used for test 3019 and 3020\\
+\vspace{3em}
+
+\noindent \textbf{Change \#59} with diff file ISSM-16194-16195.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py M /issm/trunk-jpl/test/NightlyRun/runme.m M /issm/trunk-jpl/test/NightlyRun/runme.py A /issm/trunk-jpl/test/NightlyRun/test3101.m A /issm/trunk-jpl/test/NightlyRun/test3101.py A /issm/trunk-jpl/test/NightlyRun/test3102.m A /issm/trunk-jpl/test/NightlyRun/test3102.py A /issm/trunk-jpl/test/NightlyRun/test3103.m A /issm/trunk-jpl/test/NightlyRun/test3103.py A /issm/trunk-jpl/test/NightlyRun/test3104.m A /issm/trunk-jpl/test/NightlyRun/test3104.py A /issm/trunk-jpl/test/NightlyRun/test3105.m A /issm/trunk-jpl/test/NightlyRun/test3105.py A /issm/trunk-jpl/test/NightlyRun/test3106.m A /issm/trunk-jpl/test/NightlyRun/test3106.py A /issm/trunk-jpl/test/NightlyRun/test3107.m A /issm/trunk-jpl/test/NightlyRun/test3107.py A /issm/trunk-jpl/test/NightlyRun/test3108.m A /issm/trunk-jpl/test/NightlyRun/test3108.py A /issm/trunk-jpl/test/NightlyRun/test3109.m A /issm/trunk-jpl/test/NightlyRun/test3109.py A /issm/trunk-jpl/test/NightlyRun/test3110.m A /issm/trunk-jpl/test/NightlyRun/test3110.py A /issm/trunk-jpl/test/NightlyRun/test3115.m A /issm/trunk-jpl/test/NightlyRun/test3115.py A /issm/trunk-jpl/test/NightlyRun/test3119.m A /issm/trunk-jpl/test/NightlyRun/test3119.py A /issm/trunk-jpl/test/NightlyRun/test3120.m A /issm/trunk-jpl/test/NightlyRun/test3120.py\\
+Export determination: 6. \\
+Rationale: NEW: added new adolc tests, using the mumps solver.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#60} with diff file ISSM-16195-16196.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m M /issm/trunk-jpl/test/NightlyRun/runme.py M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/testad.m\\
+Export determination: 6. \\
+Rationale: CHG: unhooking ampi tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#61} with diff file ISSM-16196-16197.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3019.m\\
+Export determination: 6. \\
+Rationale: CHG: reverting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#62} with diff file ISSM-16197-16198.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: temporary fix, all penalty models use the same modules, which will be renamed later today\\
+\vspace{3em}
+
+\noindent \textbf{Change \#63} with diff file ISSM-16198-16199.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.m M /issm/trunk-jpl/src/m/classes/damage.py M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: CHG: merged matlab changes to python for damage model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#64} with diff file ISSM-16199-16200.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: CHG: augmenting range of adolc runs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#65} with diff file ISSM-16200-16201.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateLoadsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateLoadsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cpperrors and simplifying COnstraintState (to be continued)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#66} with diff file ISSM-16201-16202.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed serious bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#67} with diff file ISSM-16202-16203.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/test3115.m D /issm/trunk-jpl/test/NightlyRun/test3115.py M /issm/trunk-jpl/test/NightlyRun/test3119.m M /issm/trunk-jpl/test/NightlyRun/test3119.py D /issm/trunk-jpl/test/NightlyRun/test3120.m D /issm/trunk-jpl/test/NightlyRun/test3120.py\\
+Export determination: 6. \\
+Rationale: CHG: took out tests that dependend on fos\_forward driver\\
+\vspace{3em}
+
+\noindent \textbf{Change \#68} with diff file ISSM-16203-16204.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive3101.nc A /issm/trunk-jpl/test/Archives/Archive3102.nc A /issm/trunk-jpl/test/Archives/Archive3103.nc A /issm/trunk-jpl/test/Archives/Archive3104.nc A /issm/trunk-jpl/test/Archives/Archive3105.nc A /issm/trunk-jpl/test/Archives/Archive3106.nc A /issm/trunk-jpl/test/Archives/Archive3107.nc A /issm/trunk-jpl/test/Archives/Archive3108.nc A /issm/trunk-jpl/test/Archives/Archive3109.nc A /issm/trunk-jpl/test/Archives/Archive3110.nc A /issm/trunk-jpl/test/Archives/Archive3119.nc\\
+Export determination: 6. \\
+Rationale: CHG: arhcives to adolc ampi tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#69} with diff file ISSM-16204-16205.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adjoinablempi\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#70} with diff file ISSM-16205-16206.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive3101.nc M /issm/trunk-jpl/test/Archives/Archive3102.nc M /issm/trunk-jpl/test/Archives/Archive3103.nc M /issm/trunk-jpl/test/Archives/Archive3104.nc M /issm/trunk-jpl/test/Archives/Archive3105.nc M /issm/trunk-jpl/test/Archives/Archive3106.nc M /issm/trunk-jpl/test/Archives/Archive3107.nc M /issm/trunk-jpl/test/Archives/Archive3108.nc M /issm/trunk-jpl/test/Archives/Archive3109.nc M /issm/trunk-jpl/test/Archives/Archive3110.nc M /issm/trunk-jpl/test/Archives/Archive3119.nc\\
+Export determination: 6. \\
+Rationale: CHG: new archives for ad ampi tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#71} with diff file ISSM-16206-16207.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h D /issm/trunk-jpl/src/c/modules/ConstraintsStatex/DamageConstraintsState.cpp D /issm/trunk-jpl/src/c/modules/ConstraintsStatex/PengridIsPresent.cpp D /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp D /issm/trunk-jpl/src/c/modules/ResetConstraintsx/DamageConstraintsReset.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h D /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ThermalConstraintsReset.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simplifying ConstraintState modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#72} with diff file ISSM-16207-16208.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/RoundSheetShelf.par M /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: BUG: fixing tests 423 and 433\\
+\vspace{3em}
+
+\noindent \textbf{Change \#73} with diff file ISSM-16208-16209.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h\\
+Export determination: 6. \\
+Rationale: CHG: simplifying InputCreate\\
+\vspace{3em}
+
+\noindent \textbf{Change \#74} with diff file ISSM-16209-16210.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h\\
+Export determination: 6. \\
+Rationale: CHG: defaulting in InputCreate is now explicit, to avoid default 0. values if not found\\
+\vspace{3em}
+
+\noindent \textbf{Change \#75} with diff file ISSM-16210-16211.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/UpdateElementsStressbalanceSIA.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp\\
+Export determination: 6. \\
+Rationale: BUG: HydrostaticRation is only required for Qmu analysis\\
+\vspace{3em}
+
+\noindent \textbf{Change \#76} with diff file ISSM-16211-16212.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp\\
+Export determination: 6. \\
+Rationale: CHG: bathymtry only required in transients of isgrounding line. Meltrate correction defaults is 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#77} with diff file ISSM-16212-16213.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: CHG: temporary fix for inversions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#78} with diff file ISSM-16213-16214.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: typo in print statement\\
+\vspace{3em}
+
+\noindent \textbf{Change \#79} with diff file ISSM-16214-16215.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/damage\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp\\
+Export determination: 6. \\
+Rationale: CHG: rather than use penalties, enforce limits on damage in InputUpdateFromSolutionDamageEvolution. As a result, the damage\_core only needs to call solutionsequence\_linear\\
+\vspace{3em}
+
+\noindent \textbf{Change \#80} with diff file ISSM-16215-16216.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reorg of qmu variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#81} with diff file ISSM-16216-16217.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/QmuMaskGroundediceLevelsetEnum.m A /issm/trunk-jpl/src/m/enum/QmuMaskIceLevelsetEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: add qmu for levelset\\
+\vspace{3em}
+
+\noindent \textbf{Change \#82} with diff file ISSM-16217-16218.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: BUG: or is || in C\\
+\vspace{3em}
+
+\noindent \textbf{Change \#83} with diff file ISSM-16218-16219.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateLoadsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/modules/Scotchx/Scotchx.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp M /issm/trunk-jpl/src/m/classes/damage.m\\
+Export determination: 6. \\
+Rationale: CHG: cleaning up updateelements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#84} with diff file ISSM-16219-16220.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/enthalpy\_core.cpp M /issm/trunk-jpl/src/c/analyses/hydrology\_core.cpp M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp M /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h\\
+Export determination: 6. \\
+Rationale: CHG: simplifying InputDuplicatex prototype\\
+\vspace{3em}
+
+\noindent \textbf{Change \#85} with diff file ISSM-16220-16221.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp\\
+Export determination: 6. \\
+Rationale: CHG include needed for sprintf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#86} with diff file ISSM-16221-16222.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed memory leak in DamageEvolution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#87} with diff file ISSM-16222-16223.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateParametersDamage.cpp\\
+Export determination: 6. \\
+Rationale: CHG: memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#88} with diff file ISSM-16223-16224.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added defaults for vx and vy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#89} with diff file ISSM-16224-16225.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1502.m\\
+Export determination: 6. \\
+Rationale: BUG: metis seg faults when there are too few elements to partition\\
+\vspace{3em}
+
+\noindent \textbf{Change \#90} with diff file ISSM-16225-16226.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test422.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#91} with diff file ISSM-16226-16227.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: do not compile Scotchx and Chacox if not present\\
+\vspace{3em}
+
+\noindent \textbf{Change \#92} with diff file ISSM-16227-16228.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/SquareThermal.par\\
+Export determination: 6. \\
+Rationale: BUG: fixed typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#93} with diff file ISSM-16228-16229.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/SetOfE4.cpp M /issm/trunk-jpl/src/c/bamg/SetOfE4.h M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h D /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp D /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: DEL: removed some legacy code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#94} with diff file ISSM-16229-16230.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG revert for this file only the change done with 16201 - as discussed with Eric - it is likely inappropriate to use the counts of indepedents and dependents to control the logic when e.g. in IoModel.cpp there is this->FetchData(\&autodiff,AutodiffIsautodiffEnum); if(autodiff) etc, Also, removing the guard right now causes the logic to fail for the parallel adjoint because in fact only on rank 0 have explicit dependent and independent designation been made and that needs to be reflected exactly on the falls to the Adol-C tape interpreters. Without the guard these interpreters complain (legitimatly) like this: ADOL-C error: Reverse sweep on tape 2 aborted! Number of dependents(1) and/or independents(91) variables passed to reverse is inconsistent with number recorded on tape(0/0)! ADOL-C error: Reverse sweep on tape 1 aborted! Number of dependents(1) and/or independents(91) variables passed to reverse is inconsistent with number recorded on tape(0/0)!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#95} with diff file ISSM-16230-16231.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/include/wrapper\_macros.h M /issm/trunk-jpl/src/wrappers/python/include/wrapper\_macros.h\\
+Export determination: 6. \\
+Rationale: CHG: no need to call exprintf\\
+\vspace{3em}
+
+\noindent \textbf{Change \#96} with diff file ISSM-16231-16232.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/bamg/Curve.cpp M /issm/trunk-jpl/src/c/bamg/Curve.h M /issm/trunk-jpl/src/c/bamg/GeomEdge.cpp M /issm/trunk-jpl/src/c/bamg/GeomEdge.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/bamg/Triangle.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/trimesh.h D /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp D /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: DEL: removed legacy code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#97} with diff file ISSM-16232-16233.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.cpp M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h D /issm/trunk-jpl/src/c/modules/OutputRiftsx\\
+Export determination: 6. \\
+Rationale: DEL: removed legacy code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#98} with diff file ISSM-16233-16234.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.cpp M /issm/trunk-jpl/src/c/bamg/AdjacentTriangle.h M /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp M /issm/trunk-jpl/src/c/bamg/BamgQuadtree.h M /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.h M /issm/trunk-jpl/src/c/bamg/Metric.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/bamg/Triangle.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.h M /issm/trunk-jpl/src/c/classes/Hook.cpp M /issm/trunk-jpl/src/c/classes/Hook.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/classes/Params/BoolParam.cpp M /issm/trunk-jpl/src/c/classes/Params/BoolParam.h M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp M /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/Params/FileParam.cpp M /issm/trunk-jpl/src/c/classes/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/Params/IntMatParam.cpp M /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/Params/IntParam.cpp M /issm/trunk-jpl/src/c/classes/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/Params/IntVecParam.cpp M /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/Params/MatrixParam.cpp M /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/Params/Param.h M /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp M /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/Params/StringParam.cpp M /issm/trunk-jpl/src/c/classes/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/Params/TransientParam.cpp M /issm/trunk-jpl/src/c/classes/Params/TransientParam.h M /issm/trunk-jpl/src/c/classes/Params/VectorParam.cpp M /issm/trunk-jpl/src/c/classes/Params/VectorParam.h M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h M /issm/trunk-jpl/src/c/kml/KML\_Object.cpp M /issm/trunk-jpl/src/c/kml/KML\_Object.h M /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp M /issm/trunk-jpl/src/c/shared/Matrix/matrix.h\\
+Export determination: 6. \\
+Rationale: DEL: removed legacy code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#99} with diff file ISSM-16234-16235.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/enum/AdjointSolutionEnum.m D /issm/trunk-jpl/src/m/enum/BasisIntegralEnum.m D /issm/trunk-jpl/src/m/enum/ConstantEnum.m D /issm/trunk-jpl/src/m/enum/DofIndexingEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/FSIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/HOIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/HookEnum.m D /issm/trunk-jpl/src/m/enum/IceFrontTypeEnum.m D /issm/trunk-jpl/src/m/enum/IcefrontEnum.m D /issm/trunk-jpl/src/m/enum/InversionVelObsEnum.m D /issm/trunk-jpl/src/m/enum/L1L2IceFrontEnum.m D /issm/trunk-jpl/src/m/enum/MaxPenetrationEnum.m D /issm/trunk-jpl/src/m/enum/NumberNodeToElementConnectivityEnum.m D /issm/trunk-jpl/src/m/enum/OptionCharEnum.m D /issm/trunk-jpl/src/m/enum/OptionDoubleEnum.m D /issm/trunk-jpl/src/m/enum/OptionLogicalEnum.m D /issm/trunk-jpl/src/m/enum/SSA2dIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/SSA3dIceFrontEnum.m D /issm/trunk-jpl/src/m/enum/StressbalanceIcefrontEnum.m D /issm/trunk-jpl/src/m/enum/TemperatureOldEnum.m D /issm/trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m\\
+Export determination: 6. \\
+Rationale: DEL: removing old enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#100} with diff file ISSM-16235-16236.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/Exp/exp.h\\
+Export determination: 6. \\
+Rationale: DEL: removing old enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#101} with diff file ISSM-16236-16237.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added default for hydrostaticratio\\
+\vspace{3em}
+
+\noindent \textbf{Change \#102} with diff file ISSM-16237-16238.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/bamg/Geometry.h M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/bamg/Metric.h M /issm/trunk-jpl/src/c/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/bamg/Triangle.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.h D /issm/trunk-jpl/src/c/modules/InputArtificialNoisex M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: DEL: removed unsued code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#103} with diff file ISSM-16238-16239.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: DEL: removed unsued code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#104} with diff file ISSM-16239-16240.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/cppcheck.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated cppcheck script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#105} with diff file ISSM-16240-16241.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving stressbalance specific parameters to CreateParametersStressbalance.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#106} with diff file ISSM-16241-16242.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1601.nc M /issm/trunk-jpl/test/Archives/Archive1602.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive now that there is a slope in the x direction\\
+\vspace{3em}
+
+\noindent \textbf{Change \#107} with diff file ISSM-16242-16243.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG fixing check + verbosing tape statistics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#108} with diff file ISSM-16243-16244.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/freetype M /issm/trunk-jpl/externalpackages/freetype/install.sh M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py A /issm/trunk-jpl/src/m/enum/AutodiffCbufsizeEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffLbufsizeEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffObufsizeEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffTbufsizeEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py\\
+Export determination: 6. \\
+Rationale: NEW: adding 4 buffer fields to autodiff capability.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#109} with diff file ISSM-16244-16245.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m\\
+Export determination: 6. \\
+Rationale: BUG: isautodiff field needed in class autodiff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#110} with diff file ISSM-16245-16246.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed isautodiff bad indentation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#111} with diff file ISSM-16246-16247.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/taoinversion.m\\
+Export determination: 6. \\
+Rationale: CHG: added conversion from taoinversion to inversion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#112} with diff file ISSM-16247-16248.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/plotoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: display last option before inconsistency\\
+\vspace{3em}
+
+\noindent \textbf{Change \#113} with diff file ISSM-16248-16249.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed gradient\_only option, use nsteps=0 instead\\
+\vspace{3em}
+
+\noindent \textbf{Change \#114} with diff file ISSM-16249-16250.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py M /issm/trunk-jpl/src/m/classes/taoinversion.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/InversionGradientOnlyEnum.m A /issm/trunk-jpl/src/m/enum/ThermalIsdynamicbasalspcEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: removed gradient\_only option, use nsteps=0 instead\\
+\vspace{3em}
+
+\noindent \textbf{Change \#115} with diff file ISSM-16250-16251.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/gslib/pkriging.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed pkriging for new marshalles enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#116} with diff file ISSM-16251-16252.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG hook call to experiment with controlling the location memory management\\
+\vspace{3em}
+
+\noindent \textbf{Change \#117} with diff file ISSM-16252-16253.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py A /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerMaxSizeEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffGcTriggerRatioEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py\\
+Export determination: 6. \\
+Rationale: CHG: added new parameters for garbage collection in autodiff mode\\
+\vspace{3em}
+
+\noindent \textbf{Change \#118} with diff file ISSM-16253-16254.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/m/classes/autodiff.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug that was precluding default parameter setting in the autodiff class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#119} with diff file ISSM-16254-16255.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug that was breaking the ad runs.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#120} with diff file ISSM-16255-16256.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: protecting thermal code in PostProcessingEnthalpyx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#121} with diff file ISSM-16256-16257.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: protecting mass transport code for autodiff mode.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#122} with diff file ISSM-16257-16258.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/exp/Shp2Exp.m A /issm/trunk-jpl/src/m/shp A /issm/trunk-jpl/src/m/shp/Shp2Exp.m (from /issm/trunk-jpl/src/m/exp/Shp2Exp.m:16256) A /issm/trunk-jpl/src/m/shp/shpdisp.m A /issm/trunk-jpl/src/m/shp/shpread.m\\
+Export determination: 6. \\
+Rationale: CHG: creating shp equivalent capabilities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#123} with diff file ISSM-16258-16259.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/shp/shpread.m\\
+Export determination: 6. \\
+Rationale: CHG: modified bamg to accept shape files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#124} with diff file ISSM-16259-16260.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mumps/MpiDenseMumpsSolve.cpp\\
+Export determination: 6. \\
+Rationale: CHG: don't verbose by default\\
+\vspace{3em}
+
+\noindent \textbf{Change \#125} with diff file ISSM-16260-16261.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG fix up the stats output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#126} with diff file ISSM-16261-16262.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG formatting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#127} with diff file ISSM-16262-16263.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG this produces acceptable output\\
+\vspace{3em}
+
+\noindent \textbf{Change \#128} with diff file ISSM-16263-16264.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG set buffer sizes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#129} with diff file ISSM-16264-16265.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m\\
+Export determination: 6. \\
+Rationale: CHG adolc defaults/checks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#130} with diff file ISSM-16265-16266.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: file cleanup\\
+\vspace{3em}
+
+\noindent \textbf{Change \#131} with diff file ISSM-16266-16267.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG partition is not even - we better show the info collected from all ranks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#132} with diff file ISSM-16267-16268.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG make the stats output compact\\
+\vspace{3em}
+
+\noindent \textbf{Change \#133} with diff file ISSM-16268-16269.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.py\\
+Export determination: 6. \\
+Rationale: CHG: trasnferring changes from the matlab class to the python class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#134} with diff file ISSM-16269-16270.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m\\
+Export determination: 6. \\
+Rationale: CHG: added hook up to use shape file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#135} with diff file ISSM-16270-16271.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-pleiades-ampi.sh A /issm/trunk-jpl/externalpackages/adjoinablempi/install-pleaides.sh A /issm/trunk-jpl/externalpackages/adolc/install-withampi-pleiades.sh\\
+Export determination: 6. \\
+Rationale: NEW: configuration for ampi adolc runs on pleiades.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#136} with diff file ISSM-16271-16272.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/materials/arrhenius.m\\
+Export determination: 6. \\
+Rationale: NEW: arrhenius.m allows to figure out the ice rigidity for given temperature, waterfraction and pressure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#137} with diff file ISSM-16272-16273.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: changed Penta::UpdateThermalBasalConstraints to Penta::UpdateBasalConstraintsEnthalpy and added ThermalIsdynamicbasalspcEnum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#138} with diff file ISSM-16273-16274.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: CHG: python should also marshall ThermalIsdynamicbasalspc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#139} with diff file ISSM-16274-16275.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: CHG: python should also marshall ThermalIsdynamicbasalspc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#140} with diff file ISSM-16275-16276.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added VolumeAboveFloatation calculation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#141} with diff file ISSM-16276-16277.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/IceVolumeAboveFloatationEnum.m\\
+Export determination: 6. \\
+Rationale: added volume above floatation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#142} with diff file ISSM-16277-16278.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed hack\\
+\vspace{3em}
+
+\noindent \textbf{Change \#143} with diff file ISSM-16278-16279.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive327.nc\\
+Export determination: 6. \\
+Rationale: Update archives 122 and 327\\
+\vspace{3em}
+
+\noindent \textbf{Change \#144} with diff file ISSM-16279-16280.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/meshconvert.m\\
+Export determination: 6. \\
+Rationale: CHG: issue with order of varargin\\
+\vspace{3em}
+
+\noindent \textbf{Change \#145} with diff file ISSM-16280-16281.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/Mesh.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added comment\\
+\vspace{3em}
+
+\noindent \textbf{Change \#146} with diff file ISSM-16281-16282.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/meshconvert.m M /issm/trunk-jpl/src/m/mesh/meshconvert.py\\
+Export determination: 6. \\
+Rationale: CHG: updated pythonb script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#147} with diff file ISSM-16282-16283.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing compilation warnings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#148} with diff file ISSM-16283-16284.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive327.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archive on larsen directly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#149} with diff file ISSM-16284-16285.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/meshconvert.py\\
+Export determination: 6. \\
+Rationale: BUG: typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#150} with diff file ISSM-16285-16286.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/pfe.m\\
+Export determination: 6. \\
+Rationale: CHG: added ivy cluster\\
+\vspace{3em}
+
+\noindent \textbf{Change \#151} with diff file ISSM-16286-16287.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: syncing syntax highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#152} with diff file ISSM-16287-16288.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/mesh2d.m A /issm/trunk-jpl/src/m/classes/mesh2d.py D /issm/trunk-jpl/src/m/classes/model A /issm/trunk-jpl/src/m/classes/model.m (from /issm/trunk-jpl/src/m/classes/model/model.m:16222) A /issm/trunk-jpl/src/m/classes/model.py (from /issm/trunk-jpl/src/m/classes/model/model.py:16222) D /issm/trunk-jpl/src/m/classes/planetmesh.m A /issm/trunk-jpl/src/m/classes/spheremesh.m (from /issm/trunk-jpl/src/m/classes/planetmesh.m:16222)\\
+Export determination: 6. \\
+Rationale: CHG: starting new mesh class and removed planet since it is a model with a sphere mesh class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#153} with diff file ISSM-16288-16289.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: removed src/m/classes/model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#154} with diff file ISSM-16289-16290.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/shared/String/sharedstring.h D /issm/trunk-jpl/src/c/shared/String/stricmp.cpp\\
+Export determination: 6. \\
+Rationale: DEL: removing strcmpi not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#155} with diff file ISSM-16290-16291.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to have Flowequations in there\\
+\vspace{3em}
+
+\noindent \textbf{Change \#156} with diff file ISSM-16291-16292.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/CreateNodesBalancevelocity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity/UpdateElementsBalancevelocity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateFaces.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateSingleNodeToElementConnectivity.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FacesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/UpdateElementsMasstransport.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateNodesStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed mesh dimension and replaced by meshtype (I know... type is not good but I could not come up with anything better), prepare changes for flowband model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#157} with diff file ISSM-16292-16293.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/mesh.py\\
+Export determination: 6. \\
+Rationale: CHG: removed mesh dimension and replaced by meshtype (I know... type is not good but I could not come up with anything better), prepare changes for flowband model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#158} with diff file ISSM-16293-16294.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/Mesh2DhorizontalEnum.m A /issm/trunk-jpl/src/m/enum/Mesh2DverticalEnum.m A /issm/trunk-jpl/src/m/enum/Mesh3DEnum.m D /issm/trunk-jpl/src/m/enum/MeshDimensionEnum.m A /issm/trunk-jpl/src/m/enum/MeshTypeEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: synced enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#159} with diff file ISSM-16294-16295.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/mesh.py\\
+Export determination: 6. \\
+Rationale: CHG: no more mesh.dimenstion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#160} with diff file ISSM-16295-16296.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/mesh2d.m M /issm/trunk-jpl/src/m/classes/mesh2d.py M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py\\
+Export determination: 6. \\
+Rationale: CHG: preparing 2d horizontal mesh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#161} with diff file ISSM-16296-16297.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp\\
+Export determination: 6. \\
+Rationale: BUG: save Bbar if 2d, not 3d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#162} with diff file ISSM-16297-16298.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/massfluxatgate.m M /issm/trunk-jpl/src/m/classes/model.m A /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/classes/qmu.m M /issm/trunk-jpl/src/m/classes/qmu.py M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: NEW: starting new way of processing responses.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#163} with diff file ISSM-16298-16299.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/massfluxatgate.m M /issm/trunk-jpl/src/m/classes/outputdefinition.m D /issm/trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m A /issm/trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m D /issm/trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: transferring to outputdefinitions framework.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#164} with diff file ISSM-16299-16300.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/damage.m\\
+Export determination: 6. \\
+Rationale: Updating display\\
+\vspace{3em}
+
+\noindent \textbf{Change \#165} with diff file ISSM-16300-16301.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: CHG: bug fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#166} with diff file ISSM-16301-16302.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h A /issm/trunk-jpl/src/c/classes/Massfluxatgate.h M /issm/trunk-jpl/src/c/classes/classes.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m D /issm/trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m A /issm/trunk-jpl/src/m/enum/MassfluxatgateEnum.m A /issm/trunk-jpl/src/m/enum/OutputdefinitionEnum.m A /issm/trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: reworking the mass flux gate within the qmu solution.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#167} with diff file ISSM-16302-16303.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: CHG: bug fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#168} with diff file ISSM-16303-16304.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m\\
+Export determination: 6. \\
+Rationale: Upgraded export vtk to grab all the solutions of all the result structures\\
+\vspace{3em}
+
+\noindent \textbf{Change \#169} with diff file ISSM-16304-16305.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h D /issm/trunk-jpl/src/c/classes/Massfluxatgate.h M /issm/trunk-jpl/src/c/classes/classes.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/damage.m D /issm/trunk-jpl/src/m/classes/massfluxatgate.m M /issm/trunk-jpl/src/m/classes/model.m D /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/classes/qmu.m M /issm/trunk-jpl/src/m/classes/qmu.py M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m A /issm/trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m (from /issm/trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m:16296) M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m (from /issm/trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m:16296) A /issm/trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m (from /issm/trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m:16296) D /issm/trunk-jpl/src/m/enum/MassfluxatgateEnum.m D /issm/trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m D /issm/trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m D /issm/trunk-jpl/src/m/enum/OutputdefinitionEnum.m D /issm/trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m A /issm/trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m (from /issm/trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m:16296) M /issm/trunk-jpl/test/NightlyRun/test234.m\\
+Export determination: 6. \\
+Rationale: CHG: reverting to version 16296\\
+\vspace{3em}
+
+\noindent \textbf{Change \#170} with diff file ISSM-16305-16306.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m\\
+Export determination: 6. \\
+Rationale: CHG: back to new version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#171} with diff file ISSM-16306-16307.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/BinRead.py\\
+Export determination: 6. \\
+Rationale: CHG: missing import\\
+\vspace{3em}
+
+\noindent \textbf{Change \#172} with diff file ISSM-16307-16308.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/inversion.m M /issm/trunk-jpl/src/m/classes/inversion.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/StepResponsesEnum.m M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test319.m M /issm/trunk-jpl/test/NightlyRun/test319.py M /issm/trunk-jpl/test/NightlyRun/test320.m M /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.m M /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test415.py M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test416.py M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test611.m M /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/NightlyRun/test612.m M /issm/trunk-jpl/test/NightlyRun/test612.py M /issm/trunk-jpl/test/NightlyRun/test613.m M /issm/trunk-jpl/test/NightlyRun/test613.py\\
+Export determination: 6. \\
+Rationale: CHG: md.inversion.cost\_functions is now only one line (i.e., we cannot change the cost function during the optimization)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#173} with diff file ISSM-16308-16309.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/NightlyRun/test612.py M /issm/trunk-jpl/test/NightlyRun/test613.py\\
+Export determination: 6. \\
+Rationale: CHG: fixing python tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#174} with diff file ISSM-16309-16310.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with volumeabovefloatation function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#175} with diff file ISSM-16310-16311.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test426.m\\
+Export determination: 6. \\
+Rationale: NEW: added IceVolumeAboveFloatation test in NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#176} with diff file ISSM-16311-16312.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: NEW: test on IceVolumeAboveFloatation also in python tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#177} with diff file ISSM-16312-16313.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive424.nc M /issm/trunk-jpl/test/Archives/Archive426.nc\\
+Export determination: 6. \\
+Rationale: FIX: updated archives for IceVolumeAboveFloatation results\\
+\vspace{3em}
+
+\noindent \textbf{Change \#178} with diff file ISSM-16313-16314.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\\
+Export determination: 6. \\
+Rationale: CHG: weights are now in DatasetInput, fetch by Enum instead of weightindex\\
+\vspace{3em}
+
+\noindent \textbf{Change \#179} with diff file ISSM-16314-16315.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.h M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.h M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h\\
+Export determination: 6. \\
+Rationale: CHG: removing all references to weight\_index\\
+\vspace{3em}
+
+\noindent \textbf{Change \#180} with diff file ISSM-16315-16316.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG: memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#181} with diff file ISSM-16316-16317.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/mech/robintemperature.m\\
+Export determination: 6. \\
+Rationale: NEW: analytical solution of Robin (1955) for the vertical temperature distribution of an ice sheet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#182} with diff file ISSM-16317-16318.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/parameterization/setflowequation.m\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of meshdimension\\
+\vspace{3em}
+
+\noindent \textbf{Change \#183} with diff file ISSM-16318-16319.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of meshdimension\\
+\vspace{3em}
+
+\noindent \textbf{Change \#184} with diff file ISSM-16319-16320.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_contour.m M /issm/trunk-jpl/src/m/plot/plot\_overlay.m\\
+Export determination: 6. \\
+Rationale: CHG: minor improvements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#185} with diff file ISSM-16320-16321.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed wrong enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#186} with diff file ISSM-16321-16322.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to reset rheology in 2d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#187} with diff file ISSM-16322-16323.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp M /issm/trunk-jpl/src/c/shared/Elements/LliboutryDuval.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/test/Archives/Archive121.nc M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive326.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test327.py M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test431.py\\
+Export determination: 6. \\
+Rationale: CHG: enthalpy basal decision chart updated; thermal.isdynamicbasalspc now part of checkconsistency; tests \& archives updated\\
+\vspace{3em}
+
+\noindent \textbf{Change \#188} with diff file ISSM-16323-16324.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: added requestedoutputs for tests 424 and 426\\
+\vspace{3em}
+
+\noindent \textbf{Change \#189} with diff file ISSM-16324-16325.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m A /issm/trunk-jpl/src/m/mesh/triangle2dvertical.m\\
+Export determination: 6. \\
+Rationale: CHG: added vertical support for bamg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#190} with diff file ISSM-16325-16326.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/plot/applyoptions.m M /issm/trunk-jpl/src/m/plot/processdata.m M /issm/trunk-jpl/src/m/plot/processmesh.m\\
+Export determination: 6. \\
+Rationale: NEW: plotting capabilities for mesh2d vertical\\
+\vspace{3em}
+
+\noindent \textbf{Change \#191} with diff file ISSM-16326-16327.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive432.nc\\
+Export determination: 6. \\
+Rationale: CHG: updating archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#192} with diff file ISSM-16327-16328.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing tso with new responses\\
+\vspace{3em}
+
+\noindent \textbf{Change \#193} with diff file ISSM-16328-16329.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h\\
+Export determination: 6. \\
+Rationale: CHG: added support for mesh 2d vertical partitioning\\
+\vspace{3em}
+
+\noindent \textbf{Change \#194} with diff file ISSM-16329-16330.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h\\
+Export determination: 6. \\
+Rationale: CHG: fixing MeshPartition with different meshes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#195} with diff file ISSM-16330-16331.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing reCast for AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#196} with diff file ISSM-16331-16332.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/tmp332.m\\
+Export determination: 6. \\
+Rationale: DEL: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#197} with diff file ISSM-16332-16333.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.m M /issm/trunk-jpl/src/m/classes/geometry.m M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: preparing mesh2dvertical\\
+\vspace{3em}
+
+\noindent \textbf{Change \#198} with diff file ISSM-16333-16334.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m\\
+Export determination: 6. \\
+Rationale: CHG: marshall y as 0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#199} with diff file ISSM-16334-16335.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding case mesh2dvertical\\
+\vspace{3em}
+
+\noindent \textbf{Change \#200} with diff file ISSM-16335-16336.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/geometry.m M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: improving mesh2dvertical capabilities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#201} with diff file ISSM-16336-16337.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Vertex.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNumberNodeToElementConnectivity.cpp\\
+Export determination: 6. \\
+Rationale: CHG: improving mesh2dvertical capabilities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#202} with diff file ISSM-16337-16338.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating highlighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#203} with diff file ISSM-16338-16339.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/XZEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: preparing local referential for FS 2d flowband\\
+\vspace{3em}
+
+\noindent \textbf{Change \#204} with diff file ISSM-16339-16340.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/shp/shpread.m A /issm/trunk-jpl/src/m/shp/shpwrite.m\\
+Export determination: 6. \\
+Rationale: CHG: shp write routine\\
+\vspace{3em}
+
+\noindent \textbf{Change \#205} with diff file ISSM-16340-16341.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/shp/shpread.m\\
+Export determination: 6. \\
+Rationale: CHG: modification to not wipe out all fields of the shape file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#206} with diff file ISSM-16341-16342.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/robintemperature.m\\
+Export determination: 6. \\
+Rationale: missed negative sign for heat flux\\
+\vspace{3em}
+
+\noindent \textbf{Change \#207} with diff file ISSM-16342-16343.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/robintemperature.m\\
+Export determination: 6. \\
+Rationale: ensure element-wise operations in temperature calculation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#208} with diff file ISSM-16343-16344.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp A /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp A /issm/trunk-jpl/src/c/classes/Elements/Seg.h A /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp A /issm/trunk-jpl/src/c/classes/Elements/SegRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateConstraintsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateConstraintsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/CreateNodesStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical/UpdateElementsStressbalanceVertical.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/SegEnum.m A /issm/trunk-jpl/src/m/enum/SegInputEnum.m D /issm/trunk-jpl/src/m/enum/XZEnum.m M /issm/trunk-jpl/src/m/mesh/bamg.m\\
+Export determination: 6. \\
+Rationale: CHG: adding some support for 2d FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#209} with diff file ISSM-16344-16345.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: BUG: missed project2d for spcdamage\\
+\vspace{3em}
+
+\noindent \textbf{Change \#210} with diff file ISSM-16345-16346.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m M /issm/trunk-jpl/test/NightlyRun/IdToName.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed test names\\
+\vspace{3em}
+
+\noindent \textbf{Change \#211} with diff file ISSM-16346-16347.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing test303\\
+\vspace{3em}
+
+\noindent \textbf{Change \#212} with diff file ISSM-16347-16348.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: need to cast to int\\
+\vspace{3em}
+
+\noindent \textbf{Change \#213} with diff file ISSM-16348-16349.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive331.nc M /issm/trunk-jpl/test/NightlyRun/test331.m M /issm/trunk-jpl/test/NightlyRun/test331.py\\
+Export determination: 6. \\
+Rationale: CHG: added spc on left side\\
+\vspace{3em}
+
+\noindent \textbf{Change \#214} with diff file ISSM-16349-16350.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_contour.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed undefined map\\
+\vspace{3em}
+
+\noindent \textbf{Change \#215} with diff file ISSM-16350-16351.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Materials/Material.h M /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h\\
+Export determination: 6. \\
+Rationale: CHG: moving along with 2d vertical FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#216} with diff file ISSM-16351-16352.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp\\
+Export determination: 6. \\
+Rationale: CHG: done with 2d FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#217} with diff file ISSM-16352-16353.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp\\
+Export determination: 6. \\
+Rationale: CHG: taylor hood 2d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#218} with diff file ISSM-16353-16354.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m\\
+Export determination: 6. \\
+Rationale: Correction of the header\\
+\vspace{3em}
+
+\noindent \textbf{Change \#219} with diff file ISSM-16354-16355.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed DG tests\\
+\vspace{3em}
+
+\noindent \textbf{Change \#220} with diff file ISSM-16355-16356.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/contrib/bamg/exportgmsh.m\\
+Export determination: 6. \\
+Rationale: CHG: added exportgmsh.m to export mesh in gmsh format\\
+\vspace{3em}
+
+\noindent \textbf{Change \#221} with diff file ISSM-16356-16357.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: BUG: updated loadobj for damage classe\\
+\vspace{3em}
+
+\noindent \textbf{Change \#222} with diff file ISSM-16357-16358.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing temperature hack, loop over nodes missing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#223} with diff file ISSM-16358-16359.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/regional/basinzoom.m M /issm/trunk-jpl/src/m/regional/isbasin.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed broken reginal basin display\\
+\vspace{3em}
+
+\noindent \textbf{Change \#224} with diff file ISSM-16359-16360.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/enthalpy\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.h M /issm/trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp\\
+Export determination: 6. \\
+Rationale: BUG: Enthalpy: basal melting and refreezing works now for zero velocities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#225} with diff file ISSM-16360-16361.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/PostprocessingEnthalpyx/PostprocessingEnthalpyx.cpp M /issm/trunk-jpl/src/c/shared/Elements/DrainageFunctionWaterfraction.cpp M /issm/trunk-jpl/test/Archives/Archive121.nc M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive326.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc\\
+Export determination: 6. \\
+Rationale: CHG: exclude buggy drainage of water for now. Update archives.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#226} with diff file ISSM-16361-16362.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed SIA SSA coupling\\
+\vspace{3em}
+
+\noindent \textbf{Change \#227} with diff file ISSM-16362-16363.diff: \\
+Function name: \\
+A /issm/trunk-jpl/scripts/ol.m\\
+Export determination: 6. \\
+Rationale: CHG: handy matlab hookup to bash script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#228} with diff file ISSM-16363-16364.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/CreateParametersStressbalance.cpp M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/masstransport.py M /issm/trunk-jpl/src/m/classes/snowpack.m M /issm/trunk-jpl/src/m/classes/steadystate.m M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py M /issm/trunk-jpl/test/NightlyRun/android.m M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test110.m M /issm/trunk-jpl/test/NightlyRun/test110.py M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test111.py M /issm/trunk-jpl/test/NightlyRun/test234.m M /issm/trunk-jpl/test/NightlyRun/test235.m M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test3020.py M /issm/trunk-jpl/test/NightlyRun/test3021.m M /issm/trunk-jpl/test/NightlyRun/test3101.m M /issm/trunk-jpl/test/NightlyRun/test3101.py M /issm/trunk-jpl/test/NightlyRun/test3103.m M /issm/trunk-jpl/test/NightlyRun/test3103.py M /issm/trunk-jpl/test/NightlyRun/test3110.m M /issm/trunk-jpl/test/NightlyRun/test3110.py M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test328.py M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test329.py M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: changing requested outputs from enums to strings\\
+\vspace{3em}
+
+\noindent \textbf{Change \#229} with diff file ISSM-16364-16365.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h\\
+Export determination: 6. \\
+Rationale: NEW: adding front to FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#230} with diff file ISSM-16365-16366.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing useless checkconsistency\\
+\vspace{3em}
+
+\noindent \textbf{Change \#231} with diff file ISSM-16366-16367.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/contrib/bamg/exportgmsh.m A /issm/trunk-jpl/src/m/contrib/dassflow A /issm/trunk-jpl/src/m/contrib/dassflow/exportgmsh.m (from /issm/trunk-jpl/src/m/contrib/bamg/exportgmsh.m:16364)\\
+Export determination: 6. \\
+Rationale: NEW: moved exportgmsh to dassflow\\
+\vspace{3em}
+
+\noindent \textbf{Change \#232} with diff file ISSM-16367-16368.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/Enum.h M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh\\
+Export determination: 6. \\
+Rationale: NEW: added StringToEnum return -1 if not found\\
+\vspace{3em}
+
+\noindent \textbf{Change \#233} with diff file ISSM-16368-16369.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/transient.m\\
+Export determination: 6. \\
+Rationale: CHG: better check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#234} with diff file ISSM-16369-16370.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model.m\\
+Export determination: 6. \\
+Rationale: CHG: reverting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#235} with diff file ISSM-16370-16371.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: CHG: better check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#236} with diff file ISSM-16371-16372.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/analyses.h A /issm/trunk-jpl/src/c/analyses/meshdeformation\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation A /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MeshdeformationAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/MeshdeformationSolutionEnum.m\\
+Export determination: 6. \\
+Rationale: NEW: preparing mesh deformation module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#237} with diff file ISSM-16372-16373.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/tai\\
+Export determination: 6. \\
+Rationale: CHG: fixed typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#238} with diff file ISSM-16373-16374.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added friction for FS flowline\\
+\vspace{3em}
+
+\noindent \textbf{Change \#239} with diff file ISSM-16374-16375.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG: missing IceVolumeAboveFloatation output in RequestedOutputx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#240} with diff file ISSM-16375-16376.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed indentation in python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#241} with diff file ISSM-16376-16377.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp A /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.h M /issm/trunk-jpl/src/c/classes/gauss/gaussobjects.h\\
+Export determination: 6. \\
+Rationale: NEW: added GaussSeg\\
+\vspace{3em}
+
+\noindent \textbf{Change \#242} with diff file ISSM-16377-16378.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/SegRef.h\\
+Export determination: 6. \\
+Rationale: NEW: added more capabilities to SegRef\\
+\vspace{3em}
+
+\noindent \textbf{Change \#243} with diff file ISSM-16378-16379.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#244} with diff file ISSM-16379-16380.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m A /issm/trunk-jpl/src/m/mesh/bamgflowband.m\\
+Export determination: 6. \\
+Rationale: NEW: added bamgflowband.m for flowband meshes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#245} with diff file ISSM-16380-16381.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive701.nc M /issm/trunk-jpl/test/NightlyRun/IdToName.m A /issm/trunk-jpl/test/NightlyRun/test701.m\\
+Export determination: 6. \\
+Rationale: NEW: added flowband NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#246} with diff file ISSM-16381-16382.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: syncing syntax\\
+\vspace{3em}
+
+\noindent \textbf{Change \#247} with diff file ISSM-16382-16383.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/bedslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp M /issm/trunk-jpl/src/c/classes/Elements/ElementHook.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/SegRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp M /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h A /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp A /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added bed slope calculation (needs debugging still)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#248} with diff file ISSM-16383-16384.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: BUG: trying to fix python NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#249} with diff file ISSM-16384-16385.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed seg faults\\
+\vspace{3em}
+
+\noindent \textbf{Change \#250} with diff file ISSM-16385-16386.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/masstransport.py M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: BUG: fixing python NR again\\
+\vspace{3em}
+
+\noindent \textbf{Change \#251} with diff file ISSM-16386-16387.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: dp needs to be initialized\\
+\vspace{3em}
+
+\noindent \textbf{Change \#252} with diff file ISSM-16387-16388.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h\\
+Export determination: 6. \\
+Rationale: CHG: Fixing local coordinate system for flowband model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#253} with diff file ISSM-16388-16389.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/classes/Definition.h M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h A /issm/trunk-jpl/src/c/classes/Massfluxatgate.h M /issm/trunk-jpl/src/c/classes/classes.h A /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h A /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex A /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp A /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp A /issm/trunk-jpl/src/m/classes/massfluxatgate.m A /issm/trunk-jpl/src/m/classes/massfluxatgate.py M /issm/trunk-jpl/src/m/classes/masstransport.py M /issm/trunk-jpl/src/m/classes/model.m M /issm/trunk-jpl/src/m/classes/model.py A /issm/trunk-jpl/src/m/classes/outputdefinition.m A /issm/trunk-jpl/src/m/classes/outputdefinition.py M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/classes/transient.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MassfluxatgateEnum.m A /issm/trunk-jpl/src/m/enum/MassfluxatgateNameEnum.m A /issm/trunk-jpl/src/m/enum/MassfluxatgateSegmentsEnum.m A /issm/trunk-jpl/src/m/enum/OutputdefinitionEnum.m A /issm/trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m M /issm/trunk-jpl/test/Par/SquareEISMINT.par M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.par M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: NEW: new capbility to request outputs that can be defined very widely in the outputdefinition field of the model. For now, we have implemented the massfluxatgate definition, which can be referred to inthe requested\_outputs field of stressbalance, transient and masstransport solutions.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#254} with diff file ISSM-16389-16390.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/contrib/dassflow/importgmsh.m\\
+Export determination: 6. \\
+Rationale: NEW: added importgmsh.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#255} with diff file ISSM-16390-16391.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m\\
+Export determination: 6. \\
+Rationale: CHG: added conversion from mesh to mesh2dvertical\\
+\vspace{3em}
+
+\noindent \textbf{Change \#256} with diff file ISSM-16391-16392.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: bug fix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#257} with diff file ISSM-16392-16393.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m\\
+Export determination: 6. \\
+Rationale: CHG: took out verbose\\
+\vspace{3em}
+
+\noindent \textbf{Change \#258} with diff file ISSM-16393-16394.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py\\
+Export determination: 6. \\
+Rationale: CHG: added checks on mass fluxes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#259} with diff file ISSM-16394-16395.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/dassflow/importgmsh.m\\
+Export determination: 6. \\
+Rationale: CHG: improvements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#260} with diff file ISSM-16395-16396.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mesh2dvertical.m M /issm/trunk-jpl/src/m/contrib/dassflow/importgmsh.m M /issm/trunk-jpl/src/m/mesh/bamgflowband.m\\
+Export determination: 6. \\
+Rationale: NEW: added vertexonsurface for 2d flowline models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#261} with diff file ISSM-16396-16397.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/massfluxatgate.py\\
+Export determination: 6. \\
+Rationale: CHG: wrong array format\\
+\vspace{3em}
+
+\noindent \textbf{Change \#262} with diff file ISSM-16397-16398.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive101.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive for new test with mass fluxes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#263} with diff file ISSM-16398-16399.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed issues with casting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#264} with diff file ISSM-16399-16400.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed bad indices\\
+\vspace{3em}
+
+\noindent \textbf{Change \#265} with diff file ISSM-16400-16401.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/DependentObject.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py\\
+Export determination: 6. \\
+Rationale: CHG: trying autodiff output definition responses\\
+\vspace{3em}
+
+\noindent \textbf{Change \#266} with diff file ISSM-16401-16402.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed coordinate system in inputupdatefromsolution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#267} with diff file ISSM-16402-16403.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DependentObject.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor debugging\\
+\vspace{3em}
+
+\noindent \textbf{Change \#268} with diff file ISSM-16403-16404.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/Par/SquareShelf2.par M /issm/trunk-jpl/test/Par/SquareShelf2.py\\
+Export determination: 6. \\
+Rationale: CHG: do not define outputdefinitions by default\\
+\vspace{3em}
+
+\noindent \textbf{Change \#269} with diff file ISSM-16404-16405.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test701.m M /issm/trunk-jpl/test/Par/SquareEISMINT.par M /issm/trunk-jpl/test/Par/SquareEISMINT.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par M /issm/trunk-jpl/test/Par/SquareSheetShelf.py M /issm/trunk-jpl/test/Par/SquareShelf.par M /issm/trunk-jpl/test/Par/SquareShelf.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py M /issm/trunk-jpl/test/Par/SquareThermal.par M /issm/trunk-jpl/test/Par/SquareThermal.py\\
+Export determination: 6. \\
+Rationale: CHG: do not define outputdefinitions by default, only define it for test101\\
+\vspace{3em}
+
+\noindent \textbf{Change \#270} with diff file ISSM-16405-16406.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/classes/outputdefinition.py\\
+Export determination: 6. \\
+Rationale: CHG: enums do not need to be a field of outputdefinitions, define it localy at marshall\\
+\vspace{3em}
+
+\noindent \textbf{Change \#271} with diff file ISSM-16406-16407.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/geometry/NowickiProfile.m\\
+Export determination: 6. \\
+Rationale: NEW: added NowickiProfile.m for transition zone\\
+\vspace{3em}
+
+\noindent \textbf{Change \#272} with diff file ISSM-16407-16408.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/outputdefinition.m M /issm/trunk-jpl/src/m/classes/outputdefinition.py M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/OutputdefinitionEnumsEnum.m A /issm/trunk-jpl/src/m/enum/OutputdefinitionListEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: renaming OutputdefinitionEnumsEnum OutputdefinitionListEnum (Enum should not be part of the name. this creates problems in matlab's version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#273} with diff file ISSM-16408-16409.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed Enum name:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#274} with diff file ISSM-16409-16410.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: pressure was not well retrieved\\
+\vspace{3em}
+
+\noindent \textbf{Change \#275} with diff file ISSM-16410-16411.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive702.nc M /issm/trunk-jpl/test/NightlyRun/test701.m A /issm/trunk-jpl/test/NightlyRun/test702.m\\
+Export determination: 6. \\
+Rationale: NEW: added test702 NR test\\
+\vspace{3em}
+
+\noindent \textbf{Change \#276} with diff file ISSM-16411-16412.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par\\
+Export determination: 6. \\
+Rationale: CHG: hiding output definitions in par file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#277} with diff file ISSM-16412-16413.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/NowickiProfile.m\\
+Export determination: 6. \\
+Rationale: CHG: added sea level:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#278} with diff file ISSM-16413-16414.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/modules/Shp2Expx M /issm/trunk-jpl/src/c/modules/modules.h D /issm/trunk-jpl/src/wrappers/Shp2Exp A /issm/trunk-jpl/src/wrappers/ShpRead (from /issm/trunk-jpl/src/wrappers/Shp2Exp:16407) D /issm/trunk-jpl/src/wrappers/ShpRead/Shp2Exp.cpp D /issm/trunk-jpl/src/wrappers/ShpRead/Shp2Exp.h A /issm/trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp (from /issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp:16407) A /issm/trunk-jpl/src/wrappers/ShpRead/ShpRead.h (from /issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.h:16407) M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: removing Shp2Exp and replace with ShpRead to be continued\\
+\vspace{3em}
+
+\noindent \textbf{Change \#279} with diff file ISSM-16414-16415.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/ShpRead/ShpRead.cpp\\
+Export determination: 6. \\
+Rationale: NEW: first verions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#280} with diff file ISSM-16415-16416.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h A /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h M /issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp A /issm/trunk-jpl/src/c/toolkits/issm/SparseRow.h M /issm/trunk-jpl/src/c/toolkits/issm/issmtoolkit.h A /issm/trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp M /issm/trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MpiSparseEnum.m M /issm/trunk-jpl/src/m/solvers/issmmumpssolver.m\\
+Export determination: 6. \\
+Rationale: NEW: implemented new IssmMpiSparseMat format. Switched the mumps solver to this new format.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#281} with diff file ISSM-16416-16417.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/analyticaldamage.m A /issm/trunk-jpl/src/m/mech/backstressfrominversion.m A /issm/trunk-jpl/src/m/mech/damagefrominversion.m A /issm/trunk-jpl/src/m/mech/thomasparams.m\\
+Export determination: 6. \\
+Rationale: NEW: functions for calculating ice shelf damage and backstress from inversion (B) results.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#282} with diff file ISSM-16417-16418.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug\\
+\vspace{3em}
+
+\noindent \textbf{Change \#283} with diff file ISSM-16418-16419.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: BUG: linewidth can be passed as a cell\\
+\vspace{3em}
+
+\noindent \textbf{Change \#284} with diff file ISSM-16419-16420.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h\\
+Export determination: 6. \\
+Rationale: CHG: buf fix.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#285} with diff file ISSM-16420-16421.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/Par/SquareShelfConstrained.par\\
+Export determination: 6. \\
+Rationale: CHG: moving outputdefinitions back to test101\\
+\vspace{3em}
+
+\noindent \textbf{Change \#286} with diff file ISSM-16421-16422.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: simplifying InputUpdateFromSolution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#287} with diff file ISSM-16422-16423.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing InputUpdateFromSolutionFS bug, in which we do not transform the solution vector correctly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#288} with diff file ISSM-16423-16424.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.m\\
+Export determination: 6. \\
+Rationale: CHG: fixing case {} = NaN for string array\\
+\vspace{3em}
+
+\noindent \textbf{Change \#289} with diff file ISSM-16424-16425.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h\\
+Export determination: 6. \\
+Rationale: CHG: improving hopefully on speed.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#290} with diff file ISSM-16425-16426.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive308.nc M /issm/trunk-jpl/test/Archives/Archive322.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive510.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives now that FS coordinate system is fixed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#291} with diff file ISSM-16426-16427.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive308.nc M /issm/trunk-jpl/test/Archives/Archive322.nc M /issm/trunk-jpl/test/Archives/Archive404.nc M /issm/trunk-jpl/test/Archives/Archive422.nc M /issm/trunk-jpl/test/Archives/Archive503.nc M /issm/trunk-jpl/test/Archives/Archive507.nc M /issm/trunk-jpl/test/Archives/Archive510.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archives now that FS coordinate system is fixed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#292} with diff file ISSM-16427-16428.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/IssmConfig/IssmConfig.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added \_HAVE\_TAO\_\\
+\vspace{3em}
+
+\noindent \textbf{Change \#293} with diff file ISSM-16428-16429.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/taoinversion.m\\
+Export determination: 6. \\
+Rationale: CHG: added TAO check\\
+\vspace{3em}
+
+\noindent \textbf{Change \#294} with diff file ISSM-16429-16430.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added error message if more than one edge is on bed (which is not supported in the current framework\\
+\vspace{3em}
+
+\noindent \textbf{Change \#295} with diff file ISSM-16430-16431.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h\\
+Export determination: 6. \\
+Rationale: CHG: improved speed on assemble routine.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#296} with diff file ISSM-16431-16432.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/initialization.m M /issm/trunk-jpl/src/m/classes/initialization.py\\
+Export determination: 6. \\
+Rationale: CHG: do not check vz if not 3d\\
+\vspace{3em}
+
+\noindent \textbf{Change \#297} with diff file ISSM-16432-16433.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/CreateNodesFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase/UpdateElementsFreeSurfaceBase.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport/CreateNodesMasstransport.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing free surfaces for 2d vertical models\\
+\vspace{3em}
+
+\noindent \textbf{Change \#298} with diff file ISSM-16433-16434.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed coupling FS\\
+\vspace{3em}
+
+\noindent \textbf{Change \#299} with diff file ISSM-16434-16435.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/SegRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/SegRef.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/UpdateElementsFreeSurfaceTop.cpp\\
+Export determination: 6. \\
+Rationale: NEW: preparing Free surfaces flowband model\\
+\vspace{3em}
+
+\noindent \textbf{Change \#300} with diff file ISSM-16435-16436.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop/CreateNodesFreeSurfaceTop.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing free surfaces\\
+\vspace{3em}
+
+\noindent \textbf{Change \#301} with diff file ISSM-16436-16437.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#302} with diff file ISSM-16437-16438.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/radarpower.m\\
+Export determination: 6. \\
+Rationale: NEW: overlay\_adjust parameters added for better tuning of brightness and contrast of overlay images. Parameters a,b,c,d must be in [0,1]. In general: To decrease contrast: increase a To increase contrast: decrease b To increase brightness: increase c To decrease brightness: decrease d Some trial-and-error is needed, and it helps to look at a histogram of the intensity first.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#303} with diff file ISSM-16438-16439.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp M /issm/trunk-jpl/src/c/toolkits/issm/SparseRow.h\\
+Export determination: 6. \\
+Rationale: CHG: optimizing sparse mpi matrix\\
+\vspace{3em}
+
+\noindent \textbf{Change \#304} with diff file ISSM-16439-16440.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp\\
+Export determination: 6. \\
+Rationale: CHG: there is a reason why I did that cast. If there is a leak, let's fix the leak, not break the AD nightlys by removing the cast.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#305} with diff file ISSM-16440-16441.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/gauss/GaussSeg.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing xDelete\\
+\vspace{3em}
+
+\noindent \textbf{Change \#306} with diff file ISSM-16441-16442.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug in module when allocating for ISSM matrices instead of PETSC\\
+\vspace{3em}
+
+\noindent \textbf{Change \#307} with diff file ISSM-16442-16443.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateConstraintsExtrudeFromBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateLoadsExtrudeFromBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/CreateNodesExtrudeFromBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase/UpdateElementsExtrudeFromBase.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateConstraintsExtrudeFromTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateLoadsExtrudeFromTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/CreateNodesExtrudeFromTop.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop/UpdateElementsExtrudeFromTop.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added extrusion solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#308} with diff file ISSM-16443-16444.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/ExtrudeFromBaseAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/ExtrudeFromTopAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/InputToExtrudeEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: added extrusion solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#309} with diff file ISSM-16444-16445.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/analyses/extrudefrombase\_core.cpp A /issm/trunk-jpl/src/c/analyses/extrudefromtop\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: missing files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#310} with diff file ISSM-16445-16446.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: MPI\_INC\_DIR directory, for MITgcm\\
+\vspace{3em}
+
+\noindent \textbf{Change \#311} with diff file ISSM-16446-16447.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Vertex.cpp M /issm/trunk-jpl/src/c/classes/Vertex.h\\
+Export determination: 6. \\
+Rationale: CHG: simplifying vertex constructors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#312} with diff file ISSM-16447-16448.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Vertex.cpp M /issm/trunk-jpl/src/c/classes/Vertex.h\\
+Export determination: 6. \\
+Rationale: NEW: fixing Updatevertex position for 2d vertical meshes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#313} with diff file ISSM-16448-16449.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#314} with diff file ISSM-16449-16450.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#315} with diff file ISSM-16450-16451.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/SparseRow.h\\
+Export determination: 6. \\
+Rationale: CHG: huge speed-up in the SetValues routine.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#316} with diff file ISSM-16451-16452.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h\\
+Export determination: 6. \\
+Rationale: CHG: faster descrutor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#317} with diff file ISSM-16452-16453.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/SparseRow.h\\
+Export determination: 6. \\
+Rationale: CHG: 30% faster code without the buffer allocation, as fast as petsc now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#318} with diff file ISSM-16453-16454.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m\\
+Export determination: 6. \\
+Rationale: CHG: no need to define requested\_output twice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#319} with diff file ISSM-16455-16456.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/mask.m\\
+Export determination: 6. \\
+Rationale: CHG: warning instead of error\\
+\vspace{3em}
+
+\noindent \textbf{Change \#320} with diff file ISSM-16456-16457.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.m\\
+Export determination: 6. \\
+Rationale: BUG: adding check consistency for requested\_outputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#321} with diff file ISSM-16457-16458.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.py\\
+Export determination: 6. \\
+Rationale: BUG: trying to update python checkfield for requested\_outputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#322} with diff file ISSM-16458-16459.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/masstransport.py M /issm/trunk-jpl/src/m/classes/steadystate.m M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: BUG: changing checkconsistency for requested\_outpus\\
+\vspace{3em}
+
+\noindent \textbf{Change \#323} with diff file ISSM-16459-16460.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.m\\
+Export determination: 6. \\
+Rationale: BUG: output\_requested can also be zero\\
+\vspace{3em}
+
+\noindent \textbf{Change \#324} with diff file ISSM-16460-16461.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.py\\
+Export determination: 6. \\
+Rationale: BUG: consistency in python for requested\_outputs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#325} with diff file ISSM-16461-16462.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h\\
+Export determination: 6. \\
+Rationale: NEW: new output API for stressbalance. No call to InputToResults, Results are directly put into femmodel->results as parallel vectors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#326} with diff file ISSM-16462-16463.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3021.m M /issm/trunk-jpl/test/NightlyRun/test3101.m M /issm/trunk-jpl/test/NightlyRun/test3103.m M /issm/trunk-jpl/test/NightlyRun/test3103.py\\
+Export determination: 6. \\
+Rationale: CHG: changed stressbalance.requestedoutput\\
+\vspace{3em}
+
+\noindent \textbf{Change \#327} with diff file ISSM-16463-16464.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/stressbalance.m M /issm/trunk-jpl/src/m/classes/stressbalance.py\\
+Export determination: 6. \\
+Rationale: CHG: added dafault outputs for stressbalance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#328} with diff file ISSM-16464-16465.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/masstransport.py\\
+Export determination: 6. \\
+Rationale: CHG: added dafault outputs for masstransport\\
+\vspace{3em}
+
+\noindent \textbf{Change \#329} with diff file ISSM-16465-16466.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/checkfield.py\\
+Export determination: 6. \\
+Rationale: BUG: fixing check that is list\\
+\vspace{3em}
+
+\noindent \textbf{Change \#330} with diff file ISSM-16466-16467.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/commops/DetermineRowRankFromLocalSize.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#331} with diff file ISSM-16467-16468.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed leak.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#332} with diff file ISSM-16468-16469.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed issues with casting of passive into actives.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#333} with diff file ISSM-16469-16470.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp\\
+Export determination: 6. \\
+Rationale: BUG: make sure identical results are deleted before being added\\
+\vspace{3em}
+
+\noindent \textbf{Change \#334} with diff file ISSM-16470-16471.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/analyses/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/analyses/adjointbalancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/adjointstressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/analyses/balancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/analyses/bedslope\_core.cpp D /issm/trunk-jpl/src/c/analyses/enthalpy\_core.cpp M /issm/trunk-jpl/src/c/analyses/hydrology\_core.cpp M /issm/trunk-jpl/src/c/analyses/masstransport\_core.cpp M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp M /issm/trunk-jpl/src/c/analyses/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/classes/Elements/Elements.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp D /issm/trunk-jpl/src/c/classes/Patch.cpp D /issm/trunk-jpl/src/c/classes/Patch.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp M /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.h M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/initialization.m M /issm/trunk-jpl/src/m/classes/initialization.py M /issm/trunk-jpl/src/m/classes/masstransport.m M /issm/trunk-jpl/src/m/classes/settings.m M /issm/trunk-jpl/src/m/classes/settings.py M /issm/trunk-jpl/src/m/classes/steadystate.m M /issm/trunk-jpl/src/m/classes/steadystate.py M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/src/m/classes/thermal.py M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py D /issm/trunk-jpl/src/m/enum/EnthalpySolutionEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/PatchEnum.m D /issm/trunk-jpl/src/m/enum/PatchNodesEnum.m D /issm/trunk-jpl/src/m/enum/PatchVerticesEnum.m D /issm/trunk-jpl/src/m/enum/SettingsResultsAsPatchesEnum.m A /issm/trunk-jpl/src/m/enum/ThermalNumRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/ThermalRequestedOutputsEnum.m M /issm/trunk-jpl/src/m/geometry/NowickiProfile.m D /issm/trunk-jpl/src/m/interp/PatchToVec.m M /issm/trunk-jpl/src/m/plot/plot\_unit.m M /issm/trunk-jpl/src/m/plot/processdata.m M /issm/trunk-jpl/src/m/plot/processmesh.m M /issm/trunk-jpl/src/m/regional/regionaltransient2d.m D /issm/trunk-jpl/src/m/solve/MatlabProcessPatch.m D /issm/trunk-jpl/src/m/solve/MatlabProcessPatch.py M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py M /issm/trunk-jpl/src/m/solve/process\_solve\_options.m M /issm/trunk-jpl/src/m/solve/process\_solve\_options.py\\
+Export determination: 6. \\
+Rationale: NEW: merging thermal\_core with enthalpy\_core (removing EnthalpySolution), and replacing InputToResult by OutputRequest\\
+\vspace{3em}
+
+\noindent \textbf{Change \#335} with diff file ISSM-16471-16472.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/steadystate.py\\
+Export determination: 6. \\
+Rationale: CHG: removing debuging print\\
+\vspace{3em}
+
+\noindent \textbf{Change \#336} with diff file ISSM-16472-16473.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test325.m M /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test411.py\\
+Export determination: 6. \\
+Rationale: CHG: EnthalpySolution replaced by ThermalSolution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#337} with diff file ISSM-16473-16474.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/bedslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixinf some errors (see NR report)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#338} with diff file ISSM-16474-16475.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixing test101, we cannot rely on result enum anymore, need to use string only\\
+\vspace{3em}
+
+\noindent \textbf{Change \#339} with diff file ISSM-16475-16476.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/NowickiProfile.m\\
+Export determination: 6. \\
+Rationale: CHG: reverting to previous version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#340} with diff file ISSM-16476-16477.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/steadystate\_core.cpp M /issm/trunk-jpl/src/c/analyses/thermal\_core.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: for steadystate, we cannot call PostprocessingEnthalpyx...\\
+\vspace{3em}
+
+\noindent \textbf{Change \#341} with diff file ISSM-16477-16478.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/processmesh.m\\
+Export determination: 6. \\
+Rationale: BUG: fixed typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#342} with diff file ISSM-16478-16479.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/control\_core.cpp M /issm/trunk-jpl/src/c/analyses/damage\_core.cpp M /issm/trunk-jpl/src/c/analyses/gia\_core.cpp M /issm/trunk-jpl/src/c/analyses/hydrology\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/m/classes/transient.m M /issm/trunk-jpl/src/m/classes/transient.py\\
+Export determination: 6. \\
+Rationale: CHG: removing all InputToResult\\
+\vspace{3em}
+
+\noindent \textbf{Change \#343} with diff file ISSM-16479-16480.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use connectivity to create vector results so that we have the same results as before\\
+\vspace{3em}
+
+\noindent \textbf{Change \#344} with diff file ISSM-16480-16481.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test215.py\\
+Export determination: 6. \\
+Rationale: CHG: we now have Bbar in resluts instead of B\\
+\vspace{3em}
+
+\noindent \textbf{Change \#345} with diff file ISSM-16481-16482.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h\\
+Export determination: 6. \\
+Rationale: CHG: added GetInterpolation functionality\\
+\vspace{3em}
+
+\noindent \textbf{Change \#346} with diff file ISSM-16482-16483.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test328.py M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test329.py M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test511.py\\
+Export determination: 6. \\
+Rationale: CHG: transient.requestedoutputs needs to have 'default'\\
+\vspace{3em}
+
+\noindent \textbf{Change \#347} with diff file ISSM-16483-16484.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: new transient inputs need to be configured:\\
+\vspace{3em}
+
+\noindent \textbf{Change \#348} with diff file ISSM-16484-16485.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removing lat InputToResultx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#349} with diff file ISSM-16485-16486.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/InputToResultx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: DEL: removing InputToResult, not used anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#350} with diff file ISSM-16486-16487.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/classes/ElementResults M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp M /issm/trunk-jpl/src/c/classes/Elements/Elements.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.h M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h M /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp M /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: DEL: removing results from elements\\
+\vspace{3em}
+
+\noindent \textbf{Change \#351} with diff file ISSM-16487-16488.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/m/enum/BoolElementResultEnum.m D /issm/trunk-jpl/src/m/enum/DoubleElementResultEnum.m D /issm/trunk-jpl/src/m/enum/ElementResultEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/PentaP1ElementResultEnum.m D /issm/trunk-jpl/src/m/enum/TriaP1ElementResultEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: syncing enums\\
+\vspace{3em}
+
+\noindent \textbf{Change \#352} with diff file ISSM-16488-16489.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/processmesh.m\\
+Export determination: 6. \\
+Rationale: CHG: no need to check whether data is empty\\
+\vspace{3em}
+
+\noindent \textbf{Change \#353} with diff file ISSM-16489-16490.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: DEL: removing unused function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#354} with diff file ISSM-16490-16491.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m\\
+Export determination: 6. \\
+Rationale: exportVTK can now export other fields than results\\
+\vspace{3em}
+
+\noindent \textbf{Change \#355} with diff file ISSM-16491-16492.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: added gcc option for pleaides cluster\\
+\vspace{3em}
+
+\noindent \textbf{Change \#356} with diff file ISSM-16492-16493.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-pleiades-ampi-gcc.sh\\
+Export determination: 6. \\
+Rationale: NEW: new config for pleiades cluster\\
+\vspace{3em}
+
+\noindent \textbf{Change \#357} with diff file ISSM-16493-16494.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: solving circular dependencies\\
+\vspace{3em}
+
+\noindent \textbf{Change \#358} with diff file ISSM-16494-16495.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Element.h M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed bad prototype.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#359} with diff file ISSM-16495-16496.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed problem with prototypes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#360} with diff file ISSM-16496-16497.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#361} with diff file ISSM-16497-16498.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test327.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxing tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#362} with diff file ISSM-16498-16499.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak\\
+\vspace{3em}
+
+\noindent \textbf{Change \#363} with diff file ISSM-16499-16500.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Massfluxatgate.h M /issm/trunk-jpl/src/c/modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#364} with diff file ISSM-16500-16501.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/paraview/exportVTK.m\\
+Export determination: 6. \\
+Rationale: adding a NaN search and replace\\
+\vspace{3em}
+
+\noindent \textbf{Change \#365} with diff file ISSM-16501-16502.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixing memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#366} with diff file ISSM-16502-16503.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: readded check that all iomodel->data are freed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#367} with diff file ISSM-16503-16504.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#368} with diff file ISSM-16504-16505.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h M /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: CHG: merging CostFunction and RequestedOutputx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#369} with diff file ISSM-16505-16506.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/adjointbalancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/adjointstressbalance\_core.cpp M /issm/trunk-jpl/src/c/analyses/balancethickness\_core.cpp M /issm/trunk-jpl/src/c/analyses/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/analyses/bedslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/damage\_core.cpp M /issm/trunk-jpl/src/c/analyses/gia\_core.cpp M /issm/trunk-jpl/src/c/analyses/hydrology\_core.cpp M /issm/trunk-jpl/src/c/analyses/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use int* instead of char array\\
+\vspace{3em}
+
+\noindent \textbf{Change \#370} with diff file ISSM-16506-16507.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1101.m\\
+Export determination: 6. \\
+Rationale: BUG: NR validation tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#371} with diff file ISSM-16507-16508.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: do not cast int* to char**\\
+\vspace{3em}
+
+\noindent \textbf{Change \#372} with diff file ISSM-16508-16509.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1106.m\\
+Export determination: 6. \\
+Rationale: BUG: new tolerance test1106\\
+\vspace{3em}
+
+\noindent \textbf{Change \#373} with diff file ISSM-16509-16510.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: int array should not be const\\
+\vspace{3em}
+
+\noindent \textbf{Change \#374} with diff file ISSM-16510-16511.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Params/Parameters.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py D /issm/trunk-jpl/src/m/enum/NoneAnalysisEnum.m\\
+Export determination: 6. \\
+Rationale: DEL: removed NoneAnalalysis, not used anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#375} with diff file ISSM-16511-16512.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1105.nc\\
+Export determination: 6. \\
+Rationale: FIX: updated archive 1105\\
+\vspace{3em}
+
+\noindent \textbf{Change \#376} with diff file ISSM-16512-16513.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1301.m\\
+Export determination: 6. \\
+Rationale: FIX: minor tolerance\\
+\vspace{3em}
+
+\noindent \textbf{Change \#377} with diff file ISSM-16513-16514.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added check that marshalled file is not corrupt\\
+\vspace{3em}
+
+\noindent \textbf{Change \#378} with diff file ISSM-16514-16515.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/marshall.m M /issm/trunk-jpl/src/m/solve/marshall.py\\
+Export determination: 6. \\
+Rationale: NEW: added check that marshalled file is not corrupt\\
+\vspace{3em}
+
+\noindent \textbf{Change \#379} with diff file ISSM-16515-16516.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/gslib/pkriging.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed marshalling for new IoModel checkconsistentcy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#380} with diff file ISSM-16516-16517.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh\\
+Export determination: 6. \\
+Rationale: NEW: added install-3.4-greenplanet.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#381} with diff file ISSM-16517-16518.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/exp/contourlevelzero.m A /issm/trunk-jpl/src/m/exp/expcontourlevelzero.m\\
+Export determination: 6. \\
+Rationale: NEW: contourlevelzero routine piggy backing from the plot\_contour routine. Exp routine that goes with it.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#382} with diff file ISSM-16518-16519.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/analyses M /issm/trunk-jpl/src/c/classes/FemModel.cpp A /issm/trunk-jpl/src/c/cores (from /issm/trunk-jpl/src/c/analyses:16508) M /issm/trunk-jpl/src/c/cores/AdjointCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/DakotaSpawnCore.cpp D /issm/trunk-jpl/src/c/cores/EnvironmentFinalize.cpp D /issm/trunk-jpl/src/c/cores/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/cores/WrapperCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/cores/ad\_core.cpp M /issm/trunk-jpl/src/c/cores/adjointbalancethickness\_core.cpp M /issm/trunk-jpl/src/c/cores/adjointstressbalance\_core.cpp D /issm/trunk-jpl/src/c/cores/analyses.h M /issm/trunk-jpl/src/c/cores/balancethickness\_core.cpp M /issm/trunk-jpl/src/c/cores/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/cores/bedslope\_core.cpp M /issm/trunk-jpl/src/c/cores/control\_core.cpp M /issm/trunk-jpl/src/c/cores/controltao\_core.cpp A /issm/trunk-jpl/src/c/cores/cores.h (from /issm/trunk-jpl/src/c/analyses/analyses.h:16508) M /issm/trunk-jpl/src/c/cores/dakota\_core.cpp M /issm/trunk-jpl/src/c/cores/damage\_core.cpp M /issm/trunk-jpl/src/c/cores/extrudefrombase\_core.cpp M /issm/trunk-jpl/src/c/cores/extrudefromtop\_core.cpp M /issm/trunk-jpl/src/c/cores/gia\_core.cpp M /issm/trunk-jpl/src/c/cores/gradient\_core.cpp M /issm/trunk-jpl/src/c/cores/hydrology\_core.cpp M /issm/trunk-jpl/src/c/cores/masstransport\_core.cpp M /issm/trunk-jpl/src/c/cores/meshdeformation\_core.cpp M /issm/trunk-jpl/src/c/cores/objectivefunction.cpp M /issm/trunk-jpl/src/c/cores/steadystate\_core.cpp M /issm/trunk-jpl/src/c/cores/stressbalance\_core.cpp M /issm/trunk-jpl/src/c/cores/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/cores/thermal\_core.cpp R /issm/trunk-jpl/src/c/cores/transient\_core.cpp (from /issm/trunk-jpl/src/c/analyses/transient\_core.cpp:16509) A /issm/trunk-jpl/src/c/main/EnvironmentFinalize.cpp (from /issm/trunk-jpl/src/c/analyses/EnvironmentFinalize.cpp:16508) A /issm/trunk-jpl/src/c/main/EnvironmentInit.cpp (from /issm/trunk-jpl/src/c/analyses/EnvironmentInit.cpp:16508) M /issm/trunk-jpl/src/c/main/issm.h\\
+Export determination: 6. \\
+Rationale: CHG: moving analyses to cores\\
+\vspace{3em}
+
+\noindent \textbf{Change \#383} with diff file ISSM-16519-16520.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-skylla.sh\\
+Export determination: 6. \\
+Rationale: adding configuration for skylla\\
+\vspace{3em}
+
+\noindent \textbf{Change \#384} with diff file ISSM-16520-16521.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1107.nc M /issm/trunk-jpl/test/Archives/Archive1108.nc\\
+Export determination: 6. \\
+Rationale: FIX: updated archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#385} with diff file ISSM-16521-16522.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/BamgQuadtree.cpp M /issm/trunk-jpl/src/c/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/kml/KMLFileReadUtils.cpp M /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage/CreateLoadsDamage.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA/CreateConstraintsStressbalanceSIA.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed some warnings from compiler\\
+\vspace{3em}
+
+\noindent \textbf{Change \#386} with diff file ISSM-16522-16523.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1201.nc M /issm/trunk-jpl/test/Archives/Archive1202.nc M /issm/trunk-jpl/test/Archives/Archive1203.nc M /issm/trunk-jpl/test/Archives/Archive1204.nc M /issm/trunk-jpl/test/Archives/Archive1501.nc\\
+Export determination: 6. \\
+Rationale: FIX: more archives\\
+\vspace{3em}
+
+\noindent \textbf{Change \#387} with diff file ISSM-16523-16524.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1502.m\\
+Export determination: 6. \\
+Rationale: FIX: NR archives 1502 minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#388} with diff file ISSM-16524-16525.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1208.nc\\
+Export determination: 6. \\
+Rationale: FIX: minor archive 1208\\
+\vspace{3em}
+
+\noindent \textbf{Change \#389} with diff file ISSM-16525-16526.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1109.nc\\
+Export determination: 6. \\
+Rationale: FIX: minor archive 1109\\
+\vspace{3em}
+
+\noindent \textbf{Change \#390} with diff file ISSM-16526-16527.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive1110.nc\\
+Export determination: 6. \\
+Rationale: FIX: minor archive 1110\\
+\vspace{3em}
+
+\noindent \textbf{Change \#391} with diff file ISSM-16527-16528.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh\\
+Export determination: 6. \\
+Rationale: CHG: pleaides mpich2 install\\
+\vspace{3em}
+
+\noindent \textbf{Change \#392} with diff file ISSM-16528-16529.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adolc/install-withampi-pleiades-gcc.sh\\
+Export determination: 6. \\
+Rationale: CHG: new gcc pleaides configuration\\
+\vspace{3em}
+
+\noindent \textbf{Change \#393} with diff file ISSM-16529-16530.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp M /issm/trunk-jpl/src/c/classes/Elements/Seg.h M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/cores/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/cores/balancevelocity\_core.cpp M /issm/trunk-jpl/src/c/cores/bedslope\_core.cpp M /issm/trunk-jpl/src/c/cores/surfaceslope\_core.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsBedSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateConstraintsL2ProjectionBase.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsBedSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateLoadsL2ProjectionBase.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesBedSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/CreateNodesL2ProjectionBase.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsBedSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase/UpdateElementsL2ProjectionBase.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp:16526) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope:16526) A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsL2ProjectionTop.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateConstraintsSurfaceSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsL2ProjectionTop.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateLoadsSurfaceSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesL2ProjectionTop.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/CreateNodesSurfaceSlope.cpp A /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsL2ProjectionTop.cpp (from /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp:16526) D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope M /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h M /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp M /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m D /issm/trunk-jpl/src/m/enum/BedSlopeAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/BedSlopeXAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/BedSlopeYAnalysisEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/InputToL2ProjectEnum.m A /issm/trunk-jpl/src/m/enum/L2ProjectionBaseAnalysisEnum.m A /issm/trunk-jpl/src/m/enum/L2ProjectionTopAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/SurfaceSlopeAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/SurfaceSlopeXAnalysisEnum.m D /issm/trunk-jpl/src/m/enum/SurfaceSlopeYAnalysisEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: removing Surfaceslopes and bedslopes analysis, replaced by L2ProjectionBase\\
+\vspace{3em}
+
+\noindent \textbf{Change \#394} with diff file ISSM-16530-16531.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh (from /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh:16527) D /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2.sh\\
+Export determination: 6. \\
+Rationale: CHG: better resolution of names for petsc ocnfigurations\\
+\vspace{3em}
+
+\noindent \textbf{Change \#395} with diff file ISSM-16531-16532.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh\\
+Export determination: 6. \\
+Rationale: CHG: trying new configuration with gcc 4.4.4 compatible with the pleaides matlab build for version 2012b\\
+\vspace{3em}
+
+\noindent \textbf{Change \#396} with diff file ISSM-16532-16533.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py\\
+Export determination: 6. \\
+Rationale: CHG: no more SlopeAnalysisEnum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#397} with diff file ISSM-16533-16534.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/cores/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp\\
+Export determination: 6. \\
+Rationale: CHG: created datasets for SmoothedSurfaceAnalysis\\
+\vspace{3em}
+
+\noindent \textbf{Change \#398} with diff file ISSM-16534-16535.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/CMakeLists.txt M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/analyses A /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h A /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h A /issm/trunk-jpl/src/c/analyses/Analysis.h A /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h A /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h A /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h A /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h A /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h A /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h A /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h A /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h A /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h A /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h A /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h A /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h A /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h A /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h A /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h A /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h A /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h A /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h A /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h A /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h A /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h A /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h A /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h A /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp A /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h A /issm/trunk-jpl/src/c/analyses/analyses.h M /issm/trunk-jpl/src/c/classes/Node.cpp M /issm/trunk-jpl/src/c/classes/Node.h M /issm/trunk-jpl/src/c/cores/cores.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/shared/Enum/Synchronize.sh\\
+Export determination: 6. \\
+Rationale: NEW: added analyses class so that the code becomes physics oriented\\
+\vspace{3em}
+
+\noindent \textbf{Change \#399} with diff file ISSM-16535-16536.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with transient slope\\
+\vspace{3em}
+
+\noindent \textbf{Change \#400} with diff file ISSM-16536-16537.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-pleiades-gcc-4.4.4.sh A /issm/trunk-jpl/configs/config-linux64-pleiades-gcc-4.7.0.sh\\
+Export determination: 6. \\
+Rationale: CHG: gcc 4.4.4 and 4.7.0 configuration files for pleiades cluster\\
+\vspace{3em}
+
+\noindent \textbf{Change \#401} with diff file ISSM-16537-16538.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#402} with diff file ISSM-16538-16539.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#403} with diff file ISSM-16539-16540.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h M /issm/trunk-jpl/src/c/analyses/Analysis.h M /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h M /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h M /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h M /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h M /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h M /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h M /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h M /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h M /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h M /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancevelocity M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Damage M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy D /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromBase D /issm/trunk-jpl/src/c/modules/ModelProcessorx/ExtrudeFromTop D /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceBase D /issm/trunk-jpl/src/c/modules/ModelProcessorx/FreeSurfaceTop D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Gia D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCEfficient D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyDCInefficient D /issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionBase D /issm/trunk-jpl/src/c/modules/ModelProcessorx/L2ProjectionTop D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Masstransport D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting D /issm/trunk-jpl/src/c/modules/ModelProcessorx/MeshDeformation M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceSIA D /issm/trunk-jpl/src/c/modules/ModelProcessorx/StressbalanceVertical D /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal\\
+Export determination: 6. \\
+Rationale: CHG: moving model processor stuff to analyses\\
+\vspace{3em}
+
+\noindent \textbf{Change \#404} with diff file ISSM-16540-16541.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test332.m\\
+Export determination: 6. \\
+Rationale: CHG: missing semilicolon\\
+\vspace{3em}
+
+\noindent \textbf{Change \#405} with diff file ISSM-16541-16542.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp\\
+Export determination: 6. \\
+Rationale: CHG: missing damage parameters\\
+\vspace{3em}
+
+\noindent \textbf{Change \#406} with diff file ISSM-16542-16543.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h M /issm/trunk-jpl/src/c/analyses/Analysis.h M /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h M /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h M /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h M /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h M /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h M /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h M /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h M /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h M /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h M /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h M /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/MeshdeformationAnalysis.h M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeXAnalysis.h M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/SmoothedSurfaceSlopeYAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp M /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp\\
+Export determination: 6. \\
+Rationale: NEW: create all datasets once for all (nodes, elements, constraints, parameters), do not pass pointers anymore (much simpler)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#407} with diff file ISSM-16543-16544.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed new interface with no dataset pointer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#408} with diff file ISSM-16544-16545.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h D /issm/trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp D /issm/trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp\\
+Export determination: 6. \\
+Rationale: DEL: getting rid of 2 very simple files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#409} with diff file ISSM-16545-16546.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp M /issm/trunk-jpl/test/Archives/Archive120.nc M /issm/trunk-jpl/test/Archives/Archive121.nc M /issm/trunk-jpl/test/Archives/Archive122.nc M /issm/trunk-jpl/test/Archives/Archive325.nc M /issm/trunk-jpl/test/Archives/Archive327.nc M /issm/trunk-jpl/test/Archives/Archive431.nc M /issm/trunk-jpl/test/Archives/Archive432.nc\\
+Export determination: 6. \\
+Rationale: CHG: enthalpydiffusion parameter smoothed BUG: water column stays nonnegative now, minor in drainage function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#410} with diff file ISSM-16546-16547.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/bamg/SubDomain.cpp M /issm/trunk-jpl/src/c/bamg/VertexOnGeom.cpp M /issm/trunk-jpl/src/c/kml/KML\_Document.cpp M /issm/trunk-jpl/src/c/kml/KML\_File.cpp M /issm/trunk-jpl/src/c/kml/KML\_Folder.cpp M /issm/trunk-jpl/src/c/kml/KML\_GroundOverlay.cpp M /issm/trunk-jpl/src/c/kml/KML\_Icon.cpp M /issm/trunk-jpl/src/c/kml/KML\_LatLonBox.cpp M /issm/trunk-jpl/src/c/kml/KML\_LineString.cpp M /issm/trunk-jpl/src/c/kml/KML\_LineStyle.cpp M /issm/trunk-jpl/src/c/kml/KML\_LinearRing.cpp M /issm/trunk-jpl/src/c/kml/KML\_MultiGeometry.cpp M /issm/trunk-jpl/src/c/kml/KML\_Placemark.cpp M /issm/trunk-jpl/src/c/kml/KML\_Point.cpp M /issm/trunk-jpl/src/c/kml/KML\_PolyStyle.cpp M /issm/trunk-jpl/src/c/kml/KML\_Polygon.cpp M /issm/trunk-jpl/src/c/kml/KML\_Style.cpp M /issm/trunk-jpl/src/c/kml/KML\_Unknown.cpp M /issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp M /issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp\\
+Export determination: 6. \\
+Rationale: CHG: making compiler happy\\
+\vspace{3em}
+
+\noindent \textbf{Change \#411} with diff file ISSM-16547-16548.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.4-greenplanet.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-linux64.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-macosx64.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc444.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades-mpich2-gcc470.sh M /issm/trunk-jpl/externalpackages/petsc/install-3.4-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: switching to 3.4.3 which is more stable\\
+\vspace{3em}
+
+\noindent \textbf{Change \#412} with diff file ISSM-16548-16549.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/Synchronize.sh M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim\\
+Export determination: 6. \\
+Rationale: CHG: updating syntax hilighting and fixing hash indentation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#413} with diff file ISSM-16549-16550.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vimrc\\
+Export determination: 6. \\
+Rationale: CHG: fixing hash indentation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#414} with diff file ISSM-16550-16551.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp\\
+Export determination: 6. \\
+Rationale: DEL: getting rid of CreateDatasets\\
+\vspace{3em}
+
+\noindent \textbf{Change \#415} with diff file ISSM-16551-16552.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test1208.m\\
+Export determination: 6. \\
+Rationale: CHG: some tolerances NR validation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#416} with diff file ISSM-16552-16553.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/IdToName.m\\
+Export determination: 6. \\
+Rationale: BUG: added name to test 702\\
+\vspace{3em}
+
+\noindent \textbf{Change \#417} with diff file ISSM-16553-16554.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test702.m\\
+Export determination: 6. \\
+Rationale: CHG: tolerances test702\\
+\vspace{3em}
+
Index: issm/oecreview/Archive/16133-16554/r1.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/r1.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/r1.tex	(revision 16556)
@@ -0,0 +1,1 @@
+16133
Index: issm/oecreview/Archive/16133-16554/r2.tex
===================================================================
--- issm/oecreview/Archive/16133-16554/r2.tex	(revision 16556)
+++ issm/oecreview/Archive/16133-16554/r2.tex	(revision 16556)
@@ -0,0 +1,1 @@
+16554
